以太坊開發(1):如何使用geth搭建以太坊私有鏈

geth是go-ethereum的簡稱,就是這個以太坊客戶端是go語言編寫的,除此之外還有Java、Python、Ruby、Js,就不一一列舉了。
本文針對的是mac系統,其他開發環境參考github的wiki:https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum

環境搭建

1.首先需要安裝Homebrew,如果安裝了請忽略,點擊安裝Homebrew
2.執行下面命令安裝geth:

brew tap ethereum/ethereum
brew install ethereum
## 如果需要安裝版本添加--devel 參數
## brew install ethereum --devel

3.最后使用命令geth --help是否安裝成功

創建創世塊

啟動私有鏈之前,我們需要創建創世區塊,創建文件genesis.json,填寫創世區塊信息:

{

   "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData" : "",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000042",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": { }

}

參數名 描述
chainId 指定了獨立的區塊鏈網絡 ID。網絡 ID 在連接到其他節點的時候會用到,以太坊公網的網絡 ID 是 1,為了不與公有鏈網絡沖突,運行私有鏈節點的時候要指定自己的網絡 ID。不同 ID 網絡的節點無法相互連接。
HomesteadBlock 當設置為0表示使用Homestead發布該鏈。
nonce nonce就是一個64位隨機數,用于挖礦,注意它和mixhash的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。
mixhash 與nonce配合用于挖礦,由上一個區塊的一部分生成的hash。注意它和nonce的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。
difficulty 設置設置當前區塊的難度,越大挖礦就越難。
alloc 用來預置賬號以及賬號的以太幣數量。
coinbase 礦工賬號
timestamp 設置創世塊的時間戳
parentHash 上一個區塊的hash,創世塊就為0
extraData 附加信息
gasLimit 該值設置對GAS的消耗總量限制,用來限制區塊能包含的交易信息總和

然后執行下面命令初始化創世塊:

## --datadir 表示當前區塊鏈網絡數據存放的位置
geth --datadir "./blockData" init genesis.json

這時候會發現指定的目錄下多了geth和keystore兩個文件夾:

  • geth保存的該鏈上的區塊數據
  • keystore保存的該鏈上的用戶信息

啟動私有鏈

## --datadir 表示當前區塊鏈網絡數據存放的位置
## --nodiscover 表示該鏈禁止被其他節點發現
## console 2>>geth.log 表示將日志輸出到geth.log,打開另外一個控制臺執行tail -f 查看日志
geth --datadir "./blockData" --nodiscover console 2>>geth.log

啟動成功出現如下界面:


打開geth.log可以查看到啟動日志:


另外還有一種參數較為復雜的啟動方式,這種的作用是啟動rpc通信,后續會講解rpc的使用場景。

geth --identity "secbro etherum" --rpc --rpccorsdomain "*" --datadir "./blockData" --port "30303" --rpcapi "db,eth,net,web3" --networkid 95518 console 2>>geth.log 

這里順便介紹一下geth的一些參數

參數名 描述
identity 區塊鏈的標示,用于標示目前網絡的名字
init 指定創世塊文件的位置,并創建創世塊
datadir 當前區塊數據存放的位置
port 網絡監聽端口,默認30303
rpc 啟動rpc通信
rpcapi 設置允許連接rpc的客戶端,一般為db,eth,net,web3
rpccorsdomain 指定什么url能連接到你的節點執行rpc定制端任務,如果輸入的是“*”,則任何url都可以連接到你的rpc實例。
rpcaddr 連接rpc的地址,默認為localhost
rpcport 連接rpc的端口,默認為8545
networkid 設置當前區塊鏈的網絡ID,用于區分不同的網絡,是一個數字
console 啟動命令行模式,可以在Geth中執行命令
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。