如何计算BSC(BEP-20)区块链中USDT等代币交易的gasLimit?

How to calculate gasLimit for token transactions like USDT in BSC (BEP-20) blockchain?

我正在币安智能链中开发一个 DAPP,我想知道如何计算 gasLimit 代币交易的 USDT 就像它的 chrome 扩展一样建议交易 gasLimit 并计算其 transactionFee。我有一个计算 BNB 交易中 gasLimit 的公式,但这不适用于代币交易。 BNB交易计算公式:

const gasPrice = await web3.eth.getGasPrice(); // estimate the gas price
    
const transactionObject = {
  from: SENDER_WALLET_ADDRESS,
  to: RECIEVER_WALLET_ADDRESS,
  gasPrice
}

const gasLimit = await web3.eth.estimateGas(transactionObject); // estimate the gas limit for this transaction
const transactionFee = gasPrice * gasLimit; // calculate the transaction fee

如果我也能像上面那样计算transactionFee就太好了!!! 有什么帮助吗???

在进行token交易时,可以使用web3.eth.Contract在JS中实例化contract helper对象。

那你就可以使用.methods 属性包含基于合约ABI的辅助函数和public函数

然后你可以将.estimateGas()函数链接到合约函数。

const myContract = new web3.eth.Contract(abiJson, contractAddress);
const gasLimit = await myContract.methods
    .transfer(to, amount)       // the contract function
    .estimateGas({from: ...});  // the transaction object

文档:https://web3js.readthedocs.io/en/v1.3.4/web3-eth-contract.html#methods-mymethod-estimategas

使用 Ethers.js 库

const ethers = require("ethers");

let wallet = new ethers.Wallet(privateKey, provider);

let walletSigner = wallet.connect(provider);

let contractAddress = "";

const token = new ethers.Contract(
  contractAddress,
  contract_abi,
  walletSigner
);

let token_decimal = await token.decimals();

let token_amount = await ethers.utils.parseUnits(amount, token_decimal);


let gasPrice = await provider.getGasPrice();

gasPrice = await ethers.utils.formatEther(gasPrice);

let gasLimit = await token.estimateGas.transfer(
  receiver,
  token_amount
);

let transactionFee = gasPrice * gasLimit.toNumber();