Updated on 2026-08-14

This commit is contained in:
Tangem 2018-09-09 14:11:51 +03:00
parent 8780aca5e1
commit 39e8a00638
6 changed files with 80 additions and 31 deletions

View file

@ -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;

View file

@ -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;
}
}
}

View file

@ -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);
}
}

View file

@ -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()

View file

@ -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) {

View file

@ -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)