geth配置中,genesis.json的幾個問題
通過geth來配置以太坊私有鏈,是學習以太坊的入門步驟。而其中,如何配置genesis.json,又是最關鍵的一步。如果在其中產生錯誤,有些會導致無法初期化私有鏈,有些卻會導致在以後的學習過程中發生各種莫名其妙的錯誤。
但是,現在網上能找到的配置內容,很多隻適用於v1.4之前的版本,甚至連geth自身在github上的genesis.json,其中的chainId配置,也有問題。
基於筆者自身實踐,以下genesis.json可以適用於現在的geth版本(v1.6.6)
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x02000000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
常遇到的幾個錯誤:
Fatal: invalid genesis file: missing 0x prefix for hex data
這個錯誤信息意思很明白,就是你的json文件中,對於16進制數據,需要加上0x前綴
Fatal: invalid genesis file: hex string has odd length
從v1.6開始,設置的十六進制數值,不能是奇數位, 比如不能是0x0,而應該是0x00。
Fatal: failed to write genesis block: genesis has no chain configuration
這個錯誤信息,就是說,你的json文件中,缺少config部分。看到這個信息,我們不需要把geth退回到v1.5版本,而是需要加上config部分。
Error: invalid sender undefined
這個錯誤不會導致初始化失敗,但是會在以後的轉賬(eth.sendTransaction),或者部署智能合約的時候產生。解決方法就是chainId 不能設置爲0。 如果你完全按照github上給的官方配置文件,就會產生這個錯誤。
轉載自:here