Web3js

儘管我的氣體限制非常低,但我收到“錯誤:超過塊氣體限制”

  • November 15, 2021

我正在嘗試使用 Web3.js、Ethereumjs-tx 和 Alchemy 節點在 Rinkeby 測試網中創建一個簡單的事務。我只設法以 0.001 Gwei 的氣體推動交易,並且已經等待了一個多小時。這是一個 TxHash:https ://rinkeby.etherscan.io/tx/0xdd9e7673ca54a8c4b034f214a85027f246584c21478f3143e024999bce38ffa8

我可以通過 MetaMask 立即發送 1.5 Gwei 的 gas,但即使在我的程序中輸入 0.01 Gwei gasPrice 也會引發“超過塊 gas 限制”錯誤。錢包裡有足夠的 Gwei。我不知道問題是什麼。

這是我的程式碼:

var Tx = require('ethereumjs-tx').Transaction;
const Web3 = require('web3');
const web3 = new Web3('MyAlchemyHTTPKeyForRinkeby');

const account1 = 'PublicKey1';
const account2 = 'PublicKey2'
     
const privateKey1 = Buffer.from('MyPrivateKey1', 'hex');
const privateKey2 = Buffer.from('MyPrivateKey1', 'hex');



web3.eth.getTransactionCount(account2, (err, txCount)=> {
   const txObject = {
       nonce: web3.utils.toHex(txCount),
       to: account1,
       value: web3.utils.toHex(web3.utils.toWei('1000000', 'gwei')) ,
       gasLimit: web3.utils.toHex(web3.utils.toWei('1.5', 'gwei')),
       gasPrice: web3.utils.toHex(web3.utils.toWei('1', 'gwei')),
       from: account2
   }

   //sign
   const tx = new Tx(txObject,{chain:4});
   tx.sign(privateKey2);


   const serializedTransaction = tx.serialize();
   const raw = "0x" + serializedTransaction.toString('hex');

   web3.eth.sendSignedTransaction(raw, (err, txHash)=> {
       console.log('txHash:', txHash);
       console.log('error:', err);
   })

})

你誤解了什麼是氣體。

在 Wei 中它不是一個值,它是它自己的一個度量單位,與 EVM 支持的各種指令的計算成本有關。1氣不等於X wei或任何東西,它只是一種氣。

通過查看Etherscan Rinkeby,我們可以看到在撰寫本文時,該區塊的氣體限制為 30,000,000 GAS(不是 wei)。當您提供 1.5 gwei 轉換為 wei 時:1,500,000,000 wei,您將其用作氣體值。所以你確實遠遠超過了區塊氣體限制。

從 EOA 到 EOA 的簡單轉移應該花費 21,000 氣體(為了安全起見,請隨意將此值提高一點:60,000 左右綽綽有餘)。

目前的 gasPrice 似乎略高於 1 Gwei。

所以這些設置應該為你做:

gasLimit: 60000,
gasPrice: web3.utils.toWei('1.1', 'gwei')),

如果您想要一些更強大的東西,請不要猶豫使用 gas price helpers,例如Web3 中包含的那個,而您的 tx 使用的 gas 將是恆定的,而 gas 價格不是。

您可以查看Alchemy的文件中的 EIP-1559 天然氣價格機制。

我只設法以 0.001 Gwei 的氣體推動交易,並且已經等待了一個多小時。

您連結的 tx 的汽油價格為 0.01 Gwei,因此“礦工”無法獲得它的價格。不到目前價格的 1%……難怪它為什麼會無限期等待。

希望這能回答你的問題 !

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