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中執行命令 |
- 下一講將講解在以太坊私有鏈上的基本操作