substrate基础(10)-启动本地中继链并连接本地平行链

为确保能够稳定启动中继链和平行链,本文指定各自相应版本。

  1. 中继链:polkadot v0.9.24
  2. 平行链:Substrate Parachain Template polkadot-v0.9.24
  3. 前端页面:Polkadot-JS Apps v0.116.2-34

1. 运行中继链

编译并启动alicebob节点

1.1 编译polkadot中继链

1
2
3
4
5
6
7
8
# Clone the Polkadot Repository, with correct version
git clone --depth 1 --branch release-v0.9.24 https://github.com/paritytech/polkadot.git

# Switch into the Polkadot directory
cd polkadot

# Build the relay chain Node
cargo b -r

1.2 制定中继链的配置文件

中继链的验证节点数量必须比平行链的节点数量多一个及以上,也就是本文需要为中继链配置两个验证节点。
官方文档中,为了完成该测试,提供了一个配置文件:官方提供下载配置custom.json
为了以防官方这文档变化,我单独做了备份:本文备份custom.json
其中预置了两个账户:alicebob
将该json文件下载好后,放在指定位置

1.3 启动第一个中继器验证节点(Alice)

1
2
# Start Relay `Alice` node
./target/release/polkadot --alice --validator --base-path ./tmp/relay/alice --chain ./custom.json --port 30333 --ws-port 9944

得到该节点地址:12D3KooWHmheVDMmKwTbofSVwfS6HEQMGtgLzrRTdMzBrXuLndjs

1.4 启动第二个中继器验证节点(bob)

记得将第一个节点的地址添加到bootnodes

1
2
# Start Relay `Alice` node
./target/release/polkadot --bob --validator --base-path ./tmp/relay/bob --chain ./custom.json --bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWHmheVDMmKwTbofSVwfS6HEQMGtgLzrRTdMzBrXuLndjs --port 30334 --ws-port 9945

此时平行链就能正常运转了

2. 运行平行链

2.1 编译平行链

1
2
3
4
5
6
7
8
# Clone the parachain template with the correct Polkadot version
git clone --depth 1 --branch polkadot-v0.9.24 https://github.com/substrate-developer-hub/substrate-parachain-template

# Switch into the parachain template directory
cd substrate-parachain-template

# Build the parachain template collator
cargo b -r

2.2 预定ParaID(即竞拍卡槽获取ID)

平行链要想连接到指定的中继链,需要支付中继链的token来竞争卡槽,并获取唯一的ID。卡槽是有使用期限的。
本文通过预置配置,默认会申请ParaID2000
这里我使用官方的polkadot-app,依次打开位置:Network->Parachains->选项卡Parathreads,然后点击右上方的+

然后出现如下画面后,直接先后点击提交-签名并提交

至此,申请完毕

2.3 获取并修改默认配置文件

先获取配置

1
2
# Assumes that `rococo-local` is in `node/chan_spec.rs` as the relay you registered with
./target/release/parachain-collator build-spec --disable-default-bootnode > parachain_custom_read.json

打开该配置,更改如下位置:
就是将下方位置1000改为2000

1
2
3
4
"para_id": 2000, // <--- your already registered ID
"parachainInfo": {
"parachainId": 2000 // <--- your already registered ID
},

然后更新转换为链可以加载的文件:

1
./target/release/parachain-collator build-spec --chain parachain_custom_read.json --raw --disable-default-bootnode > parachain_custom_2000.json

中继链需要特定特定的运行时来验证平行链的块,因此上面的parachain_custom_2000.json需要进一步处理,来生成相应的wasm blob,结合命令导出如下:

1
./target/release/parachain-collator export-genesis-wasm --chain ./parachain_custom_2000.json > para-2000-wasm

要注册平行链,中继链需要知道平行链的创世状态。可以将该状态按如下方式导出创世文件:

1
./target/release/parachain-collator export-genesis-state --chain ./parachain_custom_2000.json > para-2000-genesis

生成的这个仅适用于平行链的创世块

2.4 启动平行链

如下,使用了--符号,将中继链和平行链关联注册并启动。第一个chain传入的是平行链的配置,第二个chain传入的是中继链的额配置。包括port和ws-port也同样。

1
./target/release/parachain-collator --alice --collator --force-authoring --chain parachain_custom_2000.json --base-path ./tmp/parachain/alice --port 40333 --ws-port 8844 -- --execution wasm --chain ./custom.json --port 30343 --ws-port 9977

得到:
平行链账号:5Ec4AhPUwPeyTFyuhGuBbD224mY85LKLMSqSSo33JYWCazU4
节点ID:12D3KooWEDJmXrka9vBEvwm9MQDEFntYv45Mo7zJkrbVbcPv82X4

注意:为了确保链运行,还得再启动一条,用不同的端口。别的都一样。

2.5 注册平行链

有两种方式可以完成注册

2.5.1 通过paraSudoWrapper.sudoScheduleParaInitialize完成注册

绕过插槽租赁机制,使用超级管理员账户来操作。也是测试时比较简单的一种方式。但在下一个插槽结束时段,需要重新注册。
打开web app页面,选择"开发者"-“超级管理”,选择paraSudoWrapper.sudoScheduleParaInitialize如下图:

ParaId要设置成2000
导入前面生成的文件,文件位置一定要放对.
然后点击提交,完成注册。

2.5.2 通过slots.forceLease完成注册

也就是正常的插槽拍卖机制注册。

3. 清除

1
2
3
4
5
# Purge the collator(s)
./target/release/parachain-collator purge-chain --base-path ./ tmp

# Purge the validator(s)
polkadot purge-chain --base-path ./tmp

总结

本文通过加入智能合约模块到节点中的流程,来让开发者了解模块功能整合的整体过程,由浅及深。
按照本文流程,每个结果都可以复现的,亲自实现的。

本文编辑完毕

参考

[1] Substrate官方文档

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信