From 03ed4fbd9238181117f68792287fc2169018dff2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 7 Dec 2018 21:44:12 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/data/network/ElectrumRequest.java | 13 ++++++++++-- .../tangem/domain/wallet/btc/BtcEngine.java | 14 ++++++------- .../activity/SendTransactionActivity.kt | 20 +++++++++++++++---- .../activity/SignPaymentActivity.kt | 5 +++-- 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/tangem/data/network/ElectrumRequest.java b/app/src/main/java/com/tangem/data/network/ElectrumRequest.java index e61b18008f..4c3f05a3c2 100644 --- a/app/src/main/java/com/tangem/data/network/ElectrumRequest.java +++ b/app/src/main/java/com/tangem/data/network/ElectrumRequest.java @@ -156,11 +156,20 @@ public class ElectrumRequest { } public JSONObject getError() throws JSONException { - return getAnswer().getJSONObject("error"); + JSONObject answer = getAnswer(); + if (answer.has("error")) { + return getAnswer().getJSONObject("error"); + } else { + return null; + } } public String getResultString() throws JSONException { - return getAnswer().getString("result"); + if (getAnswer().has("result")) { + return getAnswer().getString("result"); + } else { + return null; + } } public JSONArray getResultArray() throws JSONException { diff --git a/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java b/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java index 8d3a950a1f..b5643b73ac 100644 --- a/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java @@ -440,14 +440,14 @@ public class BtcEngine extends CoinEngine { throw new CardProtocol.TangemException_WrongAmount(String.format("Balance (%d) < change (%d) + amount (%d)", fullAmount, change, amount)); } - byte[][] txForSign = new byte[unspentOutputs.size()][]; - byte[][] bodyDoubleHash = new byte[unspentOutputs.size()][]; - byte[][] bodyHash= new byte[unspentOutputs.size()][]; + final byte[][] txForSign = new byte[unspentOutputs.size()][]; + final byte[][] bodyDoubleHash = new byte[unspentOutputs.size()][]; + final byte[][] bodyHash= new byte[unspentOutputs.size()][]; for (int i = 0; i < unspentOutputs.size(); ++i) { txForSign[i] = BTCUtils.buildTXForSign(myAddress, targetAddress, myAddress, unspentOutputs, i, amount, change); bodyHash[i] = Util.calculateSHA256(txForSign[i]); - bodyDoubleHash [i] = Util.calculateSHA256(bodyHash[i]); + bodyDoubleHash[i] = Util.calculateSHA256(bodyHash[i]); } return new SignTask.PaymentToSign() { @@ -490,10 +490,10 @@ public class BtcEngine extends CoinEngine { } @Override - public void onSignCompleted(byte[] signature) throws Exception { + public void onSignCompleted(byte[] signFromCard) throws Exception { for (int i = 0; i < unspentOutputs.size(); ++i) { - BigInteger r = new BigInteger(1, Arrays.copyOfRange(signature, i * 64, 32 + i * 64)); - BigInteger s = new BigInteger(1, Arrays.copyOfRange(signature, 32 + i * 64, 64 + i * 64)); + BigInteger r = new BigInteger(1, Arrays.copyOfRange(signFromCard, i * 64, 32 + i * 64)); + BigInteger s = new BigInteger(1, Arrays.copyOfRange(signFromCard, 32 + i * 64, 64 + i * 64)); s = CryptoUtil.toCanonicalised(s); unspentOutputs.get(i).scriptForBuild = DerEncodingUtil.packSignDer(r, s, pbKey); diff --git a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt index 8576ff549b..4718859bae 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt @@ -19,6 +19,7 @@ import com.tangem.tangemcard.data.TangemCard import com.tangem.util.UtilHelper import com.tangem.wallet.R import java.io.IOException +import java.lang.Exception import java.math.BigInteger class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { @@ -58,10 +59,21 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { val electrumBodyListener: ServerApiElectrum.ElectrumRequestDataListener = object : ServerApiElectrum.ElectrumRequestDataListener { override fun onSuccess(electrumRequest: ElectrumRequest?) { if (electrumRequest!!.isMethod(ElectrumRequest.METHOD_SendTransaction)) { - if (electrumRequest.resultString.isEmpty()) - finishWithError("Rejected by node: " + electrumRequest.getError()) - else - finishWithSuccess() + try { + if (electrumRequest.resultString.isNullOrEmpty()) + finishWithError("Rejected by node: " + electrumRequest.getError()) + else + finishWithSuccess() + } + catch (e: Exception) + { + if( e.message!=null ) + { + finishWithError(e.message!!) + }else{ + finishWithError(e.javaClass.name) + } + } } } diff --git a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt index 4d778acd70..97df34baf8 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt @@ -137,7 +137,8 @@ class SignPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card } // signPaymentTask = SignPaymentTask(this, ctx, nfcManager, isoDep, this, amount, fee, isIncludeFee, outAddressStr) - val coinEngine= CoinEngineFactory.create(ctx) ?: throw CardProtocol.TangemException("Can't create CoinEngine!") - coinEngine.setOnNeedSendPayment { tx-> + val coinEngine = CoinEngineFactory.create(ctx) + ?: throw CardProtocol.TangemException("Can't create CoinEngine!") + coinEngine.setOnNeedSendPayment { tx -> if (tx != null) { // [REDACTED_TODO_COMMENT] \ No newline at end of file