簡體   English   中英

估計 ETH 轉賬和 ERC20 轉賬 gas 總是返回相同的值

[英]Estimating ETH transfer and ERC20 transfer gas always returns same value

我正在嘗試估算 erc20 轉賬費和 eth 轉賬費。 然而,gasstimate 總是為 ethTransferGasEstimate 和 erc20TransferGasEstimate 返回相同的值

  • ethTransferGasEstimate 總是 = 21000
  • erc20TransferGasEstimate 始終 = 68408
     [ ethTransferGasEstimate, erc20TransferGasEstimate, feeHistory, feeHistoryPendingBlock ] = await Promise.all([
                await web3.eth.estimateGas(ethTransferCallData),
                await usdc_contract.estimateGas.transfer(TO_ADDRESS_ETH_MAINNET, 100,{
                    from: FROM_ADDRESS_ETH_MAINNET
                }),
                await web3.eth.getFeeHistory(10, "latest",[10, 50, 90]),
                await web3.eth.getFeeHistory(1, "pending",[10, 50, 90])
            ])

const baseFeePerGas = parseInt(feeHistoryPendingBlock.baseFeePerGas,16)
            const rewardPerGas = feeHistory.reward.map(b => parseInt(b[1],16)).reduce((a, v) => a + v);
            const priorityFeePerGasEstimate = Math.round(rewardPerGas/feeHistory.reward.length);
            const ethTransferFee = ((baseFeePerGas+priorityFeePerGasEstimate)*ethTransferGasEstimate)/10**18
            const erc20TransferFee = ((baseFeePerGas+priorityFeePerGasEstimate)*erc20TransferGasEstimate.toNumber())/10**18
            
            console.log("--------Ethers.js----------")
            console.log("gas estimate eth transfer",ethTransferGasEstimate.toString())
            console.log("total fee", ethTransferFee)
            console.log("gas estimate usdc_contract transfer", erc20TransferGasEstimate.toString())
            console.log("total fee", erc20TransferFee)

合約的每個低級操作(從 memory 讀取,寫入存儲,...)都有一個預先確定的 gas 單位價格。 當估算器將所有這些操作相加時,您會在ethTransferGasEstimateerc20TransferGasEstimate變量中獲得氣體單位的數量。

注意:一些合約邏輯和最終的操作列表可能取決於執行交易之前未知的數據,這就是為什么它只是一個估計。

然后會自動為 ETH 購買氣體單位——這是交易費用。 他們的價格是市場驅動的,您可以在https://etherscan.io/gastracker中查看當前價格,或者您可以使用provider.getGasPrice()獲取節點提供商對當前市場價格的估計。

目前,市場 gas 價格約為每 gas 單位 7 Gwei(= 700 wei)。 因此,以這個價格,ETH 轉移將花費你 21,000 個氣體單位 == 147,000,000,000 wei == 0.000000147 ETH。 ERC20 轉賬目前將花費您 68,408 個氣體單位 == 478,856,000,000 wei == 0.000000478856 ETH。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM