原文作者:PaperMoon团队
验证人负责整个 Polkadot 网络的安全,但每条平行链上的交易打包和区块生产,靠的是另一种角色:Collator(出块节点,也叫整理人)。
如果你对平行链生态有深度参与,或者想在 Polkadot Hub、Bridge Hub 这些系统平行链上贡献基础设施,这篇文章把 Collator 从搭建到注册的完整流程都整理出来了。
Collator 是什么,和验证人有什么区别
平行链(parachain)是连接到 Polkadot 中继链的独立区块链,共享中继链的安全性,同时维护自己的状态和业务逻辑。
中继链(relay chain)是 Polkadot 的核心链,负责协调所有平行链之间的共识、通信和安全性。
验证人(validator)是中继链层面的安全保障者,需要质押 DOT,通过 ELVES 协议验证平行链提交的区块,保证整个 Polkadot 网络的最终一致性。
Collator 工作在平行链层面,负责:
- 监听并收集平行链上的交易
- 打包交易,生成区块候选(block candidate)
- 生成状态转换证明(state transition proof),提交给中继链验证人
- 处理跨链消息(XCM,跨共识消息格式,Polkadot 生态中链与链之间传递消息和资产的标准协议)
Collator 保证平行链的活性(liveness)。没有 Collator,交易就没人打包,链就停了。但 Collator 本身不提供安全性,安全性由验证人通过 ELVES 协议保障,Collator 无法作恶来破坏网络最终一致性。
一个 Collator 需要同时运行两个同步中的节点:一个平行链节点(处理平行链本身的出块)和一个中继链节点(嵌入式,用于感知中继链状态,参与出块协调)。这也是为什么 Collator 的硬件要求比普通全节点高很多。
硬件要求
Collator 对硬件的要求明显高于普通 RPC 节点,正常运行时间至关重要,任何宕机都会影响平行链出块:
|
配置项 |
最低要求 |
推荐配置 |
|---|---|---|
|
CPU |
4 核 |
8 核及以上 |
|
内存 |
32 GB RAM |
64 GB RAM |
|
存储 |
200 GB NVMe SSD |
更大容量(随链增长扩展) |
|
网络带宽 |
100 Mbps + 固定公网 IP |
更高带宽更稳定 |
|
开放端口 |
30333(平行链 P2P)30334(中继链 P2P) |
同左 |
存储必须是 NVMe SSD,磁盘 I/O 速度直接影响出块稳定性。机械硬盘或普通 SSD 在高负载下会造成区块生产延迟。
建议同时配置监控告警(CPU、内存、磁盘、网络),以便在节点异常时第一时间响应。
第一步:生成账户
Collator 需要一个链上账户用于提交交易和潜在的质押绑定。使用 sr25519 方案生成:
```bash
docker run -it parity/subkey:latest generate --scheme sr25519
```
```bash
# 中文说明:
# sr25519 → 一种基于 Schnorr 签名和 Ristretto 曲线的密码学方案,
# 是 Polkadot/Substrate 生态中推荐的账户密钥方案
# subkey → Parity 开发的密钥管理工具,用于生成和管理 Substrate 兼容的密钥
```
命令输出包含:
- Secret phrase(助记词):12 个英文单词,账户的终极恢复凭证
- Secret seed(私钥 hex)
- Public key(公钥 hex)
- Account ID
- SS58 Address(Polkadot 网络格式的账户地址)
⚠️ 安全警告:Secret phrase 一旦泄露账户即告失陷。妥善离线备份,不要截图、不要上传云端。生产环境建议使用硬件钱包管理账户密钥。
账户创建后,需要往里转入一定量 DOT 用于支付链上交易手续费,某些平行链还要求绑定(bond)一定量 DOT 才能注册为 Collator 候选人。
第二步:安装 polkadot-parachain 二进制
方式 A:Docker
拉取镜像并验证:
```bash
docker pull parity/polkadot-parachain:stable2512-1
docker run --rm parity/polkadot-parachain:stable2512-1 --version
```
```bash
# stable2512-1 是版本标签,运行前建议去 DockerHub 查看最新的 stable 标签
```
方式 B:Systemd(直接使用二进制)
从 GitHub Releases 下载预编译二进制:
```bash
wget https://github.com/paritytech/polkadot-sdk/releases/download/polkadot-stable2512-1/polkadot-parachain
chmod +x polkadot-parachain
sudo mv polkadot-parachain /usr/local/bin/
sudo chown root:root /usr/local/bin/polkadot-parachain
polkadot-parachain --version
```
```bash
# 中文说明:
# chmod +x → 赋予执行权限
# mv 到 /usr/local/bin/ → 使命令全局可用
# chown root:root → 设置文件归属为 root,避免权限问题
```
---
第三步:生成节点密钥
和 Bootnode 一样,Collator 需要一个固定的节点密钥来保证 Peer ID 稳定:
```bash
sudo mkdir -p /var/lib/polkadot-collator
docker run -it parity/subkey:latest generate-node-key > /var/lib/polkadot-collator/node.key
```
命令输出的第一行是 Peer ID(公开,类似 `12D3KooWExcVYu7Mvjd4kxPVLwN2ZPnZ5NyLZ5ft477wqzfP2q6E`),第二行是写入 `node.key` 的私钥。记录下 Peer ID,注册时可能需要用到。
第四步:获取链规格(Chain Spec)
Collator 需要知道它要服务的平行链的完整参数,这些参数保存在 Chain Spec(链规格文件)里。
方式一:直接下载(推荐)
Polkadot 系统平行链的链规格由官方维护,直接下载即可(以 Polkadot Hub 为例):
```bash
curl -sL -o chain-spec.json \
https://paritytech.github.io/chainspecs/polkadot/parachain/asset-hub/chainspec.json
```
常见系统平行链的 Para ID(平行链在中继链上的唯一编号):
|
平行链名称 |
Para ID |
|---|---|
|
Polkadot Hub |
1000 |
|
Bridge Hub |
1002 |
|
People Chain |
1004 |
|
Coretime Chain |
1005 |
方式二:从 runtime 构建
如果是非系统平行链或需要自定义链规格,从源码构建:
```bash
git clone https://github.com/polkadot-fellows/runtimes.git
cd runtimes
cargo build --release -p asset-hub-polkadot-runtime
cargo install --locked staging-chain-spec-builder@14.0.0
chain-spec-builder create \
--relay-chain polkadot \
--para-id 1000 \
--runtime target/release/wbuild/asset-hub-polkadot-runtime/asset_hub_polkadot_runtime.compact.compressed.wasm \
named-preset production > chain-spec.json
```
第五步:启动 Collator
准备好账户、节点密钥和链规格后,可以启动 Collator。注意启动命令里有一个 `--` 分隔符:`--` 之前的参数给平行链节点,`--` 之后的参数给内嵌的中继链节点。
方式 A:Docker 启动
```bash
mkdir -p collator-data
cp chain-spec.json collator-data/
cp /var/lib/polkadot-collator/node.key collator-data/
docker run -d --name polkadot-collator --restart unless-stopped \
-p 30333:30333 \
-p 30334:30334 \
-p 9944:9944 \
-p 9615:9615 \
-v $(pwd)/collator-data:/data \
-v $(pwd)/chain-spec.json:/chain-spec.json \
parity/polkadot-parachain:stable2512-1 \
--collator \
--chain=/chain-spec.json \
--base-path=/data \
--port=30333 \
--rpc-port=9944 \
--prometheus-port=9615 \
--prometheus-external \
--node-key-file=/data/node.key \
--name="INSERT_YOUR_COLLATOR_NAME" \
--blocks-pruning=256 \
--state-pruning=256 \
--database=paritydb \
-- \
--chain=polkadot \
--port=30334 \
--sync=fast \
--blocks-pruning=256 \
--state-pruning=256 \
--database=paritydb \
--pool-limit=0 \
--rpc-port=0
```
查看实时日志:
```bash
docker logs -f polkadot-collator
```
方式 B:Systemd 启动
创建专用系统用户:
```bash
sudo useradd -r -s /bin/bash polkadot
sudo cp chain-spec.json /var/lib/polkadot-collator/
sudo chown -R polkadot:polkadot /var/lib/polkadot-collator
```
创建 systemd 服务文件 `/etc/systemd/system/polkadot-collator.service`:
```ini
[Unit]
Description=Polkadot System Parachain Collator
After=network.target
[Service]
Type=simple
User=polkadot
Group=polkadot
WorkingDirectory=/var/lib/polkadot-collator
ExecStart=/usr/local/bin/polkadot-parachain \
--collator \
--chain=/var/lib/polkadot-collator/chain-spec.json \
--base-path=/var/lib/polkadot-collator \
--port=30333 \
--rpc-port=9944 \
--prometheus-port=9615 \
--node-key-file=/var/lib/polkadot-collator/node.key \
--name="INSERT_YOUR_COLLATOR_NAME" \
--blocks-pruning=256 \
--state-pruning=256 \
--database=paritydb \
-- \
--chain=polkadot \
--port=30334 \
--sync=fast \
--blocks-pruning=256 \
--state-pruning=256 \
--database=paritydb \
--pool-limit=0 \
--rpc-port=0
Restart=always
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
启用并启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl enable polkadot-collator
sudo systemctl start polkadot-collator
sudo systemctl status polkadot-collator
```
关键参数说明
|
参数 |
作用位置 |
功能说明 |
|---|---|---|
|
--collator |
平行链 |
开启出块模式,节点由同步节点变为主动出块的 Collator |
|
--node-key-file |
平行链 |
使用固定节点密钥,保证 Peer ID 恒定,避免网络重新识别 |
|
--blocks-pruning=256 |
中继链 + 平行链 |
仅保留最近 256 个区块数据,降低磁盘占用 |
|
--state-pruning=256 |
中继链 + 平行链 |
仅保留最近 256 个区块状态,减少状态数据库体积 |
|
--database=paritydb |
中继链 + 平行链 |
使用 ParityDB,针对 Substrate 状态读写负载优化 |
|
--sync=fast |
中继链 |
启用快速同步,加速首次同步中继链 |
|
--pool-limit=0 |
中继链 |
关闭中继链交易池(Collator 不负责中继链交易) |
|
--rpc-port=0 |
中继链 |
禁用中继链 RPC,减少攻击面与资源消耗 |
等待双链同步完成后再进行下一步注册操作。日志里看到两侧链都进入 `Imported #XXXX` 且区块高度与网络最新高度接近,说明同步完成。
第六步:生成会话密钥
会话密钥(session keys)是 Collator 用于出块签名的临时密钥,与账户私钥分离,定期轮换。节点完全同步后,通过 RPC 生成:
```bash
curl -H "Content-Type: application/json" \
-d '{"id":1, "jsonrpc":"2.0", "method": "author_rotateKeys", "params":[]}' \
http://localhost:9944
```
命令返回一段 hex 字符串,这就是你的会话密钥。**保存好这个值**,注册时需要提交到链上。
⚠️ 如果之后你清除了节点数据库(wipe database),需要重新执行这个命令生成新的会话密钥,并重新提交注册。
第七步:链上注册
系统平行链的 Collator 选拔有三种机制:
|
准入机制 |
工作方式 |
加入门槛 |
|---|---|---|
|
Invulnerables 名单 |
通过链上治理投票加入固定 Collator 名单 |
提交治理提案并获得通过 |
|
链上自动选拔 |
Runtime 按规则自动筛选候选节点(通常伴随质押或性能条件) |
半许可制,需要满足链上条件 |
|
Fellowship 决定 |
由 Polkadot Technical Fellowship 指定或批准 |
需获得 Fellowship 批准 |
治理(governance)是 Polkadot 的链上去中心化决策机制,持 DOT 的用户可以投票决定协议升级、资金使用等事项。Collator 注册通常走这个路径,需要公开说明你的资质和运行计划。
以 Invulnerables 名单方式为例,注册流程:
① 检查现有 Collator
在 Polkadot.js Apps 里:Developer → Chain State → 查询 `collatorSelection.invulnerables()`,查看当前名单。
② 提交治理提案
准备一份说明文档,内容包括:
- 为什么你适合担任该平行链的 Collator
- 你的会话密钥和账户 ID
- 硬件配置和监控方案描述
- 相关运维经验
在 Polkadot 治理论坛发帖,征集社区意见后提交正式提案。
③ 在链上提交会话密钥
在 Polkadot.js Apps 里:Developer → Extrinsics,选择你的账户,调用 `session.setKeys` 外部调用(extrinsic):
- keys:填入 `author_rotateKeys` 返回的 hex 字符串
- proof:填 `0x00`
签名并提交交易。
④(可选)注册为候选人
如果平行链使用链上质押选拔,调用 `collatorSelection.registerAsCandidate`,系统会自动从你的账户中预留所需质押量。
⑤ 等待治理通过
提案通过后,在下一个 session 或 era,你的 Collator 会开始参与出块。确认方法:查看日志里是否出现 `Prepared block for proposing` 或 `Imported #123` 这样的出块日志。
节点日常管理
查看日志
Docker:
```bash
docker logs -f polkadot-collator # 实时追踪日志
docker logs --tail 100 polkadot-collator # 查看最近 100 行
docker logs polkadot-collator 2>&1 | grep -i error # 只看错误
docker logs polkadot-collator 2>&1 | grep -i "imported" # 只看出块记录
```
Systemd:
```bash
sudo journalctl -u polkadot-collator -f # 实时追踪
sudo journalctl -u polkadot-collator -n 100 # 最近 100 行
sudo journalctl -u polkadot-collator | grep -i error # 过滤错误
sudo journalctl -u polkadot-collator | grep -i "imported" # 过滤出块记录
```
查看数据库体积
```bash
# Docker
du -sh ./collator-data
# Systemd
du -sh /var/lib/polkadot-collator
```
节点会根据 `--blocks-pruning` 和 `--state-pruning` 的配置自动裁剪旧数据。
版本升级
Runtime 升级(链上逻辑更新)通过治理自动完成,不需要手动操作。
客户端升级(`polkadot-parachain` 二进制更新)需要手动操作:
Systemd 升级流程:
```bash
# 1. 停止服务
sudo systemctl stop polkadot-collator
# 2. 备份数据
sudo cp -r /var/lib/polkadot-collator /var/lib/polkadot-collator.backup
# 3. 下载新版本
wget https://github.com/paritytech/polkadot-sdk/releases/download/INSERT_NEW_VERSION/polkadot-parachain
chmod +x polkadot-parachain
sudo mv polkadot-parachain /usr/local/bin/
# 4. 验证版本号
polkadot-parachain --version
# 5. 重启服务
sudo systemctl start polkadot-collator
sudo systemctl status polkadot-collator
```
Docker 升级流程:
```bash
# 1. 停止服务
sudo systemctl stop polkadot-collator
# 2. 备份数据
sudo cp -r /var/lib/polkadot-collator /var/lib/polkadot-collator.backup
# 3. 拉取新镜像
docker pull parity/polkadot-parachain:<NEW_TAG>
# 4. 更新 systemd 服务文件中的镜像标签
sudo nano /etc/systemd/system/polkadot-collator.service
# 5. 重新加载并启动
sudo systemctl daemon-reload
sudo systemctl start polkadot-collator
sudo systemctl status polkadot-collator
```
小结
运行一个 Polkadot Collator 的完整路径:
1. 准备硬件:8 核 CPU、64 GB RAM、NVMe SSD、固定公网 IP
2. 生成账户:sr25519 方案,妥善备份助记词
3. 安装 polkadot-parachain:Docker 或预编译二进制
4. 生成节点密钥:固定 Peer ID
5. 获取链规格:下载对应平行链的 chain-spec.json
6. 启动节点:等待平行链和中继链双链同步完成
7. 生成会话密钥:`author_rotateKeys` RPC 调用
8. 链上注册:`session.setKeys` 提交会话密钥 + 治理提案(系统平行链)
Collator 的运维责任比普通 RPC 节点重得多——宕机会直接影响平行链出块。在决定运营 Collator 之前,建议先在测试网(Westend、Paseo)上完整走一遍流程,熟悉运维节奏再上主网。
阅读原文:https://docs.polkadot.com/node-infrastructure/run-a-collator/


被折叠的 条评论
为什么被折叠?



