diff --git a/app/src/main/java/com/tangem/data/network/ServerApiHelper.java b/app/src/main/java/com/tangem/data/network/ServerApiHelper.java index 1a5f1e3f6c..3b4fede76d 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiHelper.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiHelper.java @@ -115,11 +115,13 @@ public class ServerApiHelper { * eth_getBalance * eth_getTransactionCount * eth_call + * eth_sendRawTransaction * eth_gasPrice */ public static final String INFURA_ETH_GET_BALANCE = "eth_getBalance"; public static final String INFURA_ETH_GET_TRANSACTION_COUNT = "eth_getTransactionCount"; public static final String INFURA_ETH_CALL = "eth_call"; + public static final String INFURA_ETH_SEND_RAW_TRANSACTION = "eth_sendRawTransaction"; public static final String INFURA_ETH_GAS_PRICE = "eth_gasPrice"; private InfuraBodyListener infuraBodyListener; @@ -131,7 +133,7 @@ public class ServerApiHelper { infuraBodyListener = listener; } - public void infura(String method, int id, String wallet, String contract) { + public void infura(String method, int id, String wallet, String contract, String tx) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(Server.ApiInfura.URL_INFURA) .addConverterFactory(GsonConverterFactory.create()) @@ -151,6 +153,10 @@ public class ServerApiHelper { infuraBody = new InfuraBody(method, new Object[]{new InfuraBody.EthCallParams("0x70a08231000000000000000000000000" + address, contract), "latest"}, id); break; + case INFURA_ETH_SEND_RAW_TRANSACTION: + infuraBody = new InfuraBody(method, new String[]{tx}, id); + break; + case INFURA_ETH_GAS_PRICE: infuraBody = new InfuraBody(method, id); break; diff --git a/app/src/main/java/com/tangem/data/network/model/InfuraBody.java b/app/src/main/java/com/tangem/data/network/model/InfuraBody.java index 14acdad1cb..bf3aa67f29 100644 --- a/app/src/main/java/com/tangem/data/network/model/InfuraBody.java +++ b/app/src/main/java/com/tangem/data/network/model/InfuraBody.java @@ -14,6 +14,7 @@ public class InfuraBody { this.id = id; } + // body for eth getBalance, eth getTransactionCount, eth sendRawTransaction public InfuraBody(String method, String[] params, int id) { this.method = method; this.params = params; @@ -36,4 +37,5 @@ public class InfuraBody { this.to = to; } } + } \ No newline at end of file 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 a2ce9efaa0..40cf58ea72 100644 --- a/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java +++ b/app/src/main/java/com/tangem/data/nfc/SignPaymentTask.java @@ -107,9 +107,9 @@ public class SignPaymentTask extends Thread { //LastSignStorage.setLastTX(mCard.getWallet(), txStr); Intent intent = new Intent(mContext, SendTransactionActivity.class); - intent.putExtra("UID", mCard.getUID()); - intent.putExtra("Card", mCard.getAsBundle()); - intent.putExtra("TX", txStr); + intent.putExtra(SendTransactionActivity.EXTRA_UID, mCard.getUID()); + intent.putExtra(SendTransactionActivity.EXTRA_CARD, mCard.getAsBundle()); + intent.putExtra(SendTransactionActivity.EXTRA_TX, txStr); mContext.startActivityForResult(intent, SignPaymentActivity.REQUEST_CODE_SEND_PAYMENT); } } 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 d0be7b6489..65e86b1d9d 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmPaymentActivity.kt @@ -105,7 +105,8 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { if (card!!.blockchain == Blockchain.Ethereum || card!!.blockchain == Blockchain.EthereumTestNet || card!!.blockchain == Blockchain.Token) { rgFee!!.isEnabled = false - serverApiHelper!!.infura(ServerApiHelper.INFURA_ETH_GAS_PRICE, 67, card!!.wallet, "") + + requestInfura(ServerApiHelper.INFURA_ETH_GAS_PRICE) } else { rgFee!!.isEnabled = true @@ -268,6 +269,10 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { } } + private fun requestInfura(method: String) { + serverApiHelper!!.infura(method, 67, card!!.wallet, "", "") + } + public override fun onResume() { super.onResume() nfcManager!!.onResume() 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 435f83ea71..00d5c54613 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt @@ -14,10 +14,17 @@ import com.tangem.data.network.task.send_transaction.ETHRequestTask import com.tangem.domain.wallet.Blockchain import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemCard +import com.tangem.presentation.fragment.LoadedWallet import com.tangem.wallet.R class SendTransactionActivity : AppCompatActivity() { + companion object { + const val EXTRA_UID: String = "UID" + const val EXTRA_CARD: String = "Card" + const val EXTRA_TX: String = "TX" + } + var card: TangemCard? = null private var tx: String? = null private var progressBar: ProgressBar? = null @@ -31,9 +38,9 @@ class SendTransactionActivity : AppCompatActivity() { progressBar = findViewById(R.id.progressBar) val intent = intent - card = TangemCard(getIntent().getStringExtra("UID")) - card!!.loadFromBundle(intent.extras!!.getBundle("Card")) - tx = intent.getStringExtra("TX") + card = TangemCard(getIntent().getStringExtra(EXTRA_UID)) + card!!.loadFromBundle(intent.extras!!.getBundle(EXTRA_CARD)) + tx = intent.getStringExtra(EXTRA_TX) val engine = CoinEngineFactory.create(card!!.blockchain) if (card!!.blockchain == Blockchain.Ethereum || card!!.blockchain == Blockchain.EthereumTestNet || card!!.blockchain == Blockchain.Token) { diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index 7fad3b2229..0dee0bbd92 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -40,6 +40,7 @@ import com.tangem.util.UtilHelper import com.tangem.wallet.BuildConfig import com.tangem.wallet.R import kotlinx.android.synthetic.main.fr_loaded_wallet.* +import org.json.JSONException import java.math.BigInteger import java.util.* import kotlin.concurrent.fixedRateTimer @@ -272,7 +273,6 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific balanceCap = balanceCap.substring(2) val l = BigInteger(balanceCap, 16) val balance = l.toLong() - if (l.compareTo(BigInteger.ZERO) == 0) { card!!.blockchainID = Blockchain.Ethereum.id card!!.addTokenToBlockchainName() @@ -280,13 +280,43 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific // refresh() return@setInfura } - card!!.setBalanceConfirmed(balance) card!!.balanceUnconfirmed = 0L card!!.decimalBalance = l.toString(10) // Log.i("eth_call", balanceCap) + } + if (method == ServerApiHelper.INFURA_ETH_SEND_RAW_TRANSACTION) { +// try { +// var hashTX: String +// try { +// val tmp = request.getResultString() +// hashTX = tmp +// } catch (e: JSONException) { +// val msg = request.getAnswer() +// val err = msg!!.getJSONObject("error") +// hashTX = err.getString("message") +// LastSignStorage.setLastMessage(card!!.wallet, hashTX) +// return@setInfura +// } +// +// if (hashTX.startsWith("0x") || hashTX.startsWith("0X")) { +// hashTX = hashTX.substring(2) +// } +// LastSignStorage.setTxWasSend(card!!.wallet) +// LastSignStorage.setLastMessage(card!!.wallet, "") +// Log.e("TX_RESULT", hashTX) +// +// +// val nonce = card!!.GetConfirmTXCount() +// nonce.add(BigInteger.valueOf(1)) +// card!!.setConfirmTXCount(nonce) +// Log.e("TX_RESULT", hashTX) +// +// } catch (e: Exception) { +// e.printStackTrace() +// } } updateViews() @@ -294,7 +324,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific } private fun requestInfura(method: String, contract: String) { - serverApiHelper!!.infura(method, 67, card!!.wallet, contract) + serverApiHelper!!.infura(method, 67, card!!.wallet, contract, LastSignStorage.getTxForSend(card!!.wallet)) } private fun requestCardVerify() { @@ -704,22 +734,20 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific // Ethereum else if (card!!.blockchain == Blockchain.Ethereum || card!!.blockchain == Blockchain.EthereumTestNet) { - - requestInfura(ServerApiHelper.INFURA_ETH_GET_BALANCE, "") - requestInfura(ServerApiHelper.INFURA_ETH_GET_TRANSACTION_COUNT, "") - // val updateETH = ETHRequestTask(this@LoadedWallet, card!!.blockchain) - +// // val reqETH = InfuraRequest.GetBalance(card!!.wallet) // reqETH.id = 67 // reqETH.setBlockchain(card!!.blockchain) - +// // val reqNonce = InfuraRequest.GetOutTransactionCount(card!!.wallet) // reqNonce.id = 67 // reqNonce.setBlockchain(card!!.blockchain) - +// // updateETH.execute(reqETH, reqNonce) -// updateETH.execute(reqNonce) + + requestInfura(ServerApiHelper.INFURA_ETH_GET_BALANCE, "") + requestInfura(ServerApiHelper.INFURA_ETH_GET_TRANSACTION_COUNT, "") requestRateInfo("ethereum") } @@ -732,29 +760,27 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific // val reqETH = InfuraRequest.GetTokenBalance(card!!.wallet, engine!!.getContractAddress(card), engine.getTokenDecimals(card)) // reqETH.id = 67 // reqETH.setBlockchain(card!!.blockchain) +// +// val reqBalance = InfuraRequest.GetBalance(card!!.wallet) +// reqBalance.id = 67 +// reqBalance.setBlockchain(card!!.blockchain) +// +// val reqNonce = InfuraRequest.GetOutTransactionCount(card!!.wallet) +// reqNonce.id = 67 +// reqNonce.setBlockchain(card!!.blockchain) +// +// updateETH.execute(reqETH, reqNonce, reqBalance) requestInfura(ServerApiHelper.INFURA_ETH_GET_BALANCE, "") requestInfura(ServerApiHelper.INFURA_ETH_GET_TRANSACTION_COUNT, "") requestInfura(ServerApiHelper.INFURA_ETH_CALL, engine.getContractAddress(card)) -// val reqBalance = InfuraRequest.GetBalance(card!!.wallet) -// reqBalance.id = 67 -// reqBalance.setBlockchain(card!!.blockchain) - -// val reqNonce = InfuraRequest.GetOutTransactionCount(card!!.wallet) -// reqNonce.id = 67 -// reqNonce.setBlockchain(card!!.blockchain) - -// updateETH.execute(reqETH, reqNonce, reqBalance) -// updateETH.execute(reqETH) - requestRateInfo("ethereum") } if (needResendTX) sendTransaction(LastSignStorage.getTxForSend(card!!.wallet)) - } fun prepareResultIntent(): Intent { @@ -840,6 +866,9 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific req.id = 67 req.setBlockchain(card!!.blockchain) task.execute(req) + +// requestInfura(ServerApiHelper.INFURA_ETH_SEND_RAW_TRANSACTION, "") + } else if (card!!.blockchain == Blockchain.Bitcoin || card!!.blockchain == Blockchain.BitcoinTestNet) { val nodeAddress = engine!!.getNode(card) val nodePort = engine.getNodePort(card)