本節中,我們將學習和實現如何使用驗證者/授權者集合來啟動私有的區塊鏈網路。
在進行本節實驗之前,需要準備好已經編譯的substrate的最新版本,可以透過第一節(建立一條substrate)來實現。
本節我們將:
- 基於模板啟動substrate區塊鏈網路;
- 生成ed25519和sr25519 金鑰對用於網路授權;
- 建立和編輯chainspec json檔案。
在我們自己生成金鑰對之前,我們先使用substrate預設的預定義的local規範來學習,該規範中包含兩個預定義的金鑰,分別是Alice和Bob。
2.1 啟動Alice
在啟動alice所代表的節點之前,我們先清楚歷史資料,命令如下:
#清楚歷史資料
./target/release/node-template purge-chain --base-path /tmp/alice --chain local
然後我們啟動節點alice:
# Start Alice's node
./target/release/node-template \
--base-path /tmp/alice \
--chain local \
--alice \
--port 30333 \
--ws-port 9945 \
--rpc-port 9933 \
--node-key 0000000000000000000000000000000000000000000000000000000000000001 \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
--validator
2.2 啟動Bob
清除歷史資料:
./target/release/node-template purge-chain --base-path /tmp/bob --chain local
啟動節點:
./target/release/node-template \
--base-path /tmp/bob \
--chain local \
--bob \
--port 30334 \
--ws-port 9946 \
--rpc-port 9934 \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
--validator \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWEyoppNCUx8Yx66oV9fJnriXwCcXwDDUA2kj6vnc6iDEp
3.1 方法1:使用subkey
subkey是substrate中生成key的工具。
編譯subkey命令如下(注意是在substrate目錄下):
cargo build -p subkey --release
生成sr25519 key如下:
subkey generate --scheme sr25519
生成ed25519 key命令如下:
subkey inspect --scheme ed25519 "infant salmon buzz patrol maple subject turtle cute legend song vital leisure"
3.2 使用Polkadot-js
直接在介面上操作
3.3 使用預生成的key
我們同樣也可以使用預生成的key,本節中我們主要使用預生成的key來進行試驗。
匯出本地鏈規範:
# Export the local chain spec to json
./target/release/node-template build-spec --disable-default-bootnode --chain local > customSpec.json
修改鏈規範檔案:
{
//-- snip --
"genesis": {
"runtime": {
"frameSystem": {
//-- snip --
},
"palletAura": {
"authorities": [
"5FfBQ3kwXrbdyoqLPvcXRp7ikWydXawpNs2Ceu3WwFdhZ8W4",
"5EhrCtDaQRYjVbLi7BafbGpFqcMhjZJdu8eW8gy6VRXh6HDp"
]
},
"palletGrandpa": {
"authorities": [
["5G9NWJ5P9uk7am24yCKeLZJqXWW6hjuMyRJDmw4ofqxG8Js2", 1],
["5CRZoFgJs4zLzCCAGoCUUs2MRmuD5BKAh17pWtb62LMoCi9h", 1]
]
},
//-- snip --
}
}
}
將修改後的chain spec轉換成raw格式的:
./target/release/node-template build-spec --chain=customSpec.json --raw --disable-default-bootnode > customSpecRaw.json
最後,我們在啟動每個節點的時候都使用此chain spec。
5.1 啟動bootnode
- 啟動第一個節點
清除歷史資料:
# purge chain (only required for new/modified dev chain spec)
./target/release/node-template purge-chain --base-path /tmp/node01 --chain local -y
啟動第一個節點:
# start node01
./target/release/node-template \
--base-path /tmp/node01 \
--chain ./customSpecRaw.json \
--port 30333 \
--ws-port 9945 \
--rpc-port 9933 \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
--validator \
--rpc-methods Unsafe \
--name MyNode01
- 新增key到keystore
此操作需要在每個節點上都進行。
三種方法:
(1)使用Polkadot-JS Apps UI
進入網址: polkadot.js.org/apps/?rpc=ws%3A%2F...
選擇Developer –> RPC Call,然後選擇 “author” 和 “insertKey”操作
對應的埠號要換成節點對應的埠號
(2)使用curl
建立一個json檔案,內容如下:
{
"jsonrpc":"2.0",
"id":1,
"method":"author_insertKey",
"params": [
"<aura/gran>",
"<mnemonic phrase>",
"<public key>"
]
}
然後使用命令如下:
curl http://localhost:9933 -H "Content-Type:application/json;charset=utf-8" -d "@/path/to/file"
(3)使用key命令
# Insert the key from /path/to/key/file into the keystore
# for <aura> key type, default <Sr25519> crypto scheme is applied
./target/release/node-template key insert --base-path /tmp/node01 --chain local --key-type aura --suri /path/to/key/file
# for <gran> key type, need to specify <Ed25519> crypto scheme!
./target/release/node-template key insert --base-path /tmp/node01 --chain local --key-type gran --scheme Ed25519 --suri /path/to/key/file
(4)使用命令檢視設定的key
可以透過如下命令檢視:
ls /tmp/node01/chains/local_testnet/keystore
可以透過如下命令檢視短語:
cat /tmp/node01/chains/local_testnet/keystore/617572619effc1668ca381c242885516ec9fa2b19c67b6684c02a8a3237b6862e5c8cd7e
5.2 啟動第二個節點
- 清除歷史資料
./target/release/node-template purge-chain --base-path /tmp/node02 --chain local -y
- 啟動節點
./target/release/node-template \
--base-path /tmp/node02 \
--chain ./customSpecRaw.json \
--port 30334 \
--ws-port 9946 \
--rpc-port 9934 \
--telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
--validator \
--rpc-methods Unsafe \
--name MyNode02 \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWNew2u3TPDr6dibDgCGem2iz7XyHjEdpZriwH5BbqWjDV
# 上面命令中下面這行一定要填真實的:
# --bootnodes /ip4/<IP Address>/tcp/<p2p Port>/p2p/<Peer ID>
- 新增key到keystore
此步驟和第一個節點中一樣,新增完即可。
substrate.dev/docs/en/tutorials/st...
本作品採用《CC 協議》,轉載必須註明作者和本文連結