substrate學習筆記5:使用substrate構建私有網路

linghuyichong發表於2022-03-21

本節中,我們將學習和實現如何使用驗證者/授權者集合來啟動私有的區塊鏈網路。

在進行本節實驗之前,需要準備好已經編譯的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 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章