Updated on 2026-08-14

This commit is contained in:
Tangem 2020-07-28 15:27:14 +03:00
parent 6612030583
commit 2e02999c80
8 changed files with 84 additions and 8 deletions

View file

@ -679,7 +679,7 @@ public class BtcCashEngine extends CoinEngine {
}
}
if (validateAddress(resolvedAddress)) {
if (resolvedAddress.equals(coinData.getWallet())) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {

View file

@ -11,7 +11,10 @@ import com.tangem.data.Blockchain;
import com.tangem.data.network.BinanceApi;
import com.tangem.data.network.Server;
import com.tangem.data.network.ServerApiBinance;
import com.tangem.data.network.ServerApiPayId;
import com.tangem.data.network.model.BinanceFees;
import com.tangem.data.network.model.PayIdAddress;
import com.tangem.data.network.model.PayIdResponse;
import com.tangem.tangem_card.data.TangemCard;
import com.tangem.tangem_card.reader.CardProtocol;
import com.tangem.tangem_card.tasks.SignTask;
@ -44,6 +47,10 @@ import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.List;
import io.reactivex.CompletableObserver;
import io.reactivex.SingleObserver;
import io.reactivex.observers.DisposableCompletableObserver;
import io.reactivex.observers.DisposableSingleObserver;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@ -490,8 +497,37 @@ public class BinanceAssetEngine extends CoinEngine {
}
public void requestFee(BlockchainRequestsCallbacks blockchainRequestsCallbacks, String targetAddress, Amount amount) {
CompletableObserver payIdObserver = new DisposableCompletableObserver() {
@Override
public void onComplete() {
checkFee(blockchainRequestsCallbacks);
}
@Override
public void onError(Throwable e) {
ctx.setError(e.getMessage());
blockchainRequestsCallbacks.onComplete(false);
}
};
if (targetAddress.contains("$")) { // PayID
resolvePayID(targetAddress, payIdObserver);
} else {
checkFee(blockchainRequestsCallbacks);
}
}
private void checkFee(BlockchainRequestsCallbacks blockchainRequestsCallbacks) {
try {
String baseUrl = Server.ApiBinance.Method.API_V1;
String baseUrl;
if (ctx.getBlockchain() == Blockchain.Binance) {
baseUrl = Server.ApiBinance.Method.API_V1;
} else if (ctx.getBlockchain() == Blockchain.BinanceTestNet) {
baseUrl = Server.ApiBinanceTestnet.Method.API_V1;
} else {
throw new Exception("Invalid blockchain for BinanceEngine");
}
Retrofit retrofitBinance = new Retrofit.Builder()
.baseUrl(baseUrl)
@ -535,6 +571,46 @@ public class BinanceAssetEngine extends CoinEngine {
}
}
private void resolvePayID(String targetAddress, CompletableObserver observer) {
final ServerApiPayId serverApiPayId = new ServerApiPayId();
SingleObserver<PayIdResponse> payIdObserver = new DisposableSingleObserver<PayIdResponse>() {
@Override
public void onSuccess(PayIdResponse payIdResponse) {
try {
String resolvedAddress = null;
for (PayIdAddress address : payIdResponse.getAddresses()) {
if (address.getPaymentNetwork().equals(ctx.getBlockchain().getCurrency()) &&
address.getEnvironment().equals("MAINNET")) {
resolvedAddress = address.getAddressDetails().getAddress();
break;
}
}
if (validateAddress(resolvedAddress)) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {
observer.onError(new Exception("Resolved PayID address equals source address"));
}
} else {
observer.onError(new Exception("Unknown address format in PayID response"));
}
} catch (Exception e) {
observer.onError(new Exception("Unknown response format on PayID request"));
}
}
@Override
public void onError(Throwable e) {
Log.i(TAG, "onFail: " + "payID" + " " + e.getMessage());
observer.onError(new Exception("PayID error:" + e.getMessage()));
}
};
serverApiPayId.getAddress(targetAddress, ctx.getBlockchain(), payIdObserver);
}
public void requestSendTransaction(BlockchainRequestsCallbacks blockchainRequestsCallbacks, byte[] txForSend) {
// RequestBody requestBody = TransactionRequestAssemblerExtSign.createRequestBody(txForSend);
try {

View file

@ -575,7 +575,7 @@ public class BinanceEngine extends CoinEngine {
}
}
if (validateAddress(resolvedAddress)) {
if (resolvedAddress.equals(coinData.getWallet())) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {

View file

@ -1087,7 +1087,7 @@ public class BtcEngine extends CoinEngine {
}
}
if (validateAddress(resolvedAddress)) {
if (resolvedAddress.equals(coinData.getWallet())) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {

View file

@ -775,7 +775,7 @@ public class CardanoEngine extends CoinEngine {
}
}
if (validateAddress(resolvedAddress)) {
if (resolvedAddress.equals(coinData.getWallet())) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {

View file

@ -604,7 +604,7 @@ public class DucatusEngine extends BtcEngine {
}
}
if (validateAddress(resolvedAddress)) {
if (resolvedAddress.equals(coinData.getWallet())) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {

View file

@ -758,7 +758,7 @@ public class LtcEngine extends BtcEngine {
}
}
if (validateAddress(resolvedAddress)) {
if (resolvedAddress.equals(coinData.getWallet())) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {

View file

@ -598,7 +598,7 @@ public class XlmEngine extends CoinEngine {
}
}
if (validateAddress(resolvedAddress)) {
if (resolvedAddress.equals(coinData.getWallet())) {
if (!resolvedAddress.equals(coinData.getWallet())) {
coinData.setResolvedPayIdAddress(resolvedAddress);
observer.onComplete();
} else {