Updated on 2026-08-14
This commit is contained in:
parent
6c8c365317
commit
922610a9ed
7 changed files with 50 additions and 163 deletions
|
|
@ -10,9 +10,9 @@ public class Server {
|
|||
public static final String URL_TANGEM = ServerURL.API_TANGEM;
|
||||
|
||||
public static class Method {
|
||||
public static final String VERIFY = URL_TANGEM + "verify";
|
||||
public static final String VERIFY_AND_GET_INFO = URL_TANGEM + "card/verify-and-get-info";
|
||||
public static final String ARTWORK = URL_TANGEM + "card/artwork";
|
||||
static final String VERIFY = URL_TANGEM + "verify";
|
||||
static final String VERIFY_AND_GET_INFO = URL_TANGEM + "card/verify-and-get-info";
|
||||
static final String ARTWORK = URL_TANGEM + "card/artwork";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ public class Server {
|
|||
public static final String URL_UPDATE_VERSION = ServerURL.API_UPDATE_VERSION;
|
||||
|
||||
public static class Method {
|
||||
public static final String LAST_VERSION = URL_UPDATE_VERSION +"TangemCash/tangem-binaries/master/apk-version.txt";
|
||||
static final String LAST_VERSION = URL_UPDATE_VERSION + "TangemCash/tangem-binaries/master/apk-version.txt";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -31,7 +31,7 @@ public class Server {
|
|||
public static final String URL_COINMARKET = ServerURL.API_COINMARKETCAP;
|
||||
|
||||
public static class Method {
|
||||
public static final String V1_TICKER_CONVERT = URL_COINMARKET + "v1/ticker/?convert=USD&lmit=10";
|
||||
static final String V1_TICKER_CONVERT = URL_COINMARKET + "v1/ticker/?convert=USD&lmit=10";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42,7 +42,7 @@ public class Server {
|
|||
public static final String URL_INFURA = ServerURL.API_INFURA;
|
||||
|
||||
public static class Method {
|
||||
public static final String MAIN = URL_INFURA + "AfWg0tmYEX5Kukn2UkKV";
|
||||
static final String MAIN = URL_INFURA + "AfWg0tmYEX5Kukn2UkKV";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -53,9 +53,9 @@ public class Server {
|
|||
public static final String URL_ESTIMATEFEE = ServerURL.API_ESTIMATEFEE;
|
||||
|
||||
public static class Method {
|
||||
public static final String N_2 = URL_ESTIMATEFEE + "n/2";
|
||||
public static final String N_3 = URL_ESTIMATEFEE + "n/3";
|
||||
public static final String N_6 = URL_ESTIMATEFEE + "n/6";
|
||||
static final String N_2 = URL_ESTIMATEFEE + "n/2";
|
||||
static final String N_3 = URL_ESTIMATEFEE + "n/3";
|
||||
static final String N_6 = URL_ESTIMATEFEE + "n/6";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -299,127 +299,6 @@ public class ServerApiHelper {
|
|||
Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
/**
|
||||
* TCP
|
||||
* Used in BTC
|
||||
*/
|
||||
private String host;
|
||||
private int port;
|
||||
private ElectrumRequestDataListener electrumRequestDataListener;
|
||||
|
||||
public interface ElectrumRequestDataListener {
|
||||
void onElectrumRequestData(ElectrumRequest electrumRequest);
|
||||
}
|
||||
|
||||
public void setElectrumRequestData(ElectrumRequestDataListener listener) {
|
||||
electrumRequestDataListener = listener;
|
||||
}
|
||||
|
||||
public void electrumRequestData(TangemCard card, ElectrumRequest electrumRequest) {
|
||||
Observable<ElectrumRequest> checkBalanceObserver = Observable.just(electrumRequest)
|
||||
.doOnNext(electrumRequest1 -> doElectrumRequest(card, electrumRequest))
|
||||
.flatMap(electrumRequest1 -> {
|
||||
if (electrumRequest1.answerData == null)
|
||||
return Observable.error(new NullPointerException());
|
||||
else
|
||||
return Observable.just(electrumRequest1);
|
||||
})
|
||||
.retryWhen(errors -> errors
|
||||
.filter(throwable -> throwable instanceof NullPointerException)
|
||||
.zipWith(Observable.range(1, 2), (n, i) -> i))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
checkBalanceObserver.subscribe(new DefaultObserver<ElectrumRequest>() {
|
||||
@Override
|
||||
public void onNext(ElectrumRequest v) {
|
||||
if (electrumRequest.answerData != null) {
|
||||
electrumRequestDataListener.onElectrumRequestData(electrumRequest);
|
||||
Log.i(TAG, "electrumRequestData " + electrumRequest.getMethod() + " onNext != null");
|
||||
} else {
|
||||
Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " onNext == null");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " onError " + e.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
Log.i(TAG, "electrumRequestData " + electrumRequest.getMethod() + " onComplete");
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private List<ElectrumRequest> doElectrumRequest(TangemCard card, ElectrumRequest electrumRequest) {
|
||||
|
||||
BitcoinNode bitcoinNode = BitcoinNode.values()[new Random().nextInt(BitcoinNode.values().length)];
|
||||
|
||||
if (card.getBlockchain() == Blockchain.BitcoinTestNet || card.getBlockchain() == Blockchain.BitcoinCashTestNet) {
|
||||
BitcoinNodeTestNet bitcoinNodeTestNet = BitcoinNodeTestNet.values()[new Random().nextInt(BitcoinNodeTestNet.values().length)];
|
||||
this.host = bitcoinNodeTestNet.getHost();
|
||||
this.port = bitcoinNodeTestNet.getPort();
|
||||
|
||||
} else {
|
||||
this.host = bitcoinNode.getHost();
|
||||
this.port = bitcoinNode.getPort();
|
||||
}
|
||||
|
||||
List<ElectrumRequest> result = new ArrayList<>();
|
||||
Collections.addAll(result, electrumRequest);
|
||||
|
||||
try {
|
||||
// Log.i(TAG, "host " + host + " !!!!!!!!!!!! " + "port " + String.valueOf(port));
|
||||
InetAddress serverAddress = InetAddress.getByName(host);
|
||||
Socket socket = new Socket();
|
||||
socket.setSoTimeout(5000);
|
||||
socket.bind(new InetSocketAddress(0));
|
||||
socket.connect(new InetSocketAddress(serverAddress, port));
|
||||
try {
|
||||
// Log.i(TAG, "<< ");
|
||||
OutputStream os = socket.getOutputStream();
|
||||
OutputStreamWriter out = new OutputStreamWriter(os, "UTF-8");
|
||||
InputStream is = socket.getInputStream();
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(is));
|
||||
electrumRequest.setID(1);
|
||||
|
||||
// do request
|
||||
try {
|
||||
out.write(electrumRequest.getAsString() + "\n");
|
||||
out.flush();
|
||||
|
||||
electrumRequest.answerData = in.readLine();
|
||||
electrumRequest.host = host;
|
||||
electrumRequest.port = port;
|
||||
if (electrumRequest.answerData != null) {
|
||||
// Log.i(TAG, ">> " + electrumRequest.answerData);
|
||||
} else {
|
||||
electrumRequest.error = "No answer from server";
|
||||
// Log.i(TAG, ">> <NULL>");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
electrumRequest.error = e.toString();
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
// Log.i(TAG, e.getMessage());
|
||||
} finally {
|
||||
// Log.i(TAG, "close");
|
||||
socket.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public String getValidationNodeDescription() {
|
||||
return "Electrum, " + host + ":" + String.valueOf(port);
|
||||
}
|
||||
|
||||
/**
|
||||
* HTTP
|
||||
* Last version request from GitHub
|
||||
|
|
@ -435,21 +314,7 @@ public class ServerApiHelper {
|
|||
}
|
||||
|
||||
public void requestLastVersion() {
|
||||
|
||||
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
|
||||
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
|
||||
|
||||
OkHttpClient httpClient = new OkHttpClient.Builder().
|
||||
addInterceptor(logging).
|
||||
// addInterceptor(new AuthorizationInterceptor()).
|
||||
build();
|
||||
Retrofit retrofit = new Retrofit.Builder()
|
||||
.baseUrl(Server.ApiUpdateVersion.URL_UPDATE_VERSION)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.client(httpClient)
|
||||
.build();
|
||||
|
||||
UpdateVersionApi updateVersionApi = retrofit.create(UpdateVersionApi.class);
|
||||
UpdateVersionApi updateVersionApi = App.getComponent().getRetrofitGithubusercontent().create(UpdateVersionApi.class);
|
||||
|
||||
Call<ResponseBody> call = updateVersionApi.getLastVersion();
|
||||
call.enqueue(new Callback<ResponseBody>() {
|
||||
|
|
@ -472,7 +337,6 @@ public class ServerApiHelper {
|
|||
Log.e(TAG, "lastVersion onFailure " + t.getMessage());
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -24,4 +24,7 @@ public interface AppComponent {
|
|||
@Named(Server.ApiCoinmarket.URL_COINMARKET)
|
||||
Retrofit getRetrofitCoinmarketcap();
|
||||
|
||||
@Named(Server.ApiUpdateVersion.URL_UPDATE_VERSION)
|
||||
Retrofit getRetrofitGithubusercontent();
|
||||
|
||||
}
|
||||
|
|
@ -47,16 +47,15 @@ class NetworkModule {
|
|||
.build();
|
||||
}
|
||||
|
||||
private OkHttpClient createHttpClient() {
|
||||
return new OkHttpClient.Builder().
|
||||
addInterceptor(createLogging()).
|
||||
build();
|
||||
}
|
||||
|
||||
private HttpLoggingInterceptor createLogging() {
|
||||
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
|
||||
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
|
||||
return logging;
|
||||
@Singleton
|
||||
@Provides
|
||||
@Named(Server.ApiUpdateVersion.URL_UPDATE_VERSION)
|
||||
Retrofit provideGithubusercontent() {
|
||||
return new Retrofit.Builder()
|
||||
.baseUrl(Server.ApiUpdateVersion.URL_UPDATE_VERSION)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.client(createHttpClient())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Singleton
|
||||
|
|
@ -70,4 +69,16 @@ class NetworkModule {
|
|||
.build();
|
||||
}
|
||||
|
||||
private OkHttpClient createHttpClient() {
|
||||
return new OkHttpClient.Builder().
|
||||
addInterceptor(createLogging()).
|
||||
build();
|
||||
}
|
||||
|
||||
private HttpLoggingInterceptor createLogging() {
|
||||
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
|
||||
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
|
||||
return logging;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -14,6 +14,7 @@ import android.view.KeyEvent
|
|||
import android.view.View
|
||||
import android.widget.*
|
||||
import com.tangem.data.network.ServerApiHelper
|
||||
import com.tangem.data.network.ServerApiHelperElectrum
|
||||
import com.tangem.data.network.model.InfuraResponse
|
||||
import com.tangem.data.network.request.ElectrumRequest
|
||||
import com.tangem.domain.cardReader.NfcManager
|
||||
|
|
@ -39,6 +40,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
|
|||
|
||||
private var nfcManager: NfcManager? = null
|
||||
private var serverApiHelper: ServerApiHelper? = null
|
||||
private var serverApiHelperElectrum: ServerApiHelperElectrum? = null
|
||||
var card: TangemCard? = null
|
||||
var feeRequestSuccess = false
|
||||
var balanceRequestSuccess = false
|
||||
|
|
@ -218,7 +220,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
|
|||
}
|
||||
|
||||
// request electrum listener
|
||||
serverApiHelper!!.setElectrumRequestData {
|
||||
serverApiHelperElectrum!!.setElectrumRequestData {
|
||||
if (it.isMethod(ElectrumRequest.METHOD_GetBalance)) {
|
||||
try {
|
||||
etFee!!.setText("--")
|
||||
|
|
@ -340,7 +342,7 @@ class ConfirmPaymentActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
|
|||
}
|
||||
|
||||
private fun requestElectrum(card: TangemCard, electrumRequest: ElectrumRequest) {
|
||||
serverApiHelper!!.electrumRequestData(card, electrumRequest)
|
||||
serverApiHelperElectrum!!.electrumRequestData(card, electrumRequest)
|
||||
}
|
||||
|
||||
private fun requestInfura(method: String) {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import android.util.Log
|
|||
import android.view.KeyEvent
|
||||
import android.widget.Toast
|
||||
import com.tangem.data.network.ServerApiHelper
|
||||
import com.tangem.data.network.ServerApiHelperElectrum
|
||||
import com.tangem.data.network.model.InfuraResponse
|
||||
import com.tangem.data.network.request.ElectrumRequest
|
||||
import com.tangem.domain.cardReader.NfcManager
|
||||
|
|
@ -29,6 +30,8 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback
|
|||
}
|
||||
|
||||
private var serverApiHelper: ServerApiHelper? = null
|
||||
private var serverApiHelperElectrum: ServerApiHelperElectrum? = null
|
||||
|
||||
var card: TangemCard? = null
|
||||
private var tx: String? = null
|
||||
private var nfcManager: NfcManager? = null
|
||||
|
|
@ -42,6 +45,7 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback
|
|||
nfcManager = NfcManager(this, this)
|
||||
|
||||
serverApiHelper = ServerApiHelper()
|
||||
serverApiHelperElectrum = ServerApiHelperElectrum()
|
||||
|
||||
val intent = intent
|
||||
card = TangemCard(getIntent().getStringExtra(EXTRA_UID))
|
||||
|
|
@ -63,7 +67,7 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback
|
|||
}
|
||||
|
||||
// request electrum listener
|
||||
serverApiHelper!!.setElectrumRequestData {
|
||||
serverApiHelperElectrum!!.setElectrumRequestData {
|
||||
if (it.isMethod(ElectrumRequest.METHOD_SendTransaction)) {
|
||||
try {
|
||||
var hashTX = it.resultString
|
||||
|
|
@ -156,7 +160,7 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback
|
|||
}
|
||||
|
||||
private fun requestElectrum(card: TangemCard, electrumRequest: ElectrumRequest) {
|
||||
serverApiHelper!!.electrumRequestData(card, electrumRequest)
|
||||
serverApiHelperElectrum!!.electrumRequestData(card, electrumRequest)
|
||||
}
|
||||
|
||||
fun finishWithError(message: String) {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import android.view.ViewGroup
|
|||
import android.widget.Toast
|
||||
import com.google.zxing.WriterException
|
||||
import com.tangem.data.network.ServerApiHelper
|
||||
import com.tangem.data.network.ServerApiHelperElectrum
|
||||
import com.tangem.data.network.model.InfuraResponse
|
||||
import com.tangem.data.network.request.ElectrumRequest
|
||||
import com.tangem.data.nfc.VerifyCardTask
|
||||
|
|
@ -59,6 +60,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
private var singleToast: Toast? = null
|
||||
private var nfcManager: NfcManager? = null
|
||||
private var serverApiHelper: ServerApiHelper? = null
|
||||
private var serverApiHelperElectrum: ServerApiHelperElectrum? = null
|
||||
var card: TangemCard? = null
|
||||
private var lastTag: Tag? = null
|
||||
var srlLoadedWallet: SwipeRefreshLayout? = null
|
||||
|
|
@ -84,6 +86,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
nfcManager = NfcManager(activity, this)
|
||||
|
||||
serverApiHelper = ServerApiHelper()
|
||||
serverApiHelperElectrum = ServerApiHelperElectrum()
|
||||
|
||||
sp = PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
|
||||
|
|
@ -219,7 +222,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
}
|
||||
|
||||
// request electrum listener
|
||||
serverApiHelper!!.setElectrumRequestData {
|
||||
serverApiHelperElectrum!!.setElectrumRequestData {
|
||||
|
||||
requestCounter--
|
||||
if (requestCounter == 0) srlLoadedWallet!!.isRefreshing = false
|
||||
|
|
@ -233,7 +236,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
card!!.setBalanceConfirmed(confBalance)
|
||||
card!!.balanceUnconfirmed = unconfirmedBalance
|
||||
card!!.decimalBalance = confBalance.toString()
|
||||
card!!.validationNodeDescription = serverApiHelper!!.validationNodeDescription
|
||||
card!!.validationNodeDescription = serverApiHelperElectrum!!.validationNodeDescription
|
||||
} catch (e: JSONException) {
|
||||
e.printStackTrace()
|
||||
engine.switchNode(card)
|
||||
|
|
@ -476,7 +479,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific
|
|||
|
||||
private fun requestElectrum(card: TangemCard, electrumRequest: ElectrumRequest) {
|
||||
requestCounter++
|
||||
serverApiHelper!!.electrumRequestData(card, electrumRequest)
|
||||
serverApiHelperElectrum!!.electrumRequestData(card, electrumRequest)
|
||||
}
|
||||
|
||||
private fun requestInfura(method: String, contract: String) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue