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
}