# 平行链上线技术系列三 -Rococo local and public test network

By [DAOrayaki](https://paragraph.com/@daoctor) · 2022-07-18

---

引言
--

本文首先介绍在Rococo本地的测试流程，最后介绍rococo 线上测试parachain的流程

Rococo local test network中测试parachain
-------------------------------------

### Start Relaychain(Local Rococo relaychain)

准备 rococo-local-cfde.json

以下命令是在 polkadot 目录下操作的，这里切换分支到 v0.9.16,然后编译 cargo build --release

编译完成后，在polkadot目录下执行：

![](https://storage.googleapis.com/papyrus_images/b4ff6862898ceaa3c34e886f51a70f0f76384abc165080b5d0812febda202cc5.png)

### 启动parachain

### 生成parachain的 chain spec

![](https://storage.googleapis.com/papyrus_images/7e2fdd9a2662ef84f973c2d9ea046fc320cc1289df8dcaedecb0301b666c5ab9.png)

如果需要修改paraId,可以修改rococo-local-parachain-plain.json文件

这里修改为: 2052

![](https://storage.googleapis.com/papyrus_images/4144e40169cf4dddd207c48b4d742b76baeadc6f25028492ae03e2297a75c6ea.png)

### 生成修改后的paraId的chainspec文件

![](https://storage.googleapis.com/papyrus_images/83208da8ebd10bf983948934848fa4fb9d7eca54da3c17889e231ba8c137f0db.png)

### 生成wasm文件

![](https://storage.googleapis.com/papyrus_images/6c5eecd2579b8643493e6be973d968e00a225958236ce2a588eab3b250256cea.png)

### 生成genesis state文件

![](https://storage.googleapis.com/papyrus_images/311cf08b75c2bc9579887d5aebe154c3b44c1a690406b31415a676e98592e01b.png)

### 启动本地collator节点

![](https://storage.googleapis.com/papyrus_images/396db3f8e385d3f7ce951d09b1039dfbde38ab4128bc761be496b6b06d2e0bd1.png)

然后在打开本地的relaychain的polkadot-js的前端界面，注册parachain，上传Wasm和genesis state 参考：[https://docs.substrate.io/tutorials/v3/cumulus/connect-parachain/](https://docs.substrate.io/tutorials/v3/cumulus/connect-parachain/)

Rococo live test network中测试parachain 比如，上面我们已经注册了parachain 2052,那么我们就可以在rococo公开测试网上测试我们的Parachain了。

步骤:

1、在 rococo public test network 注册一个paraId

![](https://storage.googleapis.com/papyrus_images/bd07017657f6794e2e8c63128a3662880bdeb031e2f0da3ce362a9f50f76f2bc.png)

2、通过这个ParaId（这里选择自己已经注册的一个Id，我这里选自己注册的2052）以及之前我们本地生成的genesis state和wasm文件来注册parathread

![](https://storage.googleapis.com/papyrus_images/858f8c416a9e06fbd17edc34fa9ca057db69a552996db47c5f3dae264d4f24ce.png)

3、当注册成为一个parathread后，我们可以看到parathread处于onboarding状态。此时，我们就可以申请成为平行链了，可以联系Parity官方的人进行操作，在element频道

4、如果官方的人将Parathread升级为parachain后，我们就可以开始本地启动平行链进行测试，是否能链接到rococo live且正常出块。

（1）首先，启动Live模式的parachain，这里有两种方式：

第一种：修改parachain链的chainspec文件，以命令行的方式进行指定Live启动

第二种：通过json文件的形式，由于我们之前已经在本地生成了rococo-local-parachain-2052-raw.json 这个文件，我们只需要修改其中的一些参数（目前很多项目方使用较为普遍的方式，而且操作简单）

![](https://storage.googleapis.com/papyrus_images/de1ecd45ba543a814ff342c470aab234f83859555430bae5a0be64a48a785eaa.png)

主要修改字段为：

chainType：需要将Local修改为Live, relay\_chain：修改为rococo para\_id：需要与我们在rococo live上注册的parachainId保持一致 其他的字段看自己需要进行修改，也可不修改

这里值得一提的就是bootNodes字段，这个字段在自己首次本地启动的时候无需进行配置，但是如果你的平行链已经上线并且需要给其他用户加入的话，这里就需要进行配置引导节点。

（2）获取当前需要连接的rococo live的chain spec文件

笔者此时的rococo live的runtime版本为polkadot-v0.9.16，所以我们从polkadot上获取到rococo的chain spec文件 ，放在我们的parachain目录下

注意，我们的parachain live的runtime版本必须要和当前rococo live的版本一致

（3）一切准备就绪后（准备好parachain live的chain spec文件和rococo live 的chain spec文件），我们就可以启动我们本地的平行链，准备连接到rococo live进行parachain出块测试了

注意，下面的base path我们需要预留至少12G的空间(以当前时间为2022-02-20来计算的话)，否则空间不够拉取rococo的区块

![](https://storage.googleapis.com/papyrus_images/ec7028afe031f801be5a902fcaed98fa05cec312d8c9a8aaee0dd216a997e9bb.png)

在启动上述命令后，我们可以看到Log里会同步rococo的区块，整个过程大概耗时2小时左右，等待全部同步完毕后，我们的Parachain就会正常出块了～。

查看rococo test network可以看到：

![](https://storage.googleapis.com/papyrus_images/d5058e41e0b4acf3c171f23e3ec44b2c1b08e12faf3d8a77b395a8b8fc5663da.png)

打开本地8844端口可以看到parachain已经可以正常出块了，这里我已经出到204个块.....

![](https://storage.googleapis.com/papyrus_images/78936b609f12a814a08044a4ec2d2ff2b259df2d85bd06e57b0d471655673a2c.png)

至此，rococo live测试结束～

Rococo live 部署注意事项：

1、如果出现以下问题:

![](https://storage.googleapis.com/papyrus_images/69d19cd924aa152fae2463f10b684a3442471b787ab074a76d0d9b5052107aa5.png)

这种是由于使用的rococo live的json文件和当前rococo live版本不一致导致的，比如使用的是polkadot-0.9.13的live文件，然而当前rococo live版本为polkadot-v0.9.16

2、同步中继链区块错误：

![](https://storage.googleapis.com/papyrus_images/7b588aece573e264f4312f4b472012d068cc0371ed312fad2c3e84a1c8bd90a6.png)

这里是由于我们live Parachain的版本和rococ live不一致

3、在将pallet版本从polkadot-v0.9.13升级到polkadot-v0.9.16时，出现一些pallet宏功能无法使用问题

（1）pallet Struct的宏问题

![](https://storage.googleapis.com/papyrus_images/fadaadb7c8c399f2068aab0c7d13243ac88820c778ef39aa121352461b7f0c88.png)

当前polkadot-v0.9.16版本中，Pallet结构体上需要加上#\[pallet::without\_storage\_info\]

（2）pallet storage问题

当前polkadot-v0.9.16版本中，我们在使用StorageMap这个存储结构的时候，如果我们的存储结构中涉及到AccountId需要使用OptionQuery的方式，而非之前的ValueQuery，因为在官方移除了对于AccountId的default处理，所以我们就需要使用Option的方式处理空值None。对应的咱们的pallet就需要进行重构，并对None进行处理，杜绝Runtime出现这种异常。

4、在同步rococo live的区块时，出现以下错误，并且可以看到一直拉取不到最新的区块（本地同步的区块始终低于最新区块高度）

![](https://storage.googleapis.com/papyrus_images/a394d8ef735e8c4f109bff73cf237bbc988fb15948f0ae4604fff0b9445b353d.png)

这里是由于本地机器时间不同步，使用ntp同步即可

![](https://storage.googleapis.com/papyrus_images/eb096ba858698d3c2cd4c7b513dce99b7c51c8d256a511f639a5d0867c8524f8.png)

* * *

通过 DAO，研究组织和媒体可以打破地域的限制，以社区的方式资助和生产内容。DAOrayaki将会通过DAO的形式，构建一个代表社区意志并由社区控制的功能齐全的去中心化媒体。欢迎通过文末方式提交与DAO、量子计算、星际移民、DA相关的内容，瓜分10000USDC赏金池！欢迎加入DAOrayaki社区，了解去中心化自治组织（DAO），探讨最新话题！

官方网站：[https://daorayaki.org](https://daorayaki.org)

Media：[https://media.daorayaki.org](https://media.daorayaki.org)

Discord server: [https://discord.gg/wNUPmsGsa4](https://discord.gg/wNUPmsGsa4)

Medium: [https://medium.com/@daorayaki](https://medium.com/@daorayaki)

Email: [daorayaki@dorafactory.org](mailto:daorayaki@dorafactory.org)

Twitter: @daorayaki\_

微信助手：DAOrayaki-Media

![](https://storage.googleapis.com/papyrus_images/db31d6ea9df14ee2bb82151dbc0ffbfddf1fc80a050bd5b9f9aa9d6c320a1f8f.png)

---

*Originally published on [DAOrayaki](https://paragraph.com/@daoctor/rococo-local-and-public-test-network)*
