在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
原文作者:PaperMoon团队
适用读者:已经能在本地跑通 Parachain Template,希望进一步把链部署到更接近真实生产的测试网络环境的开发者。
将链部署到测试网是正式上线主网前不可或缺的一环,它能帮助你:
• 在更真实的网络条件下验证平行链功能是否正确
• 验证 collator(出块节点)是否能顺利接入中继链
• 为未来主网部署提前暴露并修复配置、密钥、安全、网络连通性等问题
本文示例以 Paseo 作为 Polkadot 测试网,并演示完整的 Parathread 注册与 collator 启动流程。
准备账户与测试代币(Get Started with an Account and Tokens)
在 Polkadot 测试网上执行任何链上操作,都需要测试代币(PAS)。你可以通过 Polkadot Faucet(水龙头)领取 PAS。
为了存储并使用代币,你需要一个兼容 Polkadot SDK 的钱包。你可以在 Polkadot Wallets 页面查看不同钱包选项,也可以使用 Polkadot.js 浏览器插件(适合开发测试用途)。
⚠️ 警告
开发用密钥与账户绝对不应存放任何真实有价值资产,也不应在生产环境中使用。
本教程使用 Polkadot.js Apps 进行测试网操作。
账户准备步骤
1. 打开 Polkadot.js Apps:Paseo 页面,并连接到 Paseo 测试网。

2. 进入 Accounts 页面:
• 顶部菜单点击 Accounts
• 下拉选择 Accounts

3. 复制你要用于部署平行链的账户地址。

4. 打开 Polkadot Faucet,将地址粘贴到输入框:
• 确认网络为 Paseo
• 点击 Get some PASs

5. 等待几秒钟,你的账户会收到 5000 PAS(原文给出的示例数量)。
预留平行链 ID(Reserve a Parachain Identifier)
在 Paseo 上注册你的平行链之前,必须先预留一个 parachain identifier(ParaId)。系统会分配当前可用的下一个 ID。
预留 ParaId 的步骤
1. 打开 Parachains 页面:
• 顶部菜单点击 Network
• 下拉选择 Parachains

2. 注册 ParaId:
• 选择 Parathreads 标签页
• 点击 + ParaId

3. 检查交易信息并点击 + Submit 提交

示例中,下一个可用的 ParaId 为 4508。
提交交易后,你可以进入 Explorer 标签页,在近期事件中确认出现 registrar.Reserved,表示预留成功。

为 Collator 生成自定义密钥(Generate Custom Keys for Your Collators)
为了安全地部署平行链,你需要为每个 collator(出块节点)生成专用密钥。每个 collator 建议准备两套密钥:
1)账户密钥(Account keys)
用于与网络交互、管理资金等。应当被严格保护,并且不应存在于 collator 节点的文件系统中。
2)会话密钥(Session keys)
用于出块身份识别,存储在平行链 keystore 中,相当于可替换的“热钱包”密钥。如果泄露,攻击者可能伪装你的节点出块,导致资金被惩罚(slashing)。因此建议定期轮换 session keys,并像保护热钱包一样对待。
使用 subkey 生成密钥
你可以通过 subkey 命令行工具生成并管理密钥,例如使用 Docker 方式:
docker run -it parity/subkey:latest generate --scheme sr25519
输出示例(格式参考原文):
Secret phrase: ...
Public key (hex): ...
SS58 Address: ...
注意:该命令需要执行两次,分别生成:
• account keys
• session keys
并将结果保存备用。
生成并修改链规格文件(Generate the Chain Specification)
Polkadot SDK 平行链由 chain specification(链规格文件,简称 chain spec)定义。chain spec 通常分为两类:
1)Plain chain spec(明文 chain spec)
• 可读的 JSON 格式
• 可手动编辑,以适配你的链需求
• 适合作为初始配置模板
2)Raw chain spec(原始 chain spec)
• 用于启动节点的二进制编码格式(JSON 中体现为 SCALE 编码的十六进制数据)
• 由 plain chain spec 转换生成
• 便于跨 runtime 版本兼容同步
重要说明
chain spec 文件只在链首次创建(genesis)时需要。链已运行后进行 runtime 升级,不需要重新生成 chain spec。
本教程 relay chain 为 paseo,ParaId 为示例 4508,你需要确保 chain spec 体现正确的 relay chain 与 ParaId。
1. 生成 plain chain spec
运行以下命令生成 plain chain spec(注意使用 *.compact.compressed.wasm 版本的 runtime):
chain-spec-builder
--chain-spec-path ./plain_chain_spec.json
create
--relay-chain paseo
--para-id INSERT_PARA_ID
--runtime target/release/wbuild/parachain-template-runtime/parachain_template_runtime.compact.compressed.wasm
named-preset local_testnet
将 INSERT_PARA_ID 替换为你预留到的 ParaId(例如 4508)。
2. 编辑 plain_chain_spec.json
按原文要求,你需要修改以下字段(保持 JSON 中数值类型正确,特别是 para_id 不要加引号):
• name、id、protocolId:改为你链的唯一值
• para_id 与 parachainInfo.parachainId:改为你预留的 ParaId(数字)
• balances:设置初始账户余额(SS58 格式)
• collatorSelection.invulnerables 与 session.keys:填入 collator 的 account ID 与 session keys(SS58 格式)
• sudo:设置拥有 sudo 权限的账户
原文提供了示意结构(这里保持原样展示其字段形态,便于对照):
{
"id": "INSERT_ID",
"name": "INSERT_NAME",
"para_id": "INSERT_PARA_ID",
"protocolId": "INSERT_PROTOCOL_ID",
"relay_chain": "paseo",
"genesis": {
"runtimeGenesis": {
"patch": {
"balances": {
"balances": [["INSERT_SUDO_ACCOUNT", 1152921504606846976]]
},
"collatorSelection": {
"invulnerables": ["INSERT_ACCOUNT_ID_COLLATOR_1"]
},
"parachainInfo": {
"parachainId": "INSERT_PARA_ID"
},
"session": {
"keys": [
[
"INSERT_ACCOUNT_ID_COLLATOR_1",
"INSERT_ACCOUNT_ID_COLLATOR_1",
{
"aura": "INSERT_SESSION_KEY_COLLATOR_1"
}
]
]
},
"sudo": {
"key": "INSERT_SUDO_ACCOUNT"
}
}
}
}
}
说明:示例里 sudo 与 collator 使用同一个账户仅用于演示;生产环境不应如此配置。
保存修改并关闭文件。
3. 将 plain chain spec 转换为 raw chain spec
执行转换命令:
chain-spec-builder
--chain-spec-path ./raw_chain_spec.json
convert-to-raw plain_chain_spec.json
转换后,你会看到 raw chain spec 中包含 SCALE 编码的十六进制值。
para_id 字段补充说明(para_id Considerations)
原文说明:chain spec JSON 中的 para_id 字段用于节点配置。自 Polkadot SDK stable2509 起,runtime 也可以选择实现 cumulus_primitives_core::GetParachainInfo trait 作为另一种获取 parachain 标识的方式。
但为了向后兼容,chain spec 中的 para_id 字段仍会继续被支持,确保节点能从 genesis 或旧 runtime 状态正常同步。
导出注册所需文件(Export Required Files)
为了在 Paseo 上注册你的平行链,需要导出两类文件:
• 平行链 runtime Wasm(genesis wasm)
• 平行链 genesis state(genesis head)
1)导出 genesis wasm
polkadot-omni-node export-genesis-wasm
--chain raw_chain_spec.json para-wasm
2)导出 genesis state
polkadot-omni-node export-genesis-head
--chain raw_chain_spec.json para-state
导出后你将得到两个文件:
• para-wasm
• para-state
注册 Parathread(Register a Parathread)
拿到 genesis state 与 runtime 后,就可以把它们注册到对应 ParaId 上。
注册步骤
1. 打开 Polkadot.js Apps
2. 进入 Parachains > Parathreads

3. 点击 + Parathread

4. 填写/上传:
• 选择你的 ParaId
• code 字段上传 para-wasm
• initial state 字段上传 para-state
5. 确认信息后点击 + Submit 提交
提交成功后,你会在列表里看到对应 ParaId 的 Parathread,并且存在可用的 Deregister 按钮(原文描述为 active)。
此时你的 runtime 逻辑与 genesis 已经被 relay chain 记录下来。下一步需要运行 collator,为该平行链出块。
注意
你的 parachain 可能需要等待数小时才能完成 onboard。在完成 onboard 之前,你无法购买 coretime,因此也无法在你的网络上进行交易。
启动 Collator 节点(Start the Collator Node)
在启动 collator 之前,需要生成 node key,用于通过 Libp2p 与其他节点通信。
1. 生成 node key
polkadot-omni-node key generate-node-key
--base-path data
--chain raw_chain_spec.json
示例输出:
Generating key in "/data/chains/custom/network/secret_ed25519"
12D3KooW...
2. 启动 collator(示例命令)
你必须保证 collator 端口对外可访问且可被发现,否则 parachain 节点无法与 Paseo 验证人节点建立对等连接,从而无法出块。
示例启动命令如下:
polkadot-omni-node --collator
--chain raw_chain_spec.json
--base-path data
--port 40333
--rpc-port 8845
--force-authoring
--node-key-file ./data/chains/custom/network/secret_ed25519
--
--sync warp
--chain paseo
--port 50343
--rpc-port 9988
端口含义:
• 第一个 --port:collator 节点 P2P 端口
• 第二个 --port:内嵌 relay chain 节点端口
• 第一个 --rpc-port:连接 collator 的 RPC 端口(示例 8845)
• 第二个 --rpc-port:连接内嵌 relay chain 的 RPC 端口(示例 9988)
3. 将 session key 写入 collator keystore
启动 collator 后,另开一个终端,向节点插入你之前生成的 session key。
注意:http://localhost:8845 中的端口应与启动时 --rpc-port 一致(示例为 8845)。
将 INSERT_SECRET_PHRASE 与 INSERT_PUBLIC_KEY_HEX_FORMAT 替换为你生成的 session key 信息:
curl -H "Content-Type: application/json"
--data '{
"jsonrpc":"2.0",
"method":"author_insertKey",
"params":[
"aura",
"INSERT_SECRET_PHRASE",
"INSERT_PUBLIC_KEY_HEX_FORMAT"
],
"id":1
}'
http://localhost:8845
成功响应应为:
{"jsonrpc":"2.0","result":null,"id":1}
当 collator 与 Paseo relay chain 同步完成,并且 parathread 完成 onboard 后,节点将具备出块条件(可能需要一定时间)。
开始出块与 Coretime(Producing Blocks)
当你的 collator 正常运行后,下一步是获取 coretime,它是平行链从 relay chain 获得安全保障、并持续出块所需的资源。
原文提到 Agile Coretime 提供更灵活的资源管理方式。在完成链配置后,你通常有两条路径:
1)购买 Bulk Coretime(批量 coretime)
通过 coretime system parachain 上的 Broker pallet 购买 bulk coretime,然后将购买到的核心分配给已注册的 ParaId。
2)订购 On-demand Coretime(按需 coretime)
通过 relay chain 上的 OnDemand pallet 发起按需 coretime 订单。
一旦 coretime 被正确分配给你的平行链(无论 bulk 还是 on-demand),并且 collator 正常运行,你的链就应该开始出块。
总结(Conclusion)
通过本文,你已经完成了将平行链部署到 Polkadot 测试网(Paseo)的关键步骤:
✅ 领取 PAS 测试代币并准备账户
✅ 在 Paseo 上预留 ParaId
✅ 为 collator 生成 account keys 与 session keys
✅ 生成并修改 plain chain spec,转换为 raw chain spec
✅ 导出 para-wasm 与 para-state
✅ 在 relay chain 上注册 Parathread
✅ 启动 collator 节点并插入 session key
✅ 理解出块与 coretime 的关系(bulk / on-demand)
这套流程基本覆盖了从本地模板到测试网“生产化验证”的核心路径,为后续主网部署奠定基础。
原文链接:https://docs.polkadot.com/parachains/launch-a-parachain/deploy-to-polkadot/









