如何在 Polkadot 上运行 Collator 出块节点 - Docker 和 Systemd 完整部署注册指南

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

原文作者: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/
 

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值