substrate學習筆記13:連線parachain

linghuyichong發表於2022-04-09

上一節,我們啟動了relaychain的節點,本節將連線parachain到relaychain節點。

主要包括以下內容:

  • 啟動parachain;
  • parachain註冊;
  • 和parachain互動;
  • 連線到新增的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.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開始的時候才會產生。

在瀏覽器開啟此地址連線ui:polkadot.js.org/apps/?rpc=ws%3A%2F...

然後可以和parachain進行互動。

要清除所有的資料,可以用如下命令:

# 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>

新增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>

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

github.com/anonymousGiga/substrate...

本作品採用《CC 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章