區塊鏈研究(二)搭建基於以太坊的Windows私有鏈
1.准備創世塊文件(接下來有諸多試錯的問題,可直接翻到第3節上面查看最終創始塊配置文件)
配置自己的創世塊是為了區分公有鏈,同一個網絡中,創世塊必須是一樣的,否則無法聯通。
新建文件fflngenesis.json,輸入如下內容並保存,路徑隨意。
我的路徑是: F:\app\Ethereum\Blockchain Env\
{
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x4000",
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "FFLN GenesisBlock",
"gasLimit":"0xffffffff"
}
解釋一下各個參數的作用:
2.創建創世區塊
命令行進入fflngenesis.json存放地址目錄,輸入命令geth --datadir "./" init fflngenesis.json
出現錯誤“Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix
into Go struct field Genesis.extraData of type hexutil.Bytes”
百度翻譯結果:“致命錯誤:無效的成因:JSON數據文件:不能沒有0x前綴字符串
去hexutil型結構genesis.extradata字節領域。”
修改fflngenesis.json的extraData域為"0x00000000",保存后重新輸入命令,又報錯
Fatal: Failed to write genesis block: genesis has no chain configuration
這是版本問題。Geth1.6(含)以上需要配置config域
保存后再次輸入命令,結果又報錯,崩潰。
再看錯誤日志,原來是忘記加逗號,無語...
Fatal: invalid genesis file: invalid character '"' after object key:value pair
加入逗號后再次執行
接着報錯:
Fatal: invalid genesis file: invalid character '}' looking for beginning of object key string
嗯,config大括號后面的逗號,不需要的。
刪除最后一個多余的逗號,繼續執行,終於成功!
正確配置文件:
{
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x4000",
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00000000",
"gasLimit":"0xffffffff",
"config":{
"chainId": 666,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
3.創建私有鏈
輸入命令:geth --datadir "./" --nodiscover console 2>>geth.log
當看到Welcome to the Geth JavaScript console!的提示,說明已經啟動成功
4.在私有鏈上創建賬戶
輸入命令:personal.newAccount("123456")
"123456"表示此賬號的密碼.
輸入命令eth.accounts可以查看新賬戶
這樣,通過這兩個命令可以創建出多個用戶出來
若輸入命令:personal.newAccount()
則系統會提示你輸入賬號密碼,並確認,最后會顯示一個新生成的賬號
5.挖礦
輸入命令:miner.start() 或者miner.start(1)
后者表示只使用一個線程工作,這樣系統不會太卡
出現null是因為在第3步:創建私有鏈時設置了結果輸出到日志,所以無法顯示。這時可以退出重來,不設置輸出到日志
輸入命令:exit
然后再輸入:geth --datadir "./" --nodiscover console 2
再輸入:miner.start() 進行挖礦
注意點:
1. 挖礦挖到的ether幣會默認保在第一個賬戶中,即eth.acccounts[0]中。
2. 挖礦是執行智能合約的基礎。如果停止挖礦的話,不僅以太幣會停止生成,所有智能合約的調用也會不起作用。
3. 如果真的要停止挖礦,可以執行命令miner.stop()來停止挖礦
4. 按上面的命令,應該是可以實現以太坊挖礦的。如果不行的話,有可能就是之前有存在的鏈,此時應該刪除之前的數據。即刪除Ethash文件夾和里面的文件即可。(Windows:$(HOME)/Appdata/Ethash,Linux/Mac:$(HOME)/.ethash)
當使用輸入日志的方式時,可以輸入命令tail -f geth.log 來跟蹤挖礦進度如何
如果tail -f 命令無效,出現錯誤
則可查看此文解決:http://www.cnblogs.com/hantianwei/archive/2012/03/14/2395634.html
6.查看主賬戶中以太幣的數量
輸入命令: eth.getBalance(eth.accounts[0]) 結果不為0,說明挖礦成功
7.啟動windows下私有鏈圖形節點
打開安裝好的Ethereum Wallet.exe,這時會有一段漫長的Downloading new node...
如果一直down不下來,推薦查看此文,或許有所收獲。
地址:http://blog.csdn.net/fengmm521/article/details/78446520
主頁面如下:
可以看到,主賬戶有了5620個以太幣。上方紅色的字體“PRIVATE-NET”即表示你區塊鏈網絡是正常的