From 758cb8d8e5dfea501814ac782f2bcae82c632272 Mon Sep 17 00:00:00 2001 From: Serhii <17529954+serhii-bor@users.noreply.github.com> Date: Fri, 8 May 2026 21:30:34 +0300 Subject: [PATCH] restore swaps xyz tx registration (#3205) --- .../provider/swapsxyz_exchange_provider.dart | 5 +- .../exchange_trade/exchange_trade_page.dart | 1 - .../exchange/exchange_trade_view_model.dart | 50 ----------------- lib/view_model/send/send_view_model.dart | 56 +++++++++++++++++++ 4 files changed, 59 insertions(+), 53 deletions(-) diff --git a/lib/exchange/provider/swapsxyz_exchange_provider.dart b/lib/exchange/provider/swapsxyz_exchange_provider.dart index 9d74394eb..0d9d8728a 100644 --- a/lib/exchange/provider/swapsxyz_exchange_provider.dart +++ b/lib/exchange/provider/swapsxyz_exchange_provider.dart @@ -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 registerAltVmTx({ + static Future registerAltVmTx({ required String txId, required String txHash, required int chainId, diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index 8ffd76851..d7fd3196e 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -340,7 +340,6 @@ class ExchangeTradeState extends State { if (bottomSheetContext.mounted && Navigator.canPop(bottomSheetContext)) Navigator.of(bottomSheetContext).pop(true); sendVM.commitTransaction(context); - widget.exchangeTradeViewModel.registerSwapsXyzTransaction(); }, amountParsingProxy: sendVM.amountParsingProxy, ); diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index 7807fb1eb..49514bfa6 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -406,56 +406,6 @@ abstract class ExchangeTradeViewModelBase with Store { return true; } - Future 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; diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index 7ff989ddf..52e7c44f2 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -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 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;