fix: Polygon transactions not coming up in transactions history page (#2537)

David Adegoke committed Sep 25, 2025 at 08:45 UTC 7704ec047cce098bb68748ffc58697104df4ce31
6 files changed +92 -73
cw_ethereum/lib/ethereum_transaction_info.dart
+2
@@ -14,6 +14,7 @@ class EthereumTransactionInfo extends EVMChainTransactionInfo {
14 required super.confirmations,
15 required super.to,
16 required super.from,
17 + super.contractAddress,
18 super.evmSignatureName,
19 super.exponent,
20 });
@@ -33,6 +34,7 @@ class EthereumTransactionInfo extends EVMChainTransactionInfo {
34 to: data['to'],
35 from: data['from'],
36 evmSignatureName: data['evmSignatureName'],
37 + contractAddress: data['contractAddress'],
38 );
39 }
40
cw_ethereum/lib/ethereum_wallet.dart
+1
@@ -105,6 +105,7 @@ class EthereumWallet extends EVMChainWallet {
105 to: transactionModel.to,
106 from: transactionModel.from,
107 evmSignatureName: transactionModel.evmSignatureName,
108 + contractAddress: transactionModel.contractAddress,
109 );
110 return model;
111 }
cw_evm/lib/evm_chain_transaction_info.dart
+3
@@ -21,6 +21,7 @@ abstract class EVMChainTransactionInfo extends TransactionInfo {
21 required this.to,
22 required this.from,
23 this.evmSignatureName,
24 + this.contractAddress,
25 }) : amount = ethAmount.toInt(),
26 fee = ethFee.toInt();
27
@@ -40,6 +41,7 @@ abstract class EVMChainTransactionInfo extends TransactionInfo {
41 final String? to;
42 final String? from;
43 final String? evmSignatureName;
44 + final String? contractAddress;
45
46 //! Getter to be overridden in child classes
47 String get feeCurrency;
@@ -76,5 +78,6 @@ abstract class EVMChainTransactionInfo extends TransactionInfo {
78 'to': to,
79 'from': from,
80 'evmSignatureName': evmSignatureName,
81 + 'contractAddress': contractAddress,
82 };
83 }
cw_polygon/lib/polygon_transaction_info.dart
+2
@@ -14,6 +14,7 @@ class PolygonTransactionInfo extends EVMChainTransactionInfo {
14 required super.confirmations,
15 required super.to,
16 required super.from,
17 + super.contractAddress,
18 super.exponent,
19 });
20
@@ -31,6 +32,7 @@ class PolygonTransactionInfo extends EVMChainTransactionInfo {
32 tokenSymbol: data['tokenSymbol'] as String,
33 to: data['to'],
34 from: data['from'],
35 + contractAddress: data['contractAddress'],
36 );
37 }
38
cw_polygon/lib/polygon_wallet.dart
+1
@@ -102,6 +102,7 @@ class PolygonWallet extends EVMChainWallet {
102 tokenSymbol: transactionModel.tokenSymbol ?? "MATIC",
103 to: transactionModel.to,
104 from: transactionModel.from,
105 + contractAddress: transactionModel.contractAddress,
106 );
107 return model;
108 }
lib/polygon/cw_polygon.dart
+83 -73
@@ -14,14 +14,13 @@ class CWPolygon extends Polygon {
14 WalletInfo? walletInfo,
15 String? password,
16 String? passphrase,
17 - }) =>
18 - EVMChainNewWalletCredentials(
19 - name: name,
20 - walletInfo: walletInfo,
21 - password: password,
22 - mnemonic: mnemonic,
23 - passphrase: passphrase,
24 - );
17 + }) => EVMChainNewWalletCredentials(
18 + name: name,
19 + walletInfo: walletInfo,
20 + password: password,
21 + mnemonic: mnemonic,
22 + passphrase: passphrase,
23 + );
24
25 @override
26 WalletCredentials createPolygonRestoreWalletFromSeedCredentials({
@@ -29,30 +28,30 @@ class CWPolygon extends Polygon {
28 required String mnemonic,
29 required String password,
30 String? passphrase,
32 - }) =>
33 - EVMChainRestoreWalletFromSeedCredentials(
34 - name: name,
35 - password: password,
36 - mnemonic: mnemonic,
37 - passphrase: passphrase,
38 - );
31 + }) => EVMChainRestoreWalletFromSeedCredentials(
32 + name: name,
33 + password: password,
34 + mnemonic: mnemonic,
35 + passphrase: passphrase,
36 + );
37
38 @override
39 WalletCredentials createPolygonRestoreWalletFromPrivateKey({
40 required String name,
41 required String privateKey,
42 required String password,
45 - }) =>
46 - EVMChainRestoreWalletFromPrivateKey(name: name, password: password, privateKey: privateKey);
43 + }) => EVMChainRestoreWalletFromPrivateKey(name: name, password: password, privateKey: privateKey);
44
45 @override
46 WalletCredentials createPolygonHardwareWalletCredentials({
47 required String name,
48 required HardwareAccountData hwAccountData,
49 WalletInfo? walletInfo,
53 - }) =>
54 - EVMChainRestoreWalletFromHardware(
55 - name: name, hwAccountData: hwAccountData, walletInfo: walletInfo);
50 + }) => EVMChainRestoreWalletFromHardware(
51 + name: name,
52 + hwAccountData: hwAccountData,
53 + walletInfo: walletInfo,
54 + );
55
56 @override
57 String getAddress(WalletBase wallet) => (wallet as PolygonWallet).walletAddresses.address;
@@ -88,43 +87,47 @@ class CWPolygon extends Polygon {
87 required TransactionPriority priority,
88 required CryptoCurrency currency,
89 int? feeRate,
91 - }) =>
92 - EVMChainTransactionCredentials(
93 - outputs
94 - .map((out) => OutputInfo(
95 - fiatAmount: out.fiatAmount,
96 - cryptoAmount: out.cryptoAmount,
97 - address: out.address,
98 - note: out.note,
99 - sendAll: out.sendAll,
100 - extractedAddress: out.extractedAddress,
101 - isParsedAddress: out.isParsedAddress,
102 - formattedCryptoAmount: out.formattedCryptoAmount))
103 - .toList(),
104 - priority: priority as EVMChainTransactionPriority,
105 - currency: currency,
106 - feeRate: feeRate,
107 - );
90 + }) => EVMChainTransactionCredentials(
91 + outputs
92 + .map(
93 + (out) => OutputInfo(
94 + fiatAmount: out.fiatAmount,
95 + cryptoAmount: out.cryptoAmount,
96 + address: out.address,
97 + note: out.note,
98 + sendAll: out.sendAll,
99 + extractedAddress: out.extractedAddress,
100 + isParsedAddress: out.isParsedAddress,
101 + formattedCryptoAmount: out.formattedCryptoAmount,
102 + ),
103 + )
104 + .toList(),
105 + priority: priority as EVMChainTransactionPriority,
106 + currency: currency,
107 + feeRate: feeRate,
108 + );
109
110 Object createPolygonTransactionCredentialsRaw(
111 List<OutputInfo> outputs, {
112 TransactionPriority? priority,
113 required CryptoCurrency currency,
114 required int feeRate,
114 - }) =>
115 - EVMChainTransactionCredentials(
116 - outputs,
117 - priority: priority as EVMChainTransactionPriority?,
118 - currency: currency,
119 - feeRate: feeRate,
120 - );
115 + }) => EVMChainTransactionCredentials(
116 + outputs,
117 + priority: priority as EVMChainTransactionPriority?,
118 + currency: currency,
119 + feeRate: feeRate,
120 + );
121
122 @override
123 int formatterPolygonParseAmount(String amount) => EVMChainFormatter.parseEVMChainAmount(amount);
124
125 @override
126 - double formatterPolygonAmountToDouble(
127 - {TransactionInfo? transaction, BigInt? amount, int exponent = 18}) {
126 + double formatterPolygonAmountToDouble({
127 + TransactionInfo? transaction,
128 + BigInt? amount,
129 + int exponent = 18,
130 + }) {
131 assert(transaction != null || amount != null);
132
133 if (transaction != null) {
@@ -148,14 +151,11 @@ class CWPolygon extends Polygon {
151 (wallet as PolygonWallet).deleteErc20Token(token as Erc20Token);
152
153 @override
151 - Future<void> removeTokenTransactionsInHistory(
152 - WalletBase wallet, CryptoCurrency token) =>
153 - (wallet as PolygonWallet)
154 - .removeTokenTransactionsInHistory(token as Erc20Token);
154 + Future<void> removeTokenTransactionsInHistory(WalletBase wallet, CryptoCurrency token) =>
155 + (wallet as PolygonWallet).removeTokenTransactionsInHistory(token as Erc20Token);
156
157 @override
157 - Future<Erc20Token?> getErc20Token(
158 - WalletBase wallet, String contractAddress) =>
158 + Future<Erc20Token?> getErc20Token(WalletBase wallet, String contractAddress) =>
159 (wallet as PolygonWallet).getErc20Token(contractAddress, 'polygon');
160
161 @override
@@ -169,7 +169,7 @@ class CWPolygon extends Polygon {
169 wallet as PolygonWallet;
170
171 return wallet.erc20Currencies.firstWhere(
172 - (element) => transaction.tokenSymbol.toLowerCase() == element.symbol.toLowerCase(),
172 + (element) => transaction.contractAddress?.toLowerCase() == element.contractAddress?.toLowerCase(),
173 );
174 }
175
@@ -178,30 +178,40 @@ class CWPolygon extends Polygon {
178 (wallet as PolygonWallet).updateScanProviderUsageState(isEnabled);
179
180 @override
181 - Web3Client? getWeb3Client(WalletBase wallet) =>
182 - (wallet as PolygonWallet).getWeb3Client();
181 + Web3Client? getWeb3Client(WalletBase wallet) => (wallet as PolygonWallet).getWeb3Client();
182
183 @override
185 - String getTokenAddress(CryptoCurrency asset) =>
186 - (asset as Erc20Token).contractAddress;
184 + String getTokenAddress(CryptoCurrency asset) => (asset as Erc20Token).contractAddress;
185
186 @override
189 - Future<PendingTransaction> createTokenApproval(WalletBase wallet,
190 - BigInt amount, String spender, CryptoCurrency token, TransactionPriority priority) =>
191 - (wallet as EVMChainWallet)
192 - .createApprovalTransaction(amount, spender, token, priority as EVMChainTransactionPriority, "POL");
187 + Future<PendingTransaction> createTokenApproval(
188 + WalletBase wallet,
189 + BigInt amount,
190 + String spender,
191 + CryptoCurrency token,
192 + TransactionPriority priority,
193 + ) => (wallet as EVMChainWallet).createApprovalTransaction(
194 + amount,
195 + spender,
196 + token,
197 + priority as EVMChainTransactionPriority,
198 + "POL",
199 + );
200
201 @override
195 - void setLedgerConnection(
196 - WalletBase wallet, ledger.LedgerConnection connection) {
197 - ((wallet as EVMChainWallet).evmChainPrivateKey as EvmLedgerCredentials)
198 - .setLedgerConnection(
199 - connection, wallet.walletInfo.derivationInfo?.derivationPath);
202 + void setLedgerConnection(WalletBase wallet, ledger.LedgerConnection connection) {
203 + ((wallet as EVMChainWallet).evmChainPrivateKey as EvmLedgerCredentials).setLedgerConnection(
204 + connection,
205 + wallet.walletInfo.derivationInfo?.derivationPath,
206 + );
207 }
208
209 @override
203 - Future<List<HardwareAccountData>> getHardwareWalletAccounts(LedgerViewModel ledgerVM,
204 - {int index = 0, int limit = 5}) async {
210 + Future<List<HardwareAccountData>> getHardwareWalletAccounts(
211 + LedgerViewModel ledgerVM, {
212 + int index = 0,
213 + int limit = 5,
214 + }) async {
215 final hardwareWalletService = EVMChainHardwareWalletService(ledgerVM.connection);
216 try {
217 return await hardwareWalletService.getAvailableAccounts(index: index, limit: limit);
@@ -212,14 +222,14 @@ class CWPolygon extends Polygon {
222 }
223
224 @override
215 - List<String> getDefaultTokenContractAddresses() => DefaultPolygonErc20Tokens()
216 - .initialPolygonErc20Tokens
217 - .map((e) => e.contractAddress)
218 - .toList();
225 + List<String> getDefaultTokenContractAddresses() =>
226 + DefaultPolygonErc20Tokens().initialPolygonErc20Tokens.map((e) => e.contractAddress).toList();
227
228 @override
229 bool isTokenAlreadyAdded(WalletBase wallet, String contractAddress) {
230 final polygonWallet = wallet as PolygonWallet;
223 - return polygonWallet.erc20Currencies.any((element) => element.contractAddress.toLowerCase() == contractAddress.toLowerCase());
231 + return polygonWallet.erc20Currencies.any(
232 + (element) => element.contractAddress.toLowerCase() == contractAddress.toLowerCase(),
233 + );
234 }
235 }