Go-Ethereum
私鏈上的gas超過上限
我目前正在執行具有 2 個節點的私有乙太坊鏈。我在主節點上的 coinbase 地址有很多乙太幣,所以我去進行交易,但收到錯誤“Gas Limit exceeded”。我注意到氣體限制設置為 5000,這太低而無法進行交易,所以我轉到自定義的 genesis.json 文件並將限制增加到“0xC350”或 50000。儘管如此,限制只移動到 5003。我有不知道為什麼會這樣,我已經用其他更大的數字替換了這個數字,但它只能設法達到 5003 而不是預設的 5000。任何幫助將不勝感激。
這是我的 Genesis.json 文件:
{ "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0xC350", "difficulty": "0x400", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { "0xcf117e46aa225864ed1d0dd7e99b8b006abe3410": { "balance": "10000000000000000000000000" } }
}
我正在使用 Geth。
不要更改創世文件,因為它會改變區塊鏈的動態。Geth 有一個
--targetgaslimit
標誌,它將導致礦工收斂到與硬編碼值相反的特定數字。每個塊都有一個包含在塊本身內的氣體限制。此限制只能在塊之間以一定的量變化(準確地說是prev limit/1024)。如果變化較大,則不再接受該塊。
確保您不僅設置
--targetgaslimit
而且開始探勘--mine
您的專用網路。這將緩慢地將塊氣體限制移向指定的目標氣體限制,您將看到氣體限制如何增加每個塊。另請注意,目標氣體限制標誌是在 geth 1.4.x 中引入的,因此請確保您有一個最新的客戶端。
另請參閱這個出色的答案。
我使用了指南How to Run Multiple Geth Instances on a Private Ethereum Blockchain。並且可以使用1,000,000以上的氣體。
{ "nonce": "0xdeadbeefdeadbeef", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x686f727365", "gasLimit": "0x8000000", "difficulty": "0x0400", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { } }
新版本的 geth 不允許在創世塊啟動後對其進行修改。您必須重置數據目錄並重新開始。