這里分享的是關於在是在私有鏈中,用一台電腦去創建多個節點,並進行節點鏈接
1. 准備創世塊文件
自己創建一個創世塊文件或是稱為根節點是為了區分公有鏈和私有鏈。同一個網絡下只有一個創世塊,而且只有處於相同的創世塊才可以正常進行通信。創世塊文件是一個json文件。格式如下:
{ "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x0", "gasLimit": "0x80000000", "difficulty": "0x1", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { } }
其中:
nonce: 64位隨機數,用於合格區塊的判斷
timestamp:創世塊的時間戳
parentHash: 上一個節點的hash值,由於是創世塊,為第一個節點,所以他不存在parent節點
extraData:附加信息,可以加入個性信息等
gasLimit: gas消耗總量限制,限制區塊能包含的交易信息總和
difficulty: 區塊難度,如果這個值設置的越大,挖礦就越難
mixhash:與nonce配合使用,用於挖礦
coinbase:礦工的賬號信息
alloc:用於預置賬號和賬號的以太幣數量
首先,創建一個genesis.json 文件。然后把上面的內容復制,根據自己的需求修改相應的參數。
cd到這個json所在的目錄,運行:
geth --datadir "node1/" init genesis.json
運行之后,會在該目錄下生成一個node1的文件夾,同時在node1文件夾下生成geth 和 keystore兩個文件夾。keystore里存放的就是你后續創建賬號的信息
2. 啟動節點
初始化節點后,需要啟動這個節點。
geth --identity "node1" --rpc --rpcport 8000 --rpccorsdomain "*" --datadir "./" --port 30303 --rpcapi "db,eth,net,web3" --networkid 999 console 2>>geth.log
這里就啟動了改節點,默認的啟動端口是 30303.啟動之后,輸入admin.nodeInfo 查看節點信息:
{ enode: "enode://2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a@[::]:30303?discport=0", id: "2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a", ip: "::", listenAddr: "[::]:30303", name: "Geth/v1.5.9-stable-a07539fb/darwin/go1.8", ports: { discovery: 0, listener: 30303 }, protocols: { eth: { difficulty: 1, genesis: "0x6099b65e564bd511f49e8f39ba27b6a68b6b78fd1481592257f06bbf93abe624", head: "0x6099b65e564bd511f49e8f39ba27b6a68b6b78fd1481592257f06bbf93abe624", network: 1 } } }
enode里就是節點的address
3. 創建第二個節點
單獨的一個節點,是可以創建不同的賬號的,之后可以用不同的賬號進行交易。如果要實現多個節點,那就需要再重新創建節點。
1) cd 到 genesis.json 目錄下
2) 運行 同樣的初始化命令
geth --datadir "node2/" init genesis.json
3) 用下面的命令啟動第二個節點
geth --identity "node2" --rpc --rpcport 8001 --rpccorsdomain "*" --datadir "./" --port 30306 --rpcapi "db,eth,net,web3" --networkid 999 console 2>>geth.log
rpc端口和節點端口都要和第一個節點不同,節點端口默認的port是 30303,rpc端口默認為8545,如果node2節點的rpc端口或是節點端口采樣默認值,就會出現端口被第一個占用的情況。
4. 把兩個節點連接起來
通過admin.addPeer(“節點的enode”)添加。如上面第一個節點和第二個節點連接
admin.addPeer("enode://2ef126e63de43500ae36fd1783251919a1f94ce0a3ee79d008530750efc3a19962f6c06cb92c397586d41a444fd1667190acf035e3a45c816fe0a4b904b9727a@[::]:30303?discport=0")
控制台會返回一個true
這個時候,隨便在哪個節點的控制台上,輸入 admin.peers 就可以查看鏈信息了
5.驗證是否連接成功
隨便在哪個節點上進行挖礦操作,看另外一個節點是否會同步信息。比如我這里再第一個節點上進行挖礦操作。注意:要進行挖礦一定要先有賬號。我們上面提到的所有的操作都只是節點操作,沒有涉及到賬號的操作。
首先用命令創建一個賬號:
personal.newAccount("xxx")
xxx是表示該賬號的密碼,后面再進行交易的時候需要用到。
創建賬號后,就可以進行挖礦處理了。
miner.start()
在挖礦的過程中如何查看是否有進行同步操作呢?
在第一個挖礦的期間,cd到第二個節點目錄下,執行
tail -f geth.log
在控制台上你如果看到block信息不斷的更新,那就說明連接成功了。
注意:這里的創世塊文件一定要用同一個,否則addPeer雖然返回成功,但是admin.peers查看是沒有的。
歡迎大家關注微信號:蝸牛講技術。掃下面的二維碼