通過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上給的官方配置文件,就會產生這個錯誤。
PS:如果這篇文章對你有幫助,請頂一下,或者說點什么吧。