restore swaps xyz tx registration (#3205)

This commit is contained in:
Serhii
2026-05-08 20:30:34 +02:00
committed by GitHub
parent 2645ae05ed
commit 758cb8d8e5
4 changed files with 59 additions and 53 deletions
@@ -382,7 +382,8 @@ class SwapsXyzExchangeProvider extends ExchangeProvider {
final reqAmountRaw = reqAmountStr.replaceAll('n', '');
final needToRegisterInSwapXyz =
vmId == 'alt-vm' || bridgeIds.contains('alt-vm');
vmId == 'alt-vm' || bridgeIds.contains('alt-vm')
|| chainId == 'solana' || bridgeIds.contains('solana');
final trade = Trade(
id: txId,
@@ -417,7 +418,7 @@ class SwapsXyzExchangeProvider extends ExchangeProvider {
}
/// Register a broadcasted tx with Swaps.xyz (required for alt-vm).
Future<bool> registerAltVmTx({
static Future<bool> registerAltVmTx({
required String txId,
required String txHash,
required int chainId,
@@ -340,7 +340,6 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
if (bottomSheetContext.mounted && Navigator.canPop(bottomSheetContext)) Navigator.of(bottomSheetContext).pop(true);
sendVM.commitTransaction(context);
widget.exchangeTradeViewModel.registerSwapsXyzTransaction();
},
amountParsingProxy: sendVM.amountParsingProxy,
);
@@ -406,56 +406,6 @@ abstract class ExchangeTradeViewModelBase with Store {
return true;
}
Future<void> registerSwapsXyzTransaction() async {
try {
if (!(_provider is SwapsXyzExchangeProvider)) return;
final swaps = _provider as SwapsXyzExchangeProvider;
// register only for vmId is alt-vm or bridgeId is alt-vm (trade.needToRegisterInSwapXyz)
final needToRegister = trade.needToRegisterInSwapXyz ?? false;
if (!needToRegister) return;
final vmId = (trade.providerId ?? '').toLowerCase();
if (vmId.isEmpty) {
printV('SwapsXyz: transaction register: skipped (vmId empty)');
return;
}
final txHash = sendViewModel.pendingTransaction?.evmTxHashFromRawHex ??
sendViewModel.pendingTransaction?.id ??
'';
if (txHash.isEmpty) {
printV('SwapsXyz: transaction register: skipped (txHash empty)');
return;
}
final chainId = int.tryParse(trade.router ?? '') ?? 0;
if (chainId <= 0) {
printV('SwapsXyz: transaction register: skipped (invalid chainId)');
return;
}
printV(
'SwapsXyz: attempting to register transaction: tradeId = ${trade.id}, txHash = $txHash, chainId = $chainId, vmId = $vmId');
final registered = await swaps.registerAltVmTx(
txId: trade.id,
txHash: txHash,
chainId: chainId,
vmId: vmId,
);
if (!registered) {
printV('SwapsXyz: transaction register: failed');
} else {
printV('SwapsXyz: transaction register: success');
}
} catch (e) {
printV('registerSwapsXyzTransaction error: $e');
}
}
PaymentURI? get paymentUri {
final inputAddress = trade.inputAddress;
final amount = trade.amount;
+56
View File
@@ -22,6 +22,7 @@ import 'package:cake_wallet/entities/template.dart';
import 'package:cake_wallet/entities/transaction_description.dart';
import 'package:cake_wallet/entities/wallet_contact.dart';
import 'package:cake_wallet/evm/evm.dart';
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
import 'package:cake_wallet/exchange/provider/exchange_provider.dart';
import 'package:cake_wallet/exchange/provider/jupiter_exchange_provider.dart';
import 'package:cake_wallet/exchange/provider/near_Intents_exchange_provider.dart';
@@ -982,6 +983,13 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
state = TransactionCommitted();
if (_currentTrade != null) {
final provider = _currentTrade!.provider;
if (provider == ExchangeProviderDescription.swapsXyz) {
registerSwapsXyzTransaction(_currentTrade!);
}
}
await _updateSolanaTrade(signature: pendingTransaction!.id, isSuccess: true);
if (walletType == WalletType.solana) {
@@ -1559,6 +1567,54 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
return false;
}
Future<void> registerSwapsXyzTransaction(Trade trade) async {
try {
// register only for vmId is alt-vm or bridgeId is alt-vm (trade.needToRegisterInSwapXyz)
final needToRegister = trade.needToRegisterInSwapXyz ?? false;
if (!needToRegister) return;
final vmId = (trade.providerId ?? '').toLowerCase();
if (vmId.isEmpty) {
printV('SwapsXyz: transaction register: skipped (vmId empty)');
return;
}
final txHash = pendingTransaction?.evmTxHashFromRawHex
?? pendingTransaction?.id
?? '';
if (txHash.isEmpty) {
printV('SwapsXyz: transaction register: skipped (txHash empty)');
return;
}
final chainId = int.tryParse(trade.router ?? '') ?? 0;
if (chainId <= 0) {
printV('SwapsXyz: transaction register: skipped (invalid chainId)');
return;
}
printV(
'SwapsXyz: attempting to register transaction: tradeId = ${trade.id}, txHash = $txHash, chainId = $chainId, vmId = $vmId');
final registered = await SwapsXyzExchangeProvider.registerAltVmTx(
txId: trade.id,
txHash: txHash,
chainId: chainId,
vmId: vmId,
);
if (!registered) {
printV('SwapsXyz: transaction register: failed');
} else {
printV('SwapsXyz: transaction register: success');
}
} catch (e) {
printV('registerSwapsXyzTransaction error: $e');
}
}
@computed
bool get usePayjoin => _settingsStore.usePayjoin;