diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt index 187a068cee..90d8b57cf9 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManagerFactory.kt @@ -55,7 +55,7 @@ object WalletManagerFactory { walletConfig = WalletConfig(false, true) ) } - blockchainName.contains("xrp") -> { + blockchainName == Blockchain.XRP.id -> { return XrpWalletManager( cardId = card.cardId, walletPublicKey = walletPublicKey, diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt b/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt index fcb5b6fe14..8a9f4445e1 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Amount.kt @@ -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() } \ No newline at end of file diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt b/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt index 2ef51aa2e5..a91258d524 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpTransactionBuilder.kt @@ -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) diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java b/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java index a48e47e808..3ab3f6f16a 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java +++ b/blockchain/src/main/java/com/tangem/blockchain/xrp/override/XrpBase58.java @@ -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(); diff --git a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt index bf5109f133..a476130557 100644 --- a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt +++ b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt @@ -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) + } } \ No newline at end of file diff --git a/blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt b/blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt new file mode 100644 index 0000000000..1f82c1f777 --- /dev/null +++ b/blockchain/src/test/java/com/tangem/blockchain/xrp/XrpAddressTest.kt @@ -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() + } +} \ No newline at end of file