環境 centos 7 搭建 3 個節點的 私鏈.
第一步 安裝 一些依賴的 工具
yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y
第二步 安裝 Go ,以太坊的區塊鏈是GO寫的
下載go: wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz
解壓: tar -C /usr/local -xzf go1.10.linux-amd64.tar.gz
然后配置環境變量
echo 'export GOROOT=/usr/local/go' >> /etc/profile
echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/profile
echo 'export GOPATH=/root/go' >> /etc/profile
echo 'export PATH=$PATH:$GOPATH/bin' >> /etc/profile
source /etc/profile
檢查 go 是否正確安裝 : go version
第三步: 下載 geth 源碼 ,並且編譯安裝.
下載源碼: git clone https://github.com/ethereum/go-ethereum.git
進入源碼根路徑 cd go-ethereum
編譯源碼: make all
備注編譯 后的文件在 源文件的 根目錄下面的 build 目錄下面.
配置 geth 的環境變量 :echo 'export PATH=$PATH:/你源碼的路徑/go-ethereum/build/bin' >> /etc/profile
刷新配置文件: source /etc/profile
檢查:geth version
安裝工具完成,下面開始創建節點.
1 在 每台機子上都 創建初始化創世區塊的文件 genesis.json
{ "config": { "chainId": 22, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x400", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000032", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
備注:因為后面節點要相互連接,所以創世區塊配置文件要相同,不讓無法連接.
2 關閉防火牆,並且設置時間為同一時區,然后把時間和網絡時間對對齊,並且設置為自動和網絡時間同步.
上面這部 很重要.不然節點無法同步,不管是防火牆,還是 時間不同步,都不能同步區塊,時間差異不大,會同步,但是會不停的跑異常.
3 初始化
geth --datadir 放區塊的文件夾路徑 init genesis.json(創世區塊配置文件)
初始成功以后啟動節點: geth --networkid 1234 --nodiscover --datadir d1 --rpc --rpcaddr 192.168.1.111 --rpcport 9001 --port 30001 console 2 --dev.period 1 --allow-insecure-unlock
備注上面定義了 網絡id 是 1234 ,必須一樣,並且不能是1 .
--datadir d1 放區塊的文件夾路徑 d1
--rpc --rpcaddr 192.168.1.111 --rpcport 9001 指定啟動 rpc 服務,端口 9001 ,這個是給 java 通過 web3j 來 調用鏈數據的接口.不寫不會開啟.
-port 30001 是 指定 賬本數據節點之間 數據同步的端口.
console 會一命令的方式啟動,不帶,啟動以后只能看,不能交互式的敲命令.
--dev.period 和生成區塊有關,有了它 miner.start() 再回挖礦.沒有不會
--nodiscover 關閉自用發現
4 三個節點都啟動以后 查看他們的連接碼: admin.nodeInfo.enode
備注:上面連接碼 使用的時候需要把127.0.0.1 改成真實的ip
5 然后通過 admin.addPeer("連接碼"); 來連接
6 通過 admin.peers 查看 當前節點連接了那些節點.
備注: abc 三節點 ,只要 要 a 連接 b,a連接 c,然后 b連接c ,就可實現三節點的互聯,並且 geth 或記住上次連接的 節點,下次 啟動會自動連接. 公鏈上 應該是通過相互自動發現的機制.
7 私鏈搭建完成,但是 eth.accounts 只能看到本地創建的錢包, 但是這個錢包的余額 ,在別的節點上依舊可以查到. 挖礦產區塊的 信息也會同步到別的節點.
8 如果 節點挖礦 太慢,並且修改挖礦難度無效,這時候可能是 網絡 id 的問題,換個 networkid 就可以了.
挖礦難度的最小值 是 16進制的 0x20000 ,也就是 13 W 多 ,只能 幣這個大,不能比這個小,小於這個值會用默認值. 0x20000
9 啟動時指定礦工賬號
--etherbase 0xad27e0a42831ee84700f612035da59826041abf9
備注:據說加上 --mine 或自動挖礦 ,但是實測無效.