本文擬使用Ethereum搭建一個三個節點的聯盟鏈,並采用POA共識方法進行共識。閑話不多說,馬上開始:
首先購置三台服務器,我這邊選擇了阿里雲服務器,鏡像選擇的是Ubuntu16.04。服務器配置與帶寬請根據經濟條件購置,一般來說1核2G已經夠用。
首先安裝go-ethereum:
sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum
安裝完成后可以用
geth version
來查看是否安裝成功以及版本。
接着進入機器1的工作目錄:
創建簽名賬戶:
geth --datatdir node account new
創建金錢賬戶:
geth --datadir node account new
下面在機器2和3中同樣創建簽名賬戶(POA network需要至少兩個簽名賬戶),方法同上。
利用pupeth構建創世區塊,執行命令:
puppeth
對應部分的問詢分別是:網絡名稱、共識引擎、出塊間隔、簽名賬戶、金錢賬戶與網絡ID。最后導出文件genesis.json,將genesis.json分別拷貝至其他兩台機器對應目錄中。
分別初始化創世區塊:
geth --datadir node init genesis.json
接着利用geth啟動區塊鏈網絡,對應項請參考geth的命令選項。機器1啟動命令為:
geth --datadir node --maxpeers 3 --networkid '9585' --nodiscover --port '30300' --unlock 'd5c8c57d65146ebd3f200d013503409d81a6331e' --password 'node/password.txt' --mine --minerthreads=1 --etherbase=d5c8c57d65146ebd3f200d013503409d81a6331e
機器2和3的啟動命令為:
geth --datadir node --maxpeers 3 --networkid '9585' --nodiscover --port '30300' --unlock 'ebed1888b8d4cdba4c13ae56166d7a26c8118a13' --password 'node/password.txt' --mine --minerthreads=1 --etherbase=ebed1888b8d4cdba4c13ae56166d7a26c8118a13 --rpc --rpcaddr '0.0.0.0' --rpcport '8500' --rpccorsdomain '*' --rpcapi 'personal,eth,net,web3'
賬戶名稱自行替換。出於安全性考慮,金錢賬戶放在機器1中,不開放rpc port。
啟動后進入console控制台:
geth attach ipc://root/testnode/node/geth.ipc
查看此節點的enode信息並記錄。
使用以上方法對分別啟動三台機器后配置static-nodes.json文件用於添加節點,配置完成后如下所示:

[ "enode://9d72cf660257bd9037e1b4c15e614e130a371e41554dac6706be5bccec7496cad43472ae2f1f8ada527a284ad017771b63c739f2ccf34eebd23216df2fd7b6b3@[172.31.118.88]:30300?discport=0", "enode://d88372a5ee836c32194586bdb2cc902e9fffc104b4125c6d2f5c93abadd6f8befccfd9ded87ee7a00d1bbd4e74c1d36bcddd0360274052404afc9e28afc03397@[172.31.118.89]:30300?discport=0", "enode://af2e355a232d7fe1a769fb7a2d4275257a4a87f8de4d8b7bf829ea3523edeabeda196d4c520402dd5e8deacc41ef52c45b26fd3dfa5c9382cd4f77b7b4c9d3d7@[172.31.118.90]:30300?discport=0" ]
將此文件分別放入三台機器的node/文件夾中。然后重新使用geth命令分別啟動三個節點。
最后發現三台機器完美的運行了POA共識的聯盟鏈網絡,接下來我們可以使用各種方式使用區塊鏈來構建自己的DAPP。
最后推薦一種方法使geth后台運行,利用nodejs的pm2工具,將geth命令放在shell中(如start-geth.sh),使用如下方式來快速啟動后台運行的geth:
pm2 start start-geth.sh
並利用pm2的命令對進程進行有效的管理。