исключение платы за газ для оценки web3dart

Я пытаюсь оценить плату за газ для транзакции с токеном ERC20 — в данном случае перевод DAI с одного адреса на другой (в Мумбаи).

Код для расчета платы за газ:

      final contract = DeployedContract(ContractAbi.fromJson(abi, token.id),  // 'dai'
          EthereumAddress.fromHex(token.contractAddress)); // 0xcB1e72786A6eb3b44C2a2429e317c8a2462CFeb1

final transferFunction = contract.function('transferFrom');

final transaction = Transaction.callContract(
  contract: contract,
  function: transferFunction,
  parameters: [
    EthereumAddress.fromHex(address),  // 0x2970C7181450B6c13071131f0005ccA18436c12B
    EthereumAddress.fromHex(recipientAddress),  // 0xc7c6BAEA62Ff6BBAca799156CC4e9f50BC9e8060
    10000000000000,  // 0.001 Dai
  ],
);

final fee = await _client.estimateGas(
  to: transaction.to,
  value: transaction.value,
  data: transaction.data,
);

Однако я получаю RPCError: got code 3 with msg "execution reverted: Dai/insufficient-allowance". Адрес отправителя содержит достаточное количество токенов (около 0,0038 Dai). Я пытался сначала позвонить approveс той же суммой, но я получаю другое исключение RPCError: got code -32000 with msg "already known".и оценка газа все еще терпит неудачу.

Любые идеи о том, как правильно оценить с помощью web3dart?

1 ответ

Попробуйте добавить отправителя в функцию оценки газа,

        final fee = await _client.estimateGas(
      sender: EthereumAddress.fromHex(fromAddress),
      to: transaction.to,
      value: transaction.value,
      data: transaction.data,
    );
Другие вопросы по тегам