substrate cumulus

简介

Cumulus是 Substrate 的扩展,它可以轻松地将任何 Substrate 构建的运行时变成与 Polkadot 兼容的平行链。

Cumulus Consensus 是遵循 Polkadot 中继链(即平行链)的 Substrate 共识引擎。这会在内部运行一个 Polkadot 节点,并指示客户端和同步算法遵循、最终确定和视为正确的链。

Cumulus 仍在开发中,但其想法是采用 Substrate 链并通过导入 crate 并添加一行代码来添加平行链代码应该很简单

构建中继节点

git clone https://github.com/paritytech/polkadot.git
cd polkadot
git checkout v0.9.10
cargo build --release
./target/release/polkadot --help

如果打印出帮助页面,则您已成功构建 Polkadot 节点。

构建平行链模板

git clone https://github.com/substrate-developer-hub/substrate-parachain-template
cd substrate-parachain-template
git checkout polkadot-v0.9.10
cargo build --release
./target/release/parachain-collator --help

如果打印了帮助页面,您就成功构建了一个基于 Cumulus 的平行链collator。

平行链模板与节点模板的差异

熟悉 Substrate Node Template 的 Substrate 开发人员会发现 Substrate Parachain Template 很熟悉

  • 平行链模板运行时(runtime/Cargo.toml) 已集成 parachain-info 组件,将有关平行链注册的信息注入其自己的运行时
  • register_validate_block! 宏.每个平行链必须validate_block在注册时向中继链提供一个函数,表示为一个 Wasm blob,节点模板不提供此功能,但平行链模板提供
  • 平行链无GRANDPA组件.因为平行链遵循中继链的确定性
  • collator服务(node/src/service.rs) 与 节点模板完全不同

启动中继链

启动Alice Validator

生成配置

./target/release/polkadot build-spec --chain rococo-local --raw --disable-default-bootnode > rococo-custom-2-raw.json

或者直接从这下载

 wget --no-check-certificate https://docs.substrate.io/assets/tutorials/cumulus/chain-specs/rococo-custom-2-raw.json
# Start Relay `Alice` node
./target/release/polkadot \
--alice \
--validator \
--base-path /tmp/relay/alice \
--chain rococo-custom-2-raw.json \
--port 30333 \
--ws-port 9944 \
--unsafe-ws-external \
--unsafe-rpc-external \
--rpc-cors all

当节点启动时,您将看到几条日志消息。记下 日志中节点的peer ID。将其他节点连接到它时,我们将需要它。它看起来像这样:

🏷 Local node identity is: 12D3KooWQF568XjiFN7oB3DwydST2dfiVHQtYBCe8geVPq9fLDVY

启动Bob Validator

如果是同一台机器 可以省略bootnodes, 默认开启mDNS会自动发现

# Start Relay `bob` node
./target/release/polkadot \
--bob \
--validator \
--base-path /tmp/relay/bob \
--chain rococo-custom-2-raw.json \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWQF568XjiFN7oB3DwydST2dfiVHQtYBCe8geVPq9fLDVY \
--port 30334 \
--ws-port 9945 \
--unsafe-ws-external \
--unsafe-rpc-external \
--rpc-cors all

启动平行链

启动polkdot-js

docker run -d --name polkadot-ui \
-e WS_URL=ws://yourid:9944 \
-p 80:80 jacogr/polkadot-js-apps:latest

远程访问节点需要开启 ws-external和rpc-cors
打开浏览器,检查url是否配置正确,信息是否正常显示
在这里插入图片描述

预留para ID

点击网络-〉平行链-〉parathreads
在这里插入图片描述
点击paraId,并提交
在这里插入图片描述
中继链负责分配所有 para ID,ID从2000开始递增

为中继链指定平行链

根据具保留的 para ID (para ID 2000)的 Parachain 模板生成一些文件。

  1. 生成平行链创世状态
    要注册平行链,中继链需要知道平行链的 创世状态。collat​​or 节点可以将该状态导出到文件中。转到您的平行链模板文件夹,以下命令将创建一个文件,其中包含平行链的整个创世状态,十六进制编码
cd substrate-parachain-template/
./target/release/parachain-collator export-genesis-state --parachain-id 2000 > para-2000-genesis
  1. 获取 Wasm 运行时验证功能
    继链还需要特定于平行链的运行时验证逻辑来​​验证平行链块。平行链 collat​​or 节点还有一个命令来生成这个 Wasm blob:
./target/release/parachain-collator export-genesis-wasm > para-2000-wasm

启动collactor节点

需指定parachain-id 2000 和 chain spec文件(和中继链同一个文件)

./target/release/parachain-collator \
--alice \
--collator \
--force-authoring \
--parachain-id 2000 \
--base-path /tmp/parachain/alice \
--port 40333 \
--ws-port 8844 \
--unsafe-ws-external \
--unsafe-rpc-external \
--rpc-cors all \
-- \
--execution wasm \
--chain ../polkadot/rococo-custom-2-raw.json \
--bootnodes /ip4/127.0.0.1/tcp/30333/p2p/12D3KooWQF568XjiFN7oB3DwydST2dfiVHQtYBCe8geVPq9fLDVY \
--port 30343 \
--ws-port 9977 \
--unsafe-ws-external \
--unsafe-rpc-external \
--rpc-cors all 

平行链 collat​​or 包含实际的 collat​​or 节点和嵌入式中继链节点。–之前的参数用于collator,–之后的参数用于嵌入式中继链节点。

你的collator日志应该如下:

2021-10-25 12:01:42 Parachain Collator Template
2021-10-25 12:01:42 ✌️  version 3.0.0-8c36ad6-x86_64-linux-gnu
2021-10-25 12:01:42 ❤️  by Anonymous, 2017-2021
2021-10-25 12:01:42 📋 Chain specification: Local Testnet
2021-10-25 12:01:42 🏷 Node name: Alice
2021-10-25 12:01:42 👤 Role: AUTHORITY
2021-10-25 12:01:42 💾 Database: RocksDb at /tmp/parachain/alice/chains/local_testnet/db
2021-10-25 12:01:42 ⛓  Native runtime: template-parachain-1 (template-parachain-0.tx1.au1)
2021-10-25 12:01:44 Parachain id: Id(2000)
2021-10-25 12:01:44 Parachain Account: 5Ec4AhPUwPeyTFyuhGuBbD224mY85LKLMSqSSo33JYWCazU4
2021-10-25 12:01:44 Parachain genesis state: 0x000000000000000000000000000000000000000000000000000000000000000000b7ab733934d8fb89df8c6baad66bbaf69952df3787b89ae8ce3be1e6c6abc6f303170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131400
2021-10-25 12:01:44 Is collating: yes
2021-10-25 12:01:44 [Parachain] 🔨 Initializing Genesis block/state (state: 0xb7ab…c6f3, header-hash: 0xf10e…c450)
2021-10-25 12:01:46 [Parachain] ⏱  Loaded block-time = 12s from block 0xf10ecef6d029682442f96790488bbae6f336a580c18a455fdc3e83f680e6c450
2021-10-25 12:01:47 [Relaychain] 🔨 Initializing Genesis block/state (state: 0xd628…09ce, header-hash: 0x59a3…d8a4)
2021-10-25 12:01:47 [Relaychain] 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.
2021-10-25 12:01:50 [Relaychain] ⏱  Loaded block-time = 6s from block 0x59a303460528b1113ebc876aedd5158843a8e33bc4d3cd663d64f3d01f10d8a4
2021-10-25 12:01:50 [Relaychain] 👶 Creating empty BABE epoch changes on what appears to be first startup.
2021-10-25 12:01:50 [Relaychain] 🏷 Local node identity is: 12D3KooWAPy8Moc5JoF6EwmDvUxuDMpjEwf9aE21azSwSkhRhatA
2021-10-25 12:01:50 [Relaychain] 📦 Highest known block at #0
2021-10-25 12:01:50 [Relaychain] 〽️ Prometheus exporter started at 127.0.0.1:9616
2021-10-25 12:01:50 [Relaychain] Listening for new connections on 127.0.0.1:9977.
2021-10-25 12:01:50 [Relaychain] 🖇️ Connecting all Handles to Overseer
2021-10-25 12:01:50 [Parachain] Using default protocol ID "sup" because none is configured in the chain specs
2021-10-25 12:01:50 [Parachain] 🏷 Local node identity is: 12D3KooWG1YYXRfzu2swrycyZx7WhfsjP9k9QqrCym2wXSNMDnVW
2021-10-25 12:01:50 [Parachain] 📦 Highest known block at #0
2021-10-25 12:01:50 [Parachain] Listening for new connections on 127.0.0.1:8844.
2021-10-25 12:01:50 [Parachain] 🔍 Discovered new external address for our node: /ip4/192.168.130.11/tcp/40333/p2p/12D3KooWG1YYXRfzu2swrycyZx7WhfsjP9k9QqrCym2wXSNMDnVW
2021-10-25 12:01:50 [Relaychain] 🔍 Discovered new external address for our node: /ip4/192.168.130.11/tcp/30343/ws/p2p/12D3KooWAPy8Moc5JoF6EwmDvUxuDMpjEwf9aE21azSwSkhRhatA
2021-10-25 12:01:54 [Relaychain] ✨ Imported #203 (0x0346…64c5)
2021-10-25 12:01:54 [Relaychain] Advanced session window for approvals update=Advanced { prev_window_start: 0, prev_window_end: 0, new_window_start: 15, new_window_end: 20 }
2021-10-25 12:01:55 [Relaychain] 💤 Idle (2 peers), best: #203 (0x0346…64c5), finalized #200 (0x061c…f301), ⬇ 42.5kiB/s ⬆ 4.0kiB/s
2021-10-25 12:01:55 [Parachain] 💤 Idle (0 peers), best: #0 (0xf10e…c450), finalized #0 (0xf10e…c450), ⬇ 1.9kiB/s ⬆ 1.6kiB/s
2021-10-25 12:01:58 [Relaychain] 👴 Applying authority set change scheduled at block #201
2021-10-25 12:01:58 [Relaychain] 👴 Applying GRANDPA set change to new set [(Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), 1), (Public(d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69 (5GoNkf6W...)), 1)]
2021-10-25 12:02:00 [Relaychain] ✨ Imported #204 (0xb45a…f2ee)
2021-10-25 12:02:00 [Relaychain] 💤 Idle (2 peers), best: #204 (0xb45a…f2ee), finalized #201 (0x4dbc…121a), ⬇ 1.5kiB/s ⬆ 0.7kiB/s
2021-10-25 12:02:00 [Parachain] 💤 Idle (0 peers), best: #0 (0xf10e…c450), finalized #0 (0xf10e…c450), ⬇ 0.2kiB/s ⬆ 0.2kiB/s
2021-10-25 12:02:05 [Relaychain] 💤 Idle (2 peers), best: #204 (0xb45a…f2ee), finalized #202 (0x72f8…2af9), ⬇ 1.1kiB/s ⬆ 0.7kiB/s
2021-10-25 12:02:05 [Parachain] 💤 Idle (0 peers), best: #0 (0xf10e…c450), finalized #0 (0xf10e…c450), ⬇ 0 ⬆ 0

平行链尚未开始出块。当collactor在中继链上实际注册 出块将开始。

用polkatdot-js连接 8844 (collactor节点 ws端口)

在这里插入图片描述
用polkatdot-js连接 9977 (嵌入式中继链 ws端口)
在这里插入图片描述
可以发现 这个就是中继链的最新区块

平行链注册

注册使用 sudo

我们已经启动了中继链,并且我们的平行链collactor已准备就绪。现在我们必须在中继链上注册平行链。在生产网络中,这通常通过平行链拍卖. 但是对于本教程,我们将通过sudo调用来完成。

注册交易

  1. 去 polkatdot-js应用程序 UI,连接到您的中继链。

  2. 通过转到Developer->sudo页面

  3. 选择paraSudoWrapper->sudoScheduleParaInitialize(id, genesis)如下所示。
    在这里插入图片描述

  4. 填写参数

  • id: ParaId为 2,000
  • genesisHead:上传文件para-2000-genesis(来自上一步)
  • validationCode:上传文件para-2000-wasm(来自上一步)
  • parachain: Bool选项设置为Yes。
    点击提交sudo,如果成功,此调度将发出sudo.Sudid事件,可在中继链浏览器页面中查看。
    在这里插入图片描述
    这时打开 网络->平行链 将会看到
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值