Updated on 2026-08-14
This commit is contained in:
parent
903fc32bc9
commit
3c05edb758
6 changed files with 54 additions and 14 deletions
|
|
@ -55,7 +55,7 @@ object WalletManagerFactory {
|
|||
walletConfig = WalletConfig(false, true)
|
||||
)
|
||||
}
|
||||
blockchainName.contains("xrp") -> {
|
||||
blockchainName == Blockchain.XRP.id -> {
|
||||
return XrpWalletManager(
|
||||
cardId = card.cardId,
|
||||
walletPublicKey = walletPublicKey,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@ package com.tangem.blockchain.common.extensions
|
|||
import com.tangem.blockchain.common.Amount
|
||||
import java.math.BigInteger
|
||||
|
||||
fun Amount.bigIntegerValue(): BigInteger {
|
||||
return this.value!!.movePointRight(this.decimals.toInt()).toBigInteger()
|
||||
fun Amount.bigIntegerValue(): BigInteger? {
|
||||
return this.value?.movePointRight(this.decimals.toInt())?.toBigInteger()
|
||||
}
|
||||
|
|
@ -12,18 +12,18 @@ import com.tangem.blockchain.xrp.override.XrpSignedTransaction
|
|||
import org.bitcoinj.core.ECKey
|
||||
import java.math.BigInteger
|
||||
|
||||
class XrpTransactionBuilder(private val walletPublicKey: ByteArray) {
|
||||
class XrpTransactionBuilder(walletPublicKey: ByteArray) {
|
||||
private val canonicalPublicKey = XrpAddressFactory.canonizePublicKey(walletPublicKey)
|
||||
var sequence: Long? = null
|
||||
private var transaction: XrpSignedTransaction? = null
|
||||
|
||||
fun buildToSign(transactionData: TransactionData): ByteArray {
|
||||
val payment = XrpPayment()
|
||||
payment.`as`(AccountID.Account, transactionData.sourceAddress)
|
||||
payment.`as`(AccountID.Destination, transactionData.destinationAddress)
|
||||
payment.`as`(Amount.Amount, transactionData.amount.bigIntegerValue().toString())
|
||||
payment.`as`(UInt32.Sequence, sequence)
|
||||
payment.`as`(Amount.Fee, transactionData.fee!!.bigIntegerValue().toString())
|
||||
payment.putTranslated(AccountID.Account, transactionData.sourceAddress)
|
||||
payment.putTranslated(AccountID.Destination, transactionData.destinationAddress)
|
||||
payment.putTranslated(Amount.Amount, transactionData.amount.bigIntegerValue().toString())
|
||||
payment.putTranslated(UInt32.Sequence, sequence)
|
||||
payment.putTranslated(Amount.Fee, transactionData.fee!!.bigIntegerValue().toString())
|
||||
|
||||
transaction = payment.prepare(canonicalPublicKey)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,6 @@ package com.tangem.blockchain.xrp.override;
|
|||
|
||||
import java.math.BigInteger;
|
||||
|
||||
/**
|
||||
* Created by Ilia on 15.02.2018.
|
||||
*/
|
||||
|
||||
public class XrpBase58 {
|
||||
private static final char[] BASE58 = "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz".toCharArray();
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
package com.tangem.blockchain.common
|
||||
|
||||
import com.google.common.truth.Truth
|
||||
import com.tangem.CardEnvironment
|
||||
import com.tangem.common.CardEnvironment
|
||||
import com.tangem.blockchain.bitcoin.BitcoinWalletManager
|
||||
import com.tangem.blockchain.cardano.CardanoWalletManager
|
||||
import com.tangem.blockchain.ethereum.EthereumWalletManager
|
||||
import com.tangem.blockchain.stellar.StellarWalletManager
|
||||
import com.tangem.blockchain.xrp.XrpWalletManager
|
||||
import com.tangem.commands.ReadCommand
|
||||
import com.tangem.common.apdu.ResponseApdu
|
||||
import com.tangem.common.extensions.hexToBytes
|
||||
|
|
@ -56,4 +57,15 @@ internal class WalletManagerFactoryTest {
|
|||
Truth.assertThat(walletManager)
|
||||
.isInstanceOf(CardanoWalletManager::class.java)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun createXrpWalletManager() {
|
||||
val data = "0108cb21000000002154200b534d4152542043415348000201028006322e31317200034104bdad63848f97c535da53cf8fd300d24fa33f0516d194aa78ec164a06994d00204bae243a424e316c6ec845e02d9b15eafae8c19018a926b0b7435e6e941cdadb0a0400007e210c5a81020028820407e30502830754414e47454d00840358525086400ed8734b877869722c7d0b37ffb154b9fef21c54bf2c6496feb1fb5c1fc28a2ac28e201dde84f27495fa7f08b3ca2be2fb4954bf0fe78af027d6cdc16c3eee923041048196aa4b410ac44a3b9cce18e7be226aea070acc83a9cf67540fac49af25129f6a538a28ad6341358e3c4f9963064f7e365372a651d374e5c23cdd37fd099bf2050a736563703235366b31000804000f4240070100090205dc604104d2b9fb288540d54e5b32ecaf0381cd571f97f6f1ecd036b66bb11aa52ffe9981110d883080e2e255c6b1640586f7765e6faa325d1340f49b56b83d9de56bc7ed6204000f42406304000000000f01009000"
|
||||
val responseApdu = ResponseApdu(data.hexToBytes())
|
||||
val card = ReadCommand().deserialize(CardEnvironment(), responseApdu)
|
||||
val walletManager = WalletManagerFactory.makeWalletManager(card!!)
|
||||
|
||||
Truth.assertThat(walletManager)
|
||||
.isInstanceOf(XrpWalletManager::class.java)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package com.tangem.blockchain.xrp
|
||||
|
||||
import com.google.common.truth.Truth
|
||||
import com.tangem.common.extensions.hexToBytes
|
||||
import org.junit.Test
|
||||
|
||||
internal class XrpAddressTest {
|
||||
@Test
|
||||
fun makeAddressFromCorrectSecpPublicKey() {
|
||||
val walletPublicKey = "04D2B9FB288540D54E5B32ECAF0381CD571F97F6F1ECD036B66BB11AA52FFE9981110D883080E2E255C6B1640586F7765E6FAA325D1340F49B56B83D9DE56BC7ED".hexToBytes()
|
||||
val expected = "rNxCXgKaCMAmowENKnYa5r8Ue78rjgrM6B"
|
||||
|
||||
Truth.assertThat(XrpAddressFactory.makeAddress(walletPublicKey))
|
||||
.isEqualTo(expected)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun makeAddressFromCorrectEdPublicKey() {
|
||||
val walletPublicKey = "12CC4DE73BACF875D7423D152E46C1A665F1718CBE7CA0FEB2BA28C149E11909".hexToBytes()
|
||||
val expected = "rwWMNBs2GtJwfX7YNVV1sUYaPy6DRmDHB4"
|
||||
|
||||
Truth.assertThat(XrpAddressFactory.makeAddress(walletPublicKey))
|
||||
.isEqualTo(expected)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun validateCorrectAddress() {
|
||||
val address = "rwWMNBs2GtJwfX7YNVV1sUYaPy6DRmDHB4"
|
||||
Truth.assertThat(XrpAddressValidator.validate(address))
|
||||
.isTrue()
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue