From a2cb994c09352eb85ff5d8909aa07ad37933bbb7 Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Tue, 31 Dec 2024 17:03:36 +0200 Subject: [PATCH] Fix fee check for erc20 transactions (#1915) --- cw_evm/lib/evm_chain_wallet.dart | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cw_evm/lib/evm_chain_wallet.dart b/cw_evm/lib/evm_chain_wallet.dart index dca16539c..9ccb05e7f 100644 --- a/cw_evm/lib/evm_chain_wallet.dart +++ b/cw_evm/lib/evm_chain_wallet.dart @@ -29,7 +29,6 @@ import 'package:cw_evm/evm_chain_transaction_model.dart'; import 'package:cw_evm/evm_chain_transaction_priority.dart'; import 'package:cw_evm/evm_chain_wallet_addresses.dart'; import 'package:cw_evm/evm_ledger_credentials.dart'; -import 'package:flutter/foundation.dart'; import 'package:hex/hex.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; @@ -348,7 +347,7 @@ abstract class EVMChainWalletBase final CryptoCurrency transactionCurrency = balance.keys.firstWhere((element) => element.title == _credentials.currency.title); - final erc20Balance = balance[transactionCurrency]!; + final currencyBalance = balance[transactionCurrency]!; BigInt totalAmount = BigInt.zero; BigInt estimatedFeesForTransaction = BigInt.zero; int exponent = transactionCurrency is Erc20Token ? transactionCurrency.decimal : 18; @@ -385,7 +384,7 @@ abstract class EVMChainWalletBase estimatedGasUnitsForTransaction = gasFeesModel.estimatedGasUnits; maxFeePerGasForTransaction = gasFeesModel.maxFeePerGas; - if (erc20Balance.balance < totalAmount) { + if (currencyBalance.balance < totalAmount) { throw EVMChainTransactionCreationException(transactionCurrency); } } else { @@ -398,7 +397,7 @@ abstract class EVMChainWalletBase } if (output.sendAll && transactionCurrency is Erc20Token) { - totalAmount = erc20Balance.balance; + totalAmount = currencyBalance.balance; } final gasFeesModel = await calculateActualEstimatedFeeForCreateTransaction( @@ -413,14 +412,15 @@ abstract class EVMChainWalletBase maxFeePerGasForTransaction = gasFeesModel.maxFeePerGas; if (output.sendAll && transactionCurrency is! Erc20Token) { - totalAmount = (erc20Balance.balance - estimatedFeesForTransaction); - - if (estimatedFeesForTransaction > erc20Balance.balance) { - throw EVMChainTransactionFeesException(); - } + totalAmount = (currencyBalance.balance - estimatedFeesForTransaction); } - if (erc20Balance.balance < totalAmount) { + // check the fees on the base currency (Eth/Polygon) + if (estimatedFeesForTransaction > balance[currency]!.balance) { + throw EVMChainTransactionFeesException(); + } + + if (currencyBalance.balance < totalAmount) { throw EVMChainTransactionCreationException(transactionCurrency); } }