搭建基於ethereum以太坊環境的私有鏈
阿新 • • 發佈:2019-01-06
安裝geth在之前的部落格有提到,所以本篇預設已經安裝成功
geth -h //能成功顯示輸出幫助,則表示已經成功安裝
- 1
- 2
一、創世塊
現在通過配置創世塊來建立私有鏈。同一個網路中,創世塊必須是一樣的,否則無法聯通。
建立一個private的根目錄,新建創世塊json檔案genesis.json, 並把該檔案放置於peivate目錄下。內容如下:
ps: 其中詳細內容可參考:here
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block ": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
ps: 直接從官網複製,chainId 為 0, 但是會在合約部署出現問題,所以在這裡改為10.
引數解釋:
二、 建立
1 、 檢視private存放目錄
輸入:pwd
顯示結果: /Users/pro/private
- 1
- 2
- 3
2 、執行命令,建立私有鏈
geth --datadir "./" init genesis.json
- 1
3、 結果
目錄結構:
private
├── chain
│ ├── geth
│ │ └── chaindata
│ │ │ ├── 000055.log
│ │ │ ├── CURRENT
│ │ │ ├── LOCK
│ │ │ ├── LOG
│ │ │ └── MANIFEST-000000
│ │ ├── lightchaindata
│ │ ├── LOCK
│ │ └── nodekey
│ └── keystore
└── genesis.json
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
三、 啟動
geth --datadir "./" --nodiscover console 2>>geth.log
- 1
- 2
引數解釋:
--nodiscover 使用這個引數,你的節點就不會被其他人發現,除非手動新增你的節點。否則,就只有一個被無意新增到一個陌生區塊鏈上的機會,那就是跟你有相同的genesis檔案和networkID。
--maxpeers 0 如果你不想有人連上你的測試鏈,就用maxpeers 0。或者,你可以調整引數,當你確切的知道有幾個節點要連線上來的時候。
--rpc 允許RPC操作你的節點。這個引數在Geth上是預設的。
--rpcapi "db,eth,net,web3" 這個命令指示了允許通過RPC訪問的命令。預設情況下,Geth允許web3。
--rpcport "8080"
--rpccorsdomain "http://chriseth.github.io/browser-solidity/"
--datadir "/home/TestChain1" 私有鏈存放路徑(最好跟公有鏈路徑不同)
--port "30303" 網路監聽埠,用來和其他節點手動連線
--identity “TestnetMainNode" 用來標識你的節點的,方便在一大群節點中識別出自己的節點
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
檢視輸出(進入到private目錄):
tail -f geth.log
- 1
- 2
四、使用
1、 檢視區塊資訊
eth
eth.getBlock(0) //檢視創始區塊資訊
- 1
- 2
- 3
2、 檢視節點資訊
admin.nodeInfo //檢視當前節點資訊
- 1
- 2
> admin.nodeInfo
{
enode: "enode://160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f074[email protected][::]:30303",
id: "160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f07481fca352a31bb6e1219edb5760ccdec65cad37310be578c2ad503ccd301a762",
ip: "::",
listenAddr: "[::]:30303",
name: "Geth/v1.6.5-stable-cf87713d/darwin-amd64/go1.8.3",
ports: {
discovery: 30303,
listener: 30303
},
protocols: {
eth: {
difficulty: 17179869184,
genesis: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
network: 1
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
ps: 注意enode節點,這是當前節點的標識。
五、配置第二臺私鏈伺服器
要求: 兩臺電腦網路相通,並且要指定相同的networkid
按照同樣的步驟在B電腦上搭建私鏈。
搭建完成後在B電腦上輸入:
admin.addPeer("節點資訊@A電腦ip地址:30303");
例如:
admin.addPeer("enode://160e220dda023b7307de009791be621a2857195f062a6a1d9002276e95604f074[email protected]127.0.0.1:30303")
- 1
- 2
- 3
- 4
- 5
- 6
驗證是否和其他節點成功建立連線,輸入admin,檢視是否連線上了節點,很多時候回連線不上,這時候就可以從另外一個節點嘗試新增本節點,這樣就會成功了。