Web3js
將整個乙太幣餘額發送到另一個錢包
我發現了同樣的問題,但它是在 4 年前被問到的,但它似乎不再起作用了?
const Web3 = require('web3') require('dotenv').config() async function main() { const { RPC_URL, PRIVATE_KEY, TO } = process.env; const web3 = new Web3(new Web3.providers.HttpProvider(RPC_URL)) const pubkey = await web3.eth.accounts.privateKeyToAccount(PRIVATE_KEY).address; const balance = await web3.eth.getBalance(pubkey); const currentGas = await web3.eth.getGasPrice(); const requiredGasPrice = await web3.eth.estimateGas({to: TO}); const gas = currentGas * requiredGasPrice; const nonce = await web3.eth.getTransactionCount(pubkey, 'latest'); const transaction = { 'to': TO, 'value': balance - gas, 'gas': requiredGasPrice, 'gasPrice': currentGas, 'nonce': nonce }; const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY); web3.eth.sendSignedTransaction(signedTx.rawTransaction, function (error, hash) { if (!error) { console.log("🎉 The hash of your transaction is: ", hash); } else { console.log("❗ Something went wrong while submitting your transaction: ", error) } }); } main();
我似乎無法計算氣體,以便它能夠從錢包中發送所有乙太幣。
我如何計算交易發送資金的氣體。
使用estimateGas方法計算氣體。
web3.eth.estimateGas
除了上面的答案,我還要補充一點,您可以通過將簡單的乙太幣轉移所需的氣體
21000
乘以目前的氣體價格來計算執行交易所需的費用await web3.eth.getGasPrice()
:const currentGas = await web3.eth.getGasPrice(); const requiredGasPrice = await web3.eth.estimateGas({to: TO}); const gas = currentGas * requiredGasPrice;
然後將
gasPrice
變數傳遞給事務對象:const transaction = { 'to': TO, 'value': balance - gas, 'gas': requiredGasPrice, 'gasPrice': currentGas, 'nonce': nonce };
您還可以添加條件來檢查是否
balance
大於gas
。這樣你就會知道這個特定的錢包將有足夠的餘額來支付交易費用。