Gas
Ethers jsestimateGas() 無需 ETH 入賬
我正在嘗試估算用於 uniswap 交易的氣體。我可以在 Kovan 測試網上執行此操作,但是當我嘗試在主網上執行相同的腳本時,它會引發錯誤,“錯誤:內在交易成本的資金不足”。我知道問題是我的帳戶中沒有足夠的 eth 來執行交易,但我不想實際發送任何 eth。我的程式碼是:
const {ChainId, Fetcher, WETH, Route, Trade, TokenAmount, TradeType, Percent} = require('@uniswap/sdk'); const {ethers} = require("ethers"); let Web3 = require('web3'); let web3 = new Web3(new Web3.providers.HttpProvider("INFURA_ADDRESS")); const provider = new ethers.providers.EtherscanProvider('homestead', 'API_KEY'); function toHex(Amount) { return `0x${Amount.raw.toString(16)}`; } const chainId = ChainId.MAINNET; const tokenAddress = '0x6b175474e89094c44da98b954eedeac495271d0f'; const init = async () => { const gas = await web3.eth.getGasPrice(); const token = await Fetcher.fetchTokenData(chainId, tokenAddress, provider); const weth = WETH[token.chainId]; const pair = await Fetcher.fetchPairData(token, weth, provider); const amountIn = '1200000000000000'; const route = new Route([pair], weth); const trade = new Trade(route, new TokenAmount(weth, amountIn), TradeType.EXACT_INPUT); const slippageTolerance = new Percent('1', '100'); const amountOutMin = toHex(trade.minimumAmountOut(slippageTolerance)); const path = [weth.address, token.address]; const to = 'PUBLIC_ADDRESS'; const deadline = Math.floor(Date.now()/1000) + 60*20; const value = toHex(trade.inputAmount); const signer = new ethers.Wallet('PRIVATE_KEY'); const account = signer.connect(provider); const uniswap = new ethers.Contract( '0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D', ['function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts)'], account ); const gasCost = await uniswap.estimateGas.swapExactETHForTokens( amountOutMin, path, to, deadline, {value, gasPrice: gas} ); console.log(parseInt(gasCost, 10)); } init();
當在具有足夠 eth 的帳戶上執行時(例如在測試網中),它可以工作。有什麼方法可以在不需要 eth 進入帳戶的情況下估算氣體?或者,是否有另一種方法可以完全計算賬戶中不需要 eth 的氣體?我對此很陌生,因此將不勝感激任何幫助!提前致謝!
在您的估計 gas 查詢中,gas 價格幾乎不起作用,除非您與之互動的智能合約使用
0x3A
(`` opcode) 進行某些邏輯。的邏輯
swapExactETHForTokens
不使用GASPRICE
,因此即使您將gasPrice 傳遞為0,也不會影響估計。因此,即使您的賬戶中沒有 ETH,您也可以獲得估算值。