區塊鏈開發學習第一章:Mac搭建以太坊私有鏈


記錄過程與問題

一、安裝

以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一起交流:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM