diff --git a/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java b/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java index d49e3fabb2..cfdcce382c 100644 --- a/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java +++ b/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java @@ -10,7 +10,6 @@ import com.tangem.domain.cardReader.NfcManager; import com.tangem.domain.wallet.Blockchain; import com.tangem.domain.wallet.CoinEngine; import com.tangem.domain.wallet.CoinEngineFactory; -import com.tangem.domain.wallet.TangemCard; import com.tangem.domain.wallet.TangemContext; import com.tangem.presentation.activity.SendTransactionActivity; import com.tangem.presentation.activity.SignPaymentActivity; diff --git a/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java b/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java index 814691584a..ca73c4da41 100644 --- a/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/TokenEngine.java @@ -424,7 +424,6 @@ public class TokenEngine extends CoinEngine { } public byte[] signETH(Amount feeValue, Amount amountValue, boolean IncFee, String targetAddress, CardProtocol protocol) throws Exception { - BigInteger nonceValue = coinData.getConfirmedTXCount(); byte[] pbKey = ctx.getCard().getWalletPublicKey(); boolean flag = (ctx.getCard().getSigningMethod() == TangemCard.SigningMethod.Sign_Hash_Validated_By_Issuer); @@ -443,7 +442,9 @@ public class TokenEngine extends CoinEngine { BigInteger nonce = nonceValue; BigInteger gasPrice = weiFee.divide(gigaK).divide(BigInteger.valueOf(21000)).multiply(gigaK); BigInteger gasLimit = BigInteger.valueOf(21000); - Integer chainId = ctx.getBlockchain() == Blockchain.Ethereum ? EthTransaction.ChainEnum.Mainnet.getValue() : EthTransaction.ChainEnum.Rinkeby.getValue(); + +// Integer chainId = ctx.getBlockchain() == Blockchain.Ethereum ? EthTransaction.ChainEnum.Mainnet.getValue() : EthTransaction.ChainEnum.Rinkeby.getValue(); + Integer chainId = EthTransaction.ChainEnum.Mainnet.getValue(); // Token support on main net only!!! String to = targetAddress; diff --git a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt index 12ce8acfc8..d4a8508f0c 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt @@ -12,11 +12,11 @@ import android.text.TextWatcher import android.util.Log import android.view.KeyEvent import android.view.View -import android.widget.* +import android.widget.Toast +import com.tangem.data.network.ElectrumRequest import com.tangem.data.network.ServerApiHelper import com.tangem.data.network.ServerApiHelperElectrum import com.tangem.data.network.model.InfuraResponse -import com.tangem.data.network.ElectrumRequest import com.tangem.domain.cardReader.NfcManager import com.tangem.domain.wallet.* import com.tangem.util.* @@ -27,7 +27,6 @@ import java.io.IOException import java.math.BigDecimal import java.math.BigInteger import java.math.RoundingMode -import java.text.DecimalFormat import java.util.* class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { @@ -42,6 +41,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { private var serverApiHelperElectrum: ServerApiHelperElectrum = ServerApiHelperElectrum() private lateinit var ctx: TangemContext + private lateinit var amount: CoinEngine.Amount private var feeRequestSuccess = false private var balanceRequestSuccess = false @@ -75,12 +75,14 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { tvIncFee.setText(R.string.including_fee) else tvIncFee.setText(R.string.not_including_fee) - if (ctx.blockchain == Blockchain.Token) + + amount = CoinEngine.Amount(intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT), intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT_CURRENCY)) + + if (ctx.blockchain == Blockchain.Token && amount.currency!="ETH") tvIncFee.visibility = View.INVISIBLE else tvIncFee.visibility = View.VISIBLE - val amount = CoinEngine.Amount(intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT), intent.getStringExtra(SignPaymentActivity.EXTRA_AMOUNT_CURRENCY)) etAmount.setText(amount.toValueString()) tvCurrency.text = engine.balanceCurrency tvCurrency2.text = engine.feeCurrency @@ -173,7 +175,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { finishWithError(Activity.RESULT_CANCELED, getString(R.string.the_wallet_is_empty)) return@setOnClickListener - } else if (!engineCoin.isExtractPossible()) { + } else if (!engineCoin.isExtractPossible) { finishWithError(Activity.RESULT_CANCELED, getString(R.string.please_wait_for_confirmation_of_incoming_transaction)) return@setOnClickListener } @@ -196,7 +198,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { override fun onSuccess(electrumRequest: ElectrumRequest?) { if (electrumRequest!!.isMethod(ElectrumRequest.METHOD_GetBalance)) { try { - if( etFee.text.toString().isEmpty() ) etFee.setText(getString(R.string.empty)) + if (etFee.text.toString().isEmpty()) etFee.setText(getString(R.string.empty)) val engine = CoinEngineFactory.create(ctx) val balance = engine.convertToAmount(CoinEngine.InternalAmount(electrumRequest.result.getLong("confirmed") + electrumRequest.result.getLong("unconfirmed"), "Satoshi")) val amount = CoinEngine.Amount(etAmount.text.toString(), ctx.blockchain.currency) @@ -236,7 +238,8 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { // rounding gas price to integer gwei val l = BigInteger(gasPrice, 16).divide(BigInteger.valueOf(1000000000L)).multiply(BigInteger.valueOf(1000000000L)) - val m = if (ctx.blockchain == Blockchain.Token) BigInteger.valueOf(60000) else BigInteger.valueOf(21000) + //val m = if (ctx.blockchain==Blockchain.Token) BigInteger.valueOf(60000) else BigInteger.valueOf(21000) + val m = if (amount.currency != "ETH") BigInteger.valueOf(60000) else BigInteger.valueOf(21000) val weiMinFee = CoinEngine.InternalAmount(l.multiply(m), "wei") val weiNormalFee = CoinEngine.InternalAmount(weiMinFee.multiply(BigDecimal.valueOf(12)).divide(BigDecimal.valueOf(10)), "wei") val weiMaxFee = CoinEngine.InternalAmount(weiMinFee.multiply(BigDecimal.valueOf(15)).divide(BigDecimal.valueOf(10)), "wei") @@ -475,7 +478,6 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { } private fun doSetFee(checkedRadioButtonId: Int) { - Log.e("DEBUG", "doSetFee") var txtFee = "" when (checkedRadioButtonId) { R.id.rbMinimalFee -> diff --git a/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt index 81489774a0..97a4927210 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PreparePaymentActivity.kt @@ -50,7 +50,7 @@ class PreparePaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { tvBalance.text = html //TODO - to engine - if (ctx.card!!.blockchain == Blockchain.Token) { + if (ctx.card!!.blockchain == Blockchain.Token && engine.balance.currency!="ETH") { rgIncFee!!.visibility = View.INVISIBLE } else { rgIncFee!!.visibility = View.VISIBLE 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 31b69d5cfc..c59e741ca7 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt @@ -58,6 +58,7 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { override fun onSuccess(electrumRequest: ElectrumRequest?) { if (electrumRequest!!.isMethod(ElectrumRequest.METHOD_SendTransaction)) { try { + //TODO error processing var hashTX = electrumRequest.resultString try { if (hashTX.startsWith("0x") || hashTX.startsWith("0X")) { @@ -85,17 +86,10 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { when (method) { ServerApiHelper.INFURA_ETH_SEND_RAW_TRANSACTION -> { try { - var hashTX: String - try { - val tmp = infuraResponse.result - hashTX = tmp - } catch (e: JSONException) { - e.printStackTrace() - return - } - - if (hashTX.startsWith("0x") || hashTX.startsWith("0X")) { - hashTX = hashTX.substring(2) + //infuraResponse.result - it's HashTX + if( infuraResponse.result.isEmpty() ) + { + finishWithError("rejected by server") } val nonce = (ctx.coinData!! as EthData).confirmedTXCount 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 da36825bdc..21193573e4 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SignPaymentActivity.kt @@ -17,15 +17,12 @@ import com.tangem.data.nfc.SignPaymentTask import com.tangem.domain.cardReader.CardProtocol import com.tangem.domain.cardReader.NfcManager import com.tangem.domain.wallet.CoinEngine -import com.tangem.domain.wallet.TangemCard import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog import com.tangem.util.Util import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_sign_payment.* -import kotlinx.android.synthetic.main.notification_template_lines_media.* -import java.io.IOException class SignPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications {