restore swaps xyz tx registration (#3205)
Serhii committed
May 8, 2026 at 21:30 UTC
758cb8d8e5dfea501814ac782f2bcae82c632272
4 files changed
+59
-53
lib/exchange/provider/swapsxyz_exchange_provider.dart
+3
-2
@@ -382,7 +382,8 @@ class SwapsXyzExchangeProvider extends ExchangeProvider {
382
final reqAmountRaw = reqAmountStr.replaceAll('n', '');
383
384
final needToRegisterInSwapXyz =
385
- vmId == 'alt-vm' || bridgeIds.contains('alt-vm');
385
+ vmId == 'alt-vm' || bridgeIds.contains('alt-vm')
386
+ || chainId == 'solana' || bridgeIds.contains('solana');
387
388
final trade = Trade(
389
id: txId,
@@ -417,7 +418,7 @@ class SwapsXyzExchangeProvider extends ExchangeProvider {
418
}
419
420
/// Register a broadcasted tx with Swaps.xyz (required for alt-vm).
420
- Future<bool> registerAltVmTx({
421
+ static Future<bool> registerAltVmTx({
422
required String txId,
423
required String txHash,
424
required int chainId,
lib/src/screens/exchange_trade/exchange_trade_page.dart
-1
@@ -340,7 +340,6 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
340
if (bottomSheetContext.mounted && Navigator.canPop(bottomSheetContext)) Navigator.of(bottomSheetContext).pop(true);
341
342
sendVM.commitTransaction(context);
343
- widget.exchangeTradeViewModel.registerSwapsXyzTransaction();
343
},
344
amountParsingProxy: sendVM.amountParsingProxy,
345
);
lib/view_model/exchange/exchange_trade_view_model.dart
-50
@@ -406,56 +406,6 @@ abstract class ExchangeTradeViewModelBase with Store {
406
return true;
407
}
408
409
- Future<void> registerSwapsXyzTransaction() async {
410
- try {
411
- if (!(_provider is SwapsXyzExchangeProvider)) return;
412
- final swaps = _provider as SwapsXyzExchangeProvider;
413
-
414
- // register only for vmId is alt-vm or bridgeId is alt-vm (trade.needToRegisterInSwapXyz)
415
- final needToRegister = trade.needToRegisterInSwapXyz ?? false;
416
- if (!needToRegister) return;
417
-
418
- final vmId = (trade.providerId ?? '').toLowerCase();
419
- if (vmId.isEmpty) {
420
- printV('SwapsXyz: transaction register: skipped (vmId empty)');
421
- return;
422
- }
423
-
424
- final txHash = sendViewModel.pendingTransaction?.evmTxHashFromRawHex ??
425
- sendViewModel.pendingTransaction?.id ??
426
- '';
427
-
428
- if (txHash.isEmpty) {
429
- printV('SwapsXyz: transaction register: skipped (txHash empty)');
430
- return;
431
- }
432
-
433
- final chainId = int.tryParse(trade.router ?? '') ?? 0;
434
- if (chainId <= 0) {
435
- printV('SwapsXyz: transaction register: skipped (invalid chainId)');
436
- return;
437
- }
438
-
439
- printV(
440
- 'SwapsXyz: attempting to register transaction: tradeId = ${trade.id}, txHash = $txHash, chainId = $chainId, vmId = $vmId');
441
-
442
- final registered = await swaps.registerAltVmTx(
443
- txId: trade.id,
444
- txHash: txHash,
445
- chainId: chainId,
446
- vmId: vmId,
447
- );
448
-
449
- if (!registered) {
450
- printV('SwapsXyz: transaction register: failed');
451
- } else {
452
- printV('SwapsXyz: transaction register: success');
453
- }
454
- } catch (e) {
455
- printV('registerSwapsXyzTransaction error: $e');
456
- }
457
- }
458
-
409
PaymentURI? get paymentUri {
410
final inputAddress = trade.inputAddress;
411
final amount = trade.amount;
lib/view_model/send/send_view_model.dart
+56
@@ -22,6 +22,7 @@ import 'package:cake_wallet/entities/template.dart';
22
import 'package:cake_wallet/entities/transaction_description.dart';
23
import 'package:cake_wallet/entities/wallet_contact.dart';
24
import 'package:cake_wallet/evm/evm.dart';
25
+import 'package:cake_wallet/exchange/exchange_provider_description.dart';
26
import 'package:cake_wallet/exchange/provider/exchange_provider.dart';
27
import 'package:cake_wallet/exchange/provider/jupiter_exchange_provider.dart';
28
import 'package:cake_wallet/exchange/provider/near_Intents_exchange_provider.dart';
@@ -982,6 +983,13 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
983
984
state = TransactionCommitted();
985
986
+ if (_currentTrade != null) {
987
+ final provider = _currentTrade!.provider;
988
+ if (provider == ExchangeProviderDescription.swapsXyz) {
989
+ registerSwapsXyzTransaction(_currentTrade!);
990
+ }
991
+ }
992
+
993
await _updateSolanaTrade(signature: pendingTransaction!.id, isSuccess: true);
994
995
if (walletType == WalletType.solana) {
@@ -1559,6 +1567,54 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
1567
return false;
1568
}
1569
1570
+ Future<void> registerSwapsXyzTransaction(Trade trade) async {
1571
+ try {
1572
+
1573
+ // register only for vmId is alt-vm or bridgeId is alt-vm (trade.needToRegisterInSwapXyz)
1574
+ final needToRegister = trade.needToRegisterInSwapXyz ?? false;
1575
+ if (!needToRegister) return;
1576
+
1577
+ final vmId = (trade.providerId ?? '').toLowerCase();
1578
+ if (vmId.isEmpty) {
1579
+ printV('SwapsXyz: transaction register: skipped (vmId empty)');
1580
+ return;
1581
+ }
1582
+
1583
+ final txHash = pendingTransaction?.evmTxHashFromRawHex
1584
+ ?? pendingTransaction?.id
1585
+ ?? '';
1586
+
1587
+ if (txHash.isEmpty) {
1588
+ printV('SwapsXyz: transaction register: skipped (txHash empty)');
1589
+ return;
1590
+ }
1591
+
1592
+ final chainId = int.tryParse(trade.router ?? '') ?? 0;
1593
+ if (chainId <= 0) {
1594
+ printV('SwapsXyz: transaction register: skipped (invalid chainId)');
1595
+ return;
1596
+ }
1597
+
1598
+ printV(
1599
+ 'SwapsXyz: attempting to register transaction: tradeId = ${trade.id}, txHash = $txHash, chainId = $chainId, vmId = $vmId');
1600
+
1601
+ final registered = await SwapsXyzExchangeProvider.registerAltVmTx(
1602
+ txId: trade.id,
1603
+ txHash: txHash,
1604
+ chainId: chainId,
1605
+ vmId: vmId,
1606
+ );
1607
+
1608
+ if (!registered) {
1609
+ printV('SwapsXyz: transaction register: failed');
1610
+ } else {
1611
+ printV('SwapsXyz: transaction register: success');
1612
+ }
1613
+ } catch (e) {
1614
+ printV('registerSwapsXyzTransaction error: $e');
1615
+ }
1616
+ }
1617
+
1618
@computed
1619
bool get usePayjoin => _settingsStore.usePayjoin;
1620