Updated on 2026-08-14

This commit is contained in:
Tangem 2018-08-17 23:47:12 +03:00
parent 8683cc5eab
commit 08f641216f
10 changed files with 92 additions and 130 deletions

View file

@ -20,8 +20,8 @@ public class ElectrumRequest {
public JSONObject jsRequestData;
public String answerData;
public String error;
public String WalletAddress;
public String TxHash;
public String walletAddress;
public String txHash;
public String TX;
public String Host;
public int Port;
@ -71,10 +71,10 @@ public class ElectrumRequest {
}
}
public static ElectrumRequest CheckBalance(String wallet) {
public static ElectrumRequest checkBalance(String wallet) {
ElectrumRequest request = new ElectrumRequest();
try {
request.WalletAddress=wallet;
request.walletAddress = wallet;
request.jsRequestData = new JSONObject("{ \"method\":\"" + METHOD_GetBalance + "\", \"params\":[\"" + wallet + "\"] }");
} catch (JSONException e) {
e.printStackTrace();
@ -84,24 +84,22 @@ public class ElectrumRequest {
}
public static ElectrumRequest GetFee(String wallet) {
public static ElectrumRequest getFee(String wallet) {
ElectrumRequest request = new ElectrumRequest();
try{
request.WalletAddress = wallet; //METHOD_GetFee
try {
request.walletAddress = wallet; //METHOD_GetFee
request.jsRequestData = new JSONObject("{ \"method\":\"" + METHOD_GetFee + "\", \"params\":[\"" + 6 + "\"] }");
}
catch(JSONException e)
{
} catch (JSONException e) {
e.printStackTrace();
request.error = e.toString();
}
return request;
}
public static ElectrumRequest GetHeader(String wallet, String height) {
public static ElectrumRequest getHeader(String wallet, String height) {
ElectrumRequest request = new ElectrumRequest();
try {
request.WalletAddress=wallet;
request.walletAddress = wallet;
request.jsRequestData = new JSONObject("{ \"method\":\"" + METHOD_GetHeader + "\", \"params\":[\"" + height + "\"] }");
} catch (JSONException e) {
e.printStackTrace();
@ -110,10 +108,10 @@ public class ElectrumRequest {
return request;
}
public static ElectrumRequest ListUnspent(String wallet) {
public static ElectrumRequest listUnspent(String wallet) {
ElectrumRequest request = new ElectrumRequest();
try {
request.WalletAddress=wallet;
request.walletAddress = wallet;
request.jsRequestData = new JSONObject("{ \"method\":\"" + METHOD_ListUnspent + "\", \"params\":[\"" + wallet + "\"] }");
} catch (JSONException e) {
e.printStackTrace();
@ -122,11 +120,11 @@ public class ElectrumRequest {
return request;
}
public static ElectrumRequest Broadcast(String wallet, String tx) {
public static ElectrumRequest broadcast(String wallet, String tx) {
ElectrumRequest request = new ElectrumRequest();
try {
request.WalletAddress=wallet;
request.TX=tx;
request.walletAddress = wallet;
request.TX = tx;
request.jsRequestData = new JSONObject("{ \"method\":\"" + METHOD_SendTransaction + "\", \"params\":[\"" + tx + "\"] }");
} catch (JSONException e) {
e.printStackTrace();
@ -135,10 +133,10 @@ public class ElectrumRequest {
return request;
}
public static ElectrumRequest ListHistory(String wallet) {
public static ElectrumRequest listHistory(String wallet) {
ElectrumRequest request = new ElectrumRequest();
try {
request.WalletAddress=wallet;
request.walletAddress = wallet;
request.jsRequestData = new JSONObject("{ \"method\":\"" + METHOD_GetHistory + "\", \"params\":[\"" + wallet + "\"] }");
} catch (JSONException e) {
e.printStackTrace();
@ -147,11 +145,11 @@ public class ElectrumRequest {
return request;
}
public static ElectrumRequest GetTransaction(String wallet, String tx_hash) {
public static ElectrumRequest getTransaction(String wallet, String tx_hash) {
ElectrumRequest request = new ElectrumRequest();
try {
request.WalletAddress=wallet;
request.TxHash = tx_hash;
request.walletAddress = wallet;
request.txHash = tx_hash;
request.jsRequestData = new JSONObject("{ \"method\":\"" + METHOD_GetTransaction + "\", \"params\":[\"" + tx_hash + "\"] }");
} catch (JSONException e) {
e.printStackTrace();
@ -180,5 +178,4 @@ public class ElectrumRequest {
return getAnswer().getJSONArray("result");
}
}
}

View file

@ -15,6 +15,7 @@ import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
@ -50,9 +51,10 @@ public class ElectrumTask extends AsyncTask<ElectrumRequest, Integer, List<Elect
@Override
protected List<ElectrumRequest> doInBackground(ElectrumRequest... requests) {
List<ElectrumRequest> result = new ArrayList<>();
for (int i = 0; i < requests.length; i++) {
result.add(requests[i]);
}
// for (int i = 0; i < requests.length; i++) {
// result.add(requests[i]);
// }
Collections.addAll(result, requests);
try {
InetAddress serverAddress = InetAddress.getByName(Host);
Log.v(logTag, "Connecting..." + Host);

View file

@ -63,13 +63,13 @@ public class UpdateWalletInfoTask extends ElectrumTask {
for (ElectrumRequest request : requests) {
try {
if (request.error == null) {
// get balance
if (request.isMethod(ElectrumRequest.METHOD_GetBalance)) {
try {
String mWalletAddress = request.getParams().getString(0);
String walletAddress = request.getParams().getString(0);
Long confBalance = request.getResult().getLong("confirmed");
Long unconf = request.getResult().getLong("unconfirmed");
Long unconfirmedBalance = request.getResult().getLong("unconfirmed");
loadedWallet.getCard().setBalanceReceived(true);
if (sharedCounter != null) {
boolean notEqualBalance = sharedCounter.updatePayload(new BigDecimal(String.valueOf(confBalance)));
if (notEqualBalance)
@ -79,11 +79,9 @@ public class UpdateWalletInfoTask extends ElectrumTask {
continue;
}
}
loadedWallet.getCard().setBalanceConfirmed(confBalance);
loadedWallet.getCard().setBalanceUnconfirmed(unconf);
loadedWallet.getCard().setBalanceUnconfirmed(unconfirmedBalance);
loadedWallet.getCard().setDecimalBalance(String.valueOf(confBalance));
loadedWallet.getCard().setValidationNodeDescription(getValidationNodeDescription());
} catch (JSONException e) {
if (sharedCounter != null) {
@ -98,32 +96,33 @@ public class UpdateWalletInfoTask extends ElectrumTask {
engine.switchNode(loadedWallet.getCard());
}
}
} else if (request.isMethod(ElectrumRequest.METHOD_SendTransaction)) {
}
// send transaction
else if (request.isMethod(ElectrumRequest.METHOD_SendTransaction)) {
try {
String hashTX = request.getResultString();
try {
LastSignStorage.setLastMessage(loadedWallet.getCard().getWallet(), hashTX);
if (hashTX.startsWith("0x") || hashTX.startsWith("0X")) {
if (hashTX.startsWith("0x") || hashTX.startsWith("0X"))
hashTX = hashTX.substring(2);
}
BigInteger bigInt = new BigInteger(hashTX, 16); //TODO: очень плохой способ
LastSignStorage.setTxWasSend(loadedWallet.getCard().getWallet());
LastSignStorage.setLastMessage(loadedWallet.getCard().getWallet(), "");
// Log.e("TX_RESULT", hashTX);
} catch (Exception e) {
engine.switchNode(loadedWallet.getCard());
}
} catch (JSONException e) {
e.printStackTrace();
engine.switchNode(loadedWallet.getCard());
}
} else if (request.isMethod(ElectrumRequest.METHOD_ListUnspent)) {
}
// list unspent
else if (request.isMethod(ElectrumRequest.METHOD_ListUnspent)) {
try {
String mWalletAddress = request.getParams().getString(0);
JSONArray jsUnspentArray = request.getResultArray();
try {
loadedWallet.getCard().getUnspentTransactions().clear();
@ -148,21 +147,20 @@ public class UpdateWalletInfoTask extends ElectrumTask {
String nodeAddress = engine.getNextNode(loadedWallet.getCard());
int nodePort = engine.getNextNodePort(loadedWallet.getCard());
UpdateWalletInfoTask updateWalletInfoTask = new UpdateWalletInfoTask(loadedWallet, nodeAddress, nodePort);
// loadedWallet.updateTasks.add(updateWalletInfoTask);
updateWalletInfoTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ElectrumRequest.GetHeader(mWalletAddress, String.valueOf(height)),
ElectrumRequest.GetTransaction(mWalletAddress, hash));
updateWalletInfoTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ElectrumRequest.getHeader(mWalletAddress, String.valueOf(height)), ElectrumRequest.getTransaction(mWalletAddress, hash));
}
}
} catch (JSONException e) {
e.printStackTrace();
engine.switchNode(loadedWallet.getCard());
}
} else if (request.isMethod(ElectrumRequest.METHOD_GetHistory)) {
}
// get history
else if (request.isMethod(ElectrumRequest.METHOD_GetHistory)) {
try {
String mWalletAddress = request.getParams().getString(0);
JSONArray jsHistoryArray = request.getResultArray();
try {
loadedWallet.getCard().getHistoryTransactions().clear();
@ -183,22 +181,21 @@ public class UpdateWalletInfoTask extends ElectrumTask {
Integer height = jsUnspent.getInt("height");
String hash = jsUnspent.getString("tx_hash");
if (height != -1) {
String nodeAddress = engine.getNode(loadedWallet.getCard());
int nodePort = engine.getNodePort(loadedWallet.getCard());
UpdateWalletInfoTask updateWalletInfoTask = new UpdateWalletInfoTask(loadedWallet, nodeAddress, nodePort);
// loadedWallet.updateTasks.add(updateWalletInfoTask);
updateWalletInfoTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ElectrumRequest.GetHeader(mWalletAddress, String.valueOf(height)),
ElectrumRequest.GetTransaction(mWalletAddress, hash));
updateWalletInfoTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, ElectrumRequest.getHeader(mWalletAddress, String.valueOf(height)), ElectrumRequest.getTransaction(mWalletAddress, hash));
}
}
} catch (JSONException e) {
e.printStackTrace();
engine.switchNode(loadedWallet.getCard());
}
} else if (request.isMethod(ElectrumRequest.METHOD_GetHeader)) {
}
// get header
else if (request.isMethod(ElectrumRequest.METHOD_GetHeader)) {
try {
JSONObject jsHeader = request.getResult();
try {
@ -208,24 +205,22 @@ public class UpdateWalletInfoTask extends ElectrumTask {
e.printStackTrace();
engine.switchNode(loadedWallet.getCard());
}
} catch (JSONException e) {
e.printStackTrace();
engine.switchNode(loadedWallet.getCard());
}
} else if (request.isMethod(ElectrumRequest.METHOD_GetTransaction)) {
}
// get transaction
else if (request.isMethod(ElectrumRequest.METHOD_GetTransaction)) {
try {
String txHash = request.TxHash;
String txHash = request.txHash;
String raw = request.getResultString();
List<TangemCard.UnspentTransaction> listTx = loadedWallet.getCard().getUnspentTransactions();
for (TangemCard.UnspentTransaction tx : listTx) {
if (tx.txID.equals(txHash))
tx.Raw = raw;
}
List<TangemCard.HistoryTransaction> listHTx = loadedWallet.getCard().getHistoryTransactions();
for (TangemCard.HistoryTransaction tx : listHTx) {
if (tx.txID.equals(txHash)) {
@ -240,7 +235,6 @@ public class UpdateWalletInfoTask extends ElectrumTask {
isOur = true;
}
}
tx.isInput = !isOur;
} catch (BitcoinException e) {
e.printStackTrace();
@ -248,32 +242,28 @@ public class UpdateWalletInfoTask extends ElectrumTask {
// Log.e("TX", raw);
}
}
} catch (JSONException e) {
e.printStackTrace();
engine.switchNode(loadedWallet.getCard());
}
}
loadedWallet.updateViews();
} else {
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
loadedWallet.getCard().incFailedBalanceRequestCounter();
if (errCounter >= sharedCounter.allRequest) {
if (errCounter >= sharedCounter.allRequest)
engine.switchNode(loadedWallet.getCard());
}
} else {
} else
engine.switchNode(loadedWallet.getCard());
}
}
} catch (JSONException e) {
if (sharedCounter != null) {
int errCounter = sharedCounter.errorRequest.incrementAndGet();
loadedWallet.getCard().incFailedBalanceRequestCounter();
if (errCounter >= sharedCounter.allRequest) {
if (errCounter >= sharedCounter.allRequest)
e.printStackTrace();
}
} else {
e.printStackTrace();
}
@ -284,10 +274,8 @@ public class UpdateWalletInfoTask extends ElectrumTask {
} catch (NullPointerException e) {
e.printStackTrace();
if (reference.get() != null) {
if (reference.get() != null)
reference.get().getSrlLoadedWallet().setRefreshing(false);
}
}
}

View file

@ -35,12 +35,12 @@ public class ConnectTask extends ElectrumTask {
String nodeAddress = engine.getNode(mCard);
int nodePort = engine.getNodePort(mCard);
ConnectTask connectTask = new ConnectTask(reference.get(), nodeAddress, nodePort, remaining_attempts);
connectTask.execute(ElectrumRequest.Broadcast(mCard.getWallet(), tx));
connectTask.execute(ElectrumRequest.broadcast(mCard.getWallet(), tx));
} else if (mCard.getBlockchain() == Blockchain.BitcoinCash || mCard.getBlockchain() == Blockchain.BitcoinCashTestNet) {
String nodeAddress = engine.getNode(mCard);
int nodePort = engine.getNodePort(mCard);
ConnectTask connectTask = new ConnectTask(reference.get(), nodeAddress, nodePort, remaining_attempts);
connectTask.execute(ElectrumRequest.Broadcast(mCard.getWallet(), tx));
connectTask.execute(ElectrumRequest.broadcast(mCard.getWallet(), tx));
}
} else {