Web3js

將整個乙太幣餘額發送到另一個錢包

  • December 29, 2021

我發現了同樣的問題,但它是在 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。這樣你就會知道這個特定的錢包將有足夠的餘額來支付交易費用。

引用自:https://ethereum.stackexchange.com/questions/117520