5分鐘建立以太坊私有鏈 — 以PoA共識為例 (Part 2)

s0ny
Master’s note
Published in
6 min readMar 25, 2020

在上一章 5分鐘建立以太坊私有鏈 — 以PoA共識為例 (Part 1) 介紹如何創建錢包以及設定私有鏈的設定,不過跟讀者說聲抱歉,我已經換成mac系統來建立私有鏈,但下的指令與Windows差異不大

在這一章會提到如何初始化私有鏈並創建「創世區塊(Genesis Block)」、運行節點、紀錄交易以及挖礦。

首先,我們要先初始化創世區塊,指令如下

geth --datadir node1 init node.json

可以從以上圖片可以看到最大的節點數量、數據庫存放位置以及一些區塊狀態等等。

接下來,我們啟動節點前可以透過go-ethereum所提供的參數,在啟動的時候執行一些指令

geth --datadir node1 --allow-insecure-unlock --nodiscover --syncmode “full” --networkid 7777 --port 30303 --rpc --rpcport 8545 --rpcapi “eth,net,web3” --unlock “f96f9d02cb76cf745d5bd37bd040ac203926f600” --password /Users/wusonglin/node1/password.txt console

datadir:區塊鏈存放位置

allow-insecure-unlock:新版的geth基於安全的考量,停止使用http來解鎖帳戶,但是還是可以透過此指令來解鎖帳戶

nodiscover:取消p2p自動尋找節點的功能

syncmode:同步模式。有三種模式可以選擇,”full”為下載所有區塊的Header與Body,並驗證從創始區塊到現在的區塊的每一個元素;”fast”下載所有區塊的Header與Body,但不做驗證的動作;“light”只下載當前的區塊

networkid:區塊鏈的ID。需要跟區塊鏈設定檔的ID一樣

port:區塊鏈節點的port。預設為30303

rpc:開啟HTTP-RPC。可以進行智能合約的部署(deploy)與呼叫(call)

rpcport:HTTP-RPC的Port。預設為8545

rpcapi:客戶端可連接的應用。包括eth, net, web3等

unlock:解鎖錢包。

password:錢包密碼。在datadir指定的資料夾底下創建一個password文字檔,裡面存放錢包的密碼

console:開啟Javascript的控制台

執行後如下:

執行後,從命令窗上可以看到節點的coinbase、節點資料夾位置以及節點有的模組。為了要確認節點的運行是否正常,我們先發送一筆交易

eth.sendTransaction({from:eth.accounts[0],to:”0x91449c31b4f1b6651Acd4bAe4A2067C009750392",value:web3.toWei(100000,”ether”)});

目前區塊鏈沒有任何的礦工,節點也沒有開啟挖礦的狀態,因此,剛剛的交易還被存放至交易池(txpool)中,尚未被驗證與紀錄。可以使用以下指令看到剛剛的交易狀態

txpool.inspect.pending

所以,我們要讓節點開啟“挖礦(mine)”,輸入以下指令

miner.start()

在啟動後,第一個區塊會把剛剛的交易打包進去

然後使用 miner.stop() 停止挖礦

再次輸入 txpool.inspect.pending 就會發現交易池中已經沒有待驗證的交易

以上是單個節點的運作,我們可以在同一電腦模擬多個節點的連接,方法為開啟新的命令窗創建新的錢包(datadir改為 node2),初始化創世區塊後並運行節點

要進行點對點連接前,要先知道對方的節點位置,使用以下的指令可以查詢

admin.nodeInfo

節點2的位置:enode://2328bde92c70688c4f67b43a8216f724617e74d33643366e7b9a8ea2681a1de157a793f22c9616ace74d5573995bbd974688b4b83a27f44c0f28fcd876886a85@127.0.0.1:30304?discport=0

而節點1的位置:enode://f93730c1ff700bdbdc2645ff4458e432fdd76e4aeba398892f75c61fada285d4e3fb8338b5b6d6f0c907c8e83d60a001a6301b0003ccc5b35e3d75a5889a95b9@127.0.0.1:30303?discport=0

我們在節點2的命令窗打上節點1的位置進行連接

admin.addPeer(“enode://f93730c1ff700bdbdc2645ff4458e432fdd76e4aeba398892f75c61fada285d4e3fb8338b5b6d6f0c907c8e83d60a001a6301b0003ccc5b35e3d75a5889a95b9@127.0.0.1:30303?discport=0”)

成功連接後,節點2會與節點1進行同步

輸入 admin.peers 可以查看節點連接的資訊

如果是外部ip的話,將127.0.0.1改為外部ip即可,port的話與連接節點設定一樣即可。

小結

從Part 1到現在已經完成所有區塊鏈的簡單配置,包括初始化創世區塊、運行節點、發送交易與挖礦以及多個節點連接的設置。最後,目前只有一個打包節點,筆者試圖在節點1提案將節點2成為打包節點,但不知為何無法通過,還在嘗試解決中。

--

--