記錄過程與問題
一、安裝
以go版本的ethereum進行安裝
brew tap ethereum/ethereum
brew install ethereum
# 如果希望基於ethereum的develop分支安裝,執行 brew install ethereum --devel
問題:
1、由於我的MacOS系統一直沒有更新,導致安裝不上,提示XCode版本過低,更新XCode時又提示OS版本過低,沒辦法重新更新了macos monterey到最新版,然后把所有軟件都重新更新了一次
2、go安裝過程中出現問題,我是單獨進行了go的安裝才繼續進行下去
安裝成功后,可通過 geth --help 查看是否安裝好
二、初始化(寫入創世區塊)
自定義一個創世區塊的json配置文件genesis.json,與保存數據目錄data
{ "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": {}, "nonce": "0x0000000000000042", "difficulty": "0x020000", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", "gasLimit": "0x4c4b40" }
然后運行初始化命令:
geth --datadir "./data" init ./genesis.json
結果異常如下:
原因:用比較短的negative代碼寫初始塊,會報錯。修改json如下:
{ "config": { "chainId": 1001,(原本這里是666,導致了我后面章節出現的問題,格外重要!!!!!!) "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x47b760", "difficulty": "0x00002", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }
重復運行初始化命令,初始化成功
此時目錄結構變成如下情況:
其中,keystore用來保存賬戶信息,geth用來保存區塊信息
三、啟動私有鏈節點
geth --datadir "./data" --networkid 1001 console
–networkid選項后面跟一個數字,這里是1108,表示指定這個私有鏈的網絡id為1108。網絡id在連接到其他節點的時候會用到,以太坊公網的網絡id是1,為了不與公有鏈網絡沖突,運行私有鏈節點的時候要指定自己的網絡id
完后一周來補充的:請注意!!!!!:這里的networkid一定要與genesis.json里面的chainid一致!!!!!!!!!!!!!!!!!!!!!!!!!!!!
輸出如下內容即表示成功:
為了避免JavaScript控制台命令與geth日志混淆,可以通過如下命令將日志輸出到別的文件內:
geth --datadir "./data" --networkid 1001 console 2> geth.log
先記錄到這里,下一章寫創建賬戶與多私有節點挖礦
--------2021-11-06更新----------
當用MetaMask連接本地私有鏈時一直無法連接,然后telnet localhost 8545測試端口是否開啟,發現根本沒有開啟,在網上找了一大堆,都說要在啟動私有鏈的時候加上 --rpc等一系列參數,但是我的缺是報錯,-rpc未定義
這時我就是想不是我geth版本的原因,然后查了下資料發現:
-rpc已經於今年6月份移除被棄用了,所以我改用--http啟動
geth --datadir "./data" --networkid 1001 --http console 2> geth.log
然后telnet localhost 8545 成功!通過MetaMask連接也成功!
geth相關命令詳解此文檔最新:
https://www.cnblogs.com/kaifayuan/p/14970409.html
----------2021-11-07更新-----------
由於需要通過metamask操作賬戶部署合約,但是遇到錯誤“invalid sender"”
原因是賬戶沒有解鎖(好像是隔一段時間就要解鎖),所以啟動時新增參數:
geth --datadir "./data" --networkid 1001 --http --http.api web3,eth,personal,miner,net,txpool --allow-insecure-unlock console 2> geth.log
geth --datadir "./data" --networkid 1001 --http --allow-insecure-unlock console 2> geth.log (直接這樣好像也行)
如果有學習計划的童鞋,可以加我QQ一起交流: