substrate学习笔记13:连接parachain

1 说明

上一节,我们启动了relaychain的节点,本节将连接parachain到relaychain节点。

主要包括以下内容:

  • 启动parachain;
  • parachain注册;
  • 和parachain交互;
  • 连接到添加的parachain节点。

2 launch一个parachain

这里注意,需要先把relay chain的两个节点先起起来,具体的看上一节,启动relay chain。

2.1 保留para ID

要连接到任何relaychain,都必须为平行链保留一个para ID。relay chain负责分配para ID。在本练习中,我们将保留一个para ID病通过polkadot-js app连接到本地relay chain。

我们打开polkato-js apps(地址:https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/parachains/parathreads),然后选择parathreads,点击加号,添加para ID,点击提交(此处我们使用默认的2000)。

2.2 配置para chain

2.2.1 定制parachain的chain spec

打开para chain node的目录(即substrate-parachain-template目录下),执行如下命令:

./target/release/parachain-collator build-spec --disable-default-bootnode > rococo-local-parachain-plain.json

生成chain spec,然后修改其中的”para_id”和”parachainId”为2000.然后再执行如下命令,生成新的raw格式的chainspec:

./target/release/parachain-collator build-spec --chain rococo-local-parachain-plain.json --raw --disable-default-bootnode > rococo-local-parachain-2000-raw.json

2.2.2 获取wasm运行时验证函数

relayer chain需要特定于parachain的运行时验证逻辑来验证parachain的区块。parachain的collator节点有一个命令来生成这个wasm blob,如下:

./target/release/parachain-collator export-genesis-wasm --chain rococo-local-parachain-2000-raw.json > para-2000-wasm

2.2.3 生成parachain的genesis状态

为了注册parachain,relayer chain需要知道parachain的genesis状态。collator节点能够导出state到文件中,命令如下:

./target/release/parachain-collator export-genesis-state --chain rococo-local-parachain-2000-raw.json > para-2000-genesis

2.3 启动一个collator节点

启动的命令如下:

./target/release/parachain-collator \
--alice \
--collator \
--force-authoring \
--chain rococo-local-parachain-2000-raw.json \
--base-path /tmp/parachain/alice \
--port 40333 \
--ws-port 8844 \
-- \
--execution wasm \
--chain <relay chain raw chain spec> \  #此处注意,是relay chain目录下的raw chain spec
--port 30343 \
--ws-port 9977

启动成功后,可以看到如如下的打印:

...
2022-02-27 15:35:00 [Relaychain] 💤 Idle (2 peers), best: #113 (0x88d551b4), finalized #111 (0x3a691e18),24.5kiB/s ⬆ 3.4kiB/s    
2022-02-27 15:35:00 [Parachain] 💤 Idle (0 peers), best: #0 (0x5ca9…e641), finalized #0 (0x5ca9…e641),2.0kiB/s ⬆ 1.7kiB/s    
2022-02-27 15:35:05 [Relaychain] 💤 Idle (2 peers), best: #113 (0x88d551b4), finalized #111 (0x3a691e18),1.1kiB/s ⬆ 0.7kiB/s    
2022-02-27 15:35:05 [Parachain] 💤 Idle (0 peers), best: #0 (0x5ca9…e641), finalized #0 (0x5ca9…e641),0.2kiB/s ⬆ 0.2kiB/s    
2022-02-27 15:35:10 [Relaychain] 💤 Idle (2 peers), best: #113 (0x88d551b4), finalized #111 (0x3a691e18),0.9kiB/s ⬆ 0.6kiB/s    
2022-02-27 15:35:10 [Parachain] 💤 Idle (0 peers), best: #0 (0x5ca9…e641), finalized #0 (0x5ca9…e641),00    
2022-02-27 15:35:15 [Relaychain] 💤 Idle (2 peers), best: #113 (0x88d551b4), finalized #111 (0x3a691e18),0.7kiB/s ⬆ 0.7kiB/s    
2022-02-27 15:35:15 [Parachain] 💤 Idle (0 peers), best: #0 (0x5ca9…e641), finalized #0 (0x5ca9…e641),0.2kiB/s ⬆ 0.2kiB/s    
...

但是可以看到,parachain此时还没有产生区块。

3 parachain注册

3.1 使用sudo注册

我们现在注册parachain到relay chain上。在生产网络中,通常是通过拍卖进行的,在本教程中,我们使用sudo来进行。

3.2 注册交易

我们通过两种方式来注册交易。

3.2.1 paraSudoWrapper.sudoScheduleParaInitalize

该选项完全绕过插槽租用机制,为下一个中继链会话启动的保留paraID装载parachain或parathread。这是进行测试最简单、最快的方法。但需要注意的是,在下一个时段,parachain也将自动关闭,没有租约的parachain将降级为parathreads,因此下一个插槽结束时段,请确保根据需要重新注册。步骤如下:

  • polkadot js apps,连接到relay chain;
  • 选择Developer->sudo;
  • 选择paraSudoWrapper -> sudoScheduleParaInitialize(id, genesis);
  • 在交易中:
    1、将```id:ParaId```设置为20002```genesisHead```:上传文件para-2000-genesis;
    3```validationCode```:上传文件para-2000-wasm
    4、设置```parachain:Bool```为yes。

3.2.2 slots.forceLease

步骤如下:

  • 打开polkadot-js-app,连接到relay chain;
  • 选择Developer->sudo;
  • 选择slots->forceLease(para, leaser, amount, period_begin, period_end)

3.3 区块生成

上面的步骤完成后,parachain将产生区块,但是值得注意的是,需要等到relay chain下一个epoch开始的时候才会产生。

4 和parachain交互

在浏览器打开此地址连接ui:polkadot.js.org/apps/?rpc=ws%3A%2F...

然后可以和parachain进行交互。

5 chain purging

要清除所有的数据,可以用如下命令:

# Purge the collator(s)
./target/release/parachain-collator purge-chain\
  --base-path <your collator DB path set above>

# Purge the validator(s)
polkadot purge-chain\
  --base-path <your relay chain DB path set above>

6 添加其它的parachain节点

添加collator节点,命令如下:

./target/release/parachain-collator \
--bob \
--collator \
--force-authoring \
--chain rococo-local-parachain-2000-raw.json \
--base-path /tmp/parachain/bob \
--bootnodes <a running collator node> \
--port 40334 \
--ws-port 9946 \
-- \
--execution wasm \
--chain <relay-chain chain spec> \
--port 30344 \
--ws-port 9978
--bootnodes <other relay chain node>

7 参考文档

docs.substrate.io/tutorials/v3/cum...

8 源码

github.com/anonymousGiga/substrate...

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

令狐大佬你好,在注册parachain到relaychain的时候,gensis.json 以及runtime.wasm 都通过polkadot.js 上传了,但是在提交消息的时候显示。 也去尝试使用 sudo -> SudoUncheckWeight 的方式调用 该方法,依旧是这样的问题,请问有什么方法可以解决这个问题吗?

file

4周前 评论
linghuyichong (楼主) 4周前

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