substrate学习笔记5:使用substrate构建私有网络

1 环境准备与目标说明

本节中,我们将学习和实现如何使用验证者/授权者集合来启动私有的区块链网络。

在进行本节实验之前,需要准备好已经编译的substrate的最新版本,可以通过第一节(创建一条substrate)来实现。

本节我们将:

  • 基于模板启动substrate区块链网络;
  • 生成ed25519和sr25519 密钥对用于网络授权;
  • 创建和编辑chainspec json文件。

2 使用Alice和Bob启动区块链

在我们自己生成密钥对之前,我们先使用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 生成自己的key

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来进行试验。

4 创建自定义的chain spec

导出本地链规范:

# 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 创建私有网络

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

此步骤和第一个节点中一样,添加完即可。

6 参考资料

substrate.dev/docs/en/tutorials/st...

本作品采用《CC 协议》,转载必须注明作者和本文链接
令狐一冲
讨论数量: 1

提个问题:ed25519 和 sr25519 用在哪里?我知道是用在后文,后文那个位置?

11个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
255
粉丝
120
喜欢
308
收藏
128
排名:335
访问:2.8 万
私信
所有博文
社区赞助商