From d3f93a7dc8e05d1c2f3ea79fb888a2ccb88e2981 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 25 Mar 2019 18:28:59 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/domain/wallet/xrp/XrpData.java | 8 ++++++-- .../tangem/domain/wallet/xrp/XrpEngine.java | 19 ++++++++++++------- .../tangem/card_common/tasks/SignTask.java | 1 + 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/tangem/domain/wallet/xrp/XrpData.java b/app/src/main/java/com/tangem/domain/wallet/xrp/XrpData.java index e6f3be777f..3b46f27be9 100644 --- a/app/src/main/java/com/tangem/domain/wallet/xrp/XrpData.java +++ b/app/src/main/java/com/tangem/domain/wallet/xrp/XrpData.java @@ -21,7 +21,8 @@ public class XrpData extends CoinData { if (B.containsKey("BalanceConfirmed")) balanceConfirmed = B.getLong("BalanceConfirmed"); else balanceConfirmed = null; - if (B.containsKey("BalanceUnconfirmed")) balanceUnconfirmed = B.getLong("BalanceUnconfirmed"); + if (B.containsKey("BalanceUnconfirmed")) + balanceUnconfirmed = B.getLong("BalanceUnconfirmed"); else balanceUnconfirmed = null; if (B.containsKey("Sequence")) sequence = B.getLong("Sequence"); } @@ -48,7 +49,10 @@ public class XrpData extends CoinData { // balanceUnconfirmed is just the latest balance, it equals balanceConfirmed if no unconfirmed transaction present public CoinEngine.InternalAmount getBalanceInInternalUnits() { - return new CoinEngine.InternalAmount(BigDecimal.valueOf(balanceUnconfirmed), "Drops"); + if (balanceUnconfirmed != null) + return new CoinEngine.InternalAmount(BigDecimal.valueOf(balanceUnconfirmed), "Drops"); + else + return new CoinEngine.InternalAmount(BigDecimal.valueOf(balanceConfirmed), "Drops"); } // public Long getBalanceUnconfirmed() { diff --git a/app/src/main/java/com/tangem/domain/wallet/xrp/XrpEngine.java b/app/src/main/java/com/tangem/domain/wallet/xrp/XrpEngine.java index 870d6f4eee..3ff88f45dc 100644 --- a/app/src/main/java/com/tangem/domain/wallet/xrp/XrpEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/xrp/XrpEngine.java @@ -350,14 +350,17 @@ public class XrpEngine extends CoinEngine { public SignTask.TransactionToSign constructTransaction(Amount amountValue, Amount feeValue, boolean IncFee, String targetAddress) throws Exception { checkBlockchainDataExists(); + String amount = Long.toString(convertToInternalAmount(amountValue).longValueExact()); + String fee = Long.toString(convertToInternalAmount(feeValue).longValueExact()); + Payment payment = new Payment(); // Put `as` AccountID field Account, `Object` o payment.as(AccountID.Account, coinData.getWallet()); payment.as(AccountID.Destination, targetAddress); - payment.as(com.ripple.core.coretypes.Amount.Amount, amountValue); + payment.as(com.ripple.core.coretypes.Amount.Amount, amount); payment.as(UInt32.Sequence, coinData.getSequence()); - payment.as(com.ripple.core.coretypes.Amount.Fee, feeValue); + payment.as(com.ripple.core.coretypes.Amount.Fee, fee); SignedTransaction signedTx = payment.prepare(canonisePubKey(ctx.getCard().getWalletPublicKeyRar())); @@ -391,9 +394,11 @@ public class XrpEngine extends CoinEngine { } @Override - public byte[] onSignCompleted(byte[] signFromCard) { + public byte[] onSignCompleted(byte[] signFromCard) throws Exception { signedTx.addSign(signFromCard); - return BTCUtils.fromHex(signedTx.tx_blob); + byte[] txForSend = BTCUtils.fromHex(signedTx.tx_blob); + notifyOnNeedSendTransaction(txForSend); + return txForSend; } }; } @@ -486,9 +491,9 @@ public class XrpEngine extends CoinEngine { ServerApiRipple.ResponseListener rippleListener = new ServerApiRipple.ResponseListener() { @Override public void onSuccess(String method, RippleResponse rippleResponse) { - BigDecimal minFee = new BigDecimal(rippleResponse.getResult().getDrops().getMinimum_fee()).divide(new BigDecimal(getDecimals())); - BigDecimal normalFee = new BigDecimal(rippleResponse.getResult().getDrops().getOpen_ledger_fee()).divide(new BigDecimal(getDecimals())); - BigDecimal maxFee = new BigDecimal(rippleResponse.getResult().getDrops().getMedian_fee()).divide(new BigDecimal(getDecimals())); + BigDecimal minFee = new BigDecimal(Long.valueOf(rippleResponse.getResult().getDrops().getMinimum_fee())).divide(new BigDecimal(1000000)); + BigDecimal normalFee = new BigDecimal(Long.valueOf(rippleResponse.getResult().getDrops().getOpen_ledger_fee())).divide(new BigDecimal(1000000)); + BigDecimal maxFee = new BigDecimal(Long.valueOf(rippleResponse.getResult().getDrops().getMedian_fee())).divide(new BigDecimal(1000000)); coinData.minFee = new Amount(minFee.setScale(getDecimals(), RoundingMode.UP), getFeeCurrency()); coinData.normalFee = new Amount(normalFee.setScale(getDecimals(), RoundingMode.UP), getFeeCurrency()); diff --git a/card-common/src/main/java/com/tangem/card_common/tasks/SignTask.java b/card-common/src/main/java/com/tangem/card_common/tasks/SignTask.java index 7d4a0d5d8e..d3eebd6bda 100644 --- a/card-common/src/main/java/com/tangem/card_common/tasks/SignTask.java +++ b/card-common/src/main/java/com/tangem/card_common/tasks/SignTask.java @@ -85,6 +85,7 @@ public class SignTask extends CustomReadCardTask { } transactionToSign.onSignCompleted(signResult.getTLV(TLV.Tag.TAG_Signature).Value); + //TODO: maybe we should move notifyOnNeedSendTransaction(txForSend) here? mNotifications.onReadProgress(protocol, 100); }