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 协议》,转载必须注明作者和本文链接
提个问题:ed25519 和 sr25519 用在哪里?我知道是用在后文,后文那个位置?