摘要
本指南涵盖开发者需要了解的关于 Polkadot 节点的所有内容:节点类型、如何运行自己的节点、如何通过 RPC 端点连接,以及如何选择自托管节点与提供商托管节点。无论您是在构建 dApp、钱包还是基础设施工具,您都将学习到可靠地与 Polkadot 网络交互的实用步骤。
Polkadot 节点决策清单
在决定如何连接到 Polkadot 之前,请考虑以下因素:
- 您是否需要历史状态访问? 如果是,请使用归档节点或支持归档的 RPC 提供商。
- 您的请求量是多少? 高吞吐量的 dApp 可能受益于专用节点或具有可扩展速率限制的提供商。
- 您是否需要 WebSocket 支持? 实时应用程序需要 WebSocket 端点。
- 您的预算是多少? 自托管涉及服务器成本和维护;提供商计划提供可预测的定价。
- 正常运行时间有多重要? 提供商通常有 SLA;自托管节点需要您自己的监控。
- 您是否需要多区域冗余? 提供商在全球分布节点以实现低延迟。
什么是 Polkadot 节点?
Polkadot 节点是一种连接到 Polkadot 中继链或平行链的软件客户端。它维护区块链状态的副本,验证交易,并通过 JSON-RPC 或 WebSocket 向应用程序提供数据。节点对于需要直接、未经过滤的网络访问的开发者至关重要。
节点类型
| 节点类型 | 存储的数据 | 使用场景 |
|---|---|---|
| 全节点 | 最新区块(修剪历史) | 常规交互、余额检查、交易提交 |
| 归档节点 | 从创世区块开始的完整历史 | 历史查询、分析、区块浏览器 |
| 验证人节点 | 全节点 + 区块生产 | 质押、共识参与 |
| 收集人节点 | 平行链全节点 | 平行链区块生产 |
| 轻节点 | 仅区块头 | 移动钱包、低资源环境 |
如何运行自己的 Polkadot 节点
运行节点可以让您完全控制您的基础设施。以下是快速设置指南。
前提条件
- 一台至少具有 4 个 CPU 核心、8 GB RAM 和 200 GB SSD(全节点)或 1 TB+(归档节点)的机器。
- 已安装 Rust(请遵循 rustup.rs)。
- 构建依赖项:
build-essential、clang、cmake等。
安装并运行
# 克隆 Polkadot 仓库
git clone https://github.com/paritytech/polkadot-sdk.git
cd polkadot-sdk
# 构建二进制文件(可能需要一些时间)
cargo build --release --features fast-runtime
# 运行全节点
./target/release/polkadot --chain polkadot --pruning archive --name my-node
对于归档节点,使用 --pruning archive。对于验证人节点,添加 --validator 并配置会话密钥。
Docker 选项
docker run -d --name polkadot-node \
-v /data:/data \
-p 30333:30333 \
-p 9933:9933 \
-p 9944:9944 \
parity/polkadot:latest \
--chain polkadot \
--pruning archive \
--name my-docker-node
RPC 配置
默认情况下,节点在 127.0.0.1:9933(HTTP)和 127.0.0.1:9944(WebSocket)上暴露 RPC。对于外部访问,使用 --rpc-external 和 --ws-external,但请使用防火墙或 TLS 保护它们。
通过 RPC 连接到 Polkadot 节点
一旦您的节点运行起来,您可以使用 JSON-RPC 与之交互。
示例:获取最新区块
curl -H "Content-Type: application/json" \
-d '{"id":1, "jsonrpc":"2.0", "method": "chain_getBlock"}' \
http://localhost:9933
示例:获取账户余额
curl -H "Content-Type: application/json" \
-d '{"id":1, "jsonrpc":"2.0", "method": "system_account", "params": ["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"]}' \
http://localhost:9933
使用 WebSocket(JavaScript)
const { ApiPromise, WsProvider } = require('@polkadot/api');
async function main() {
const wsProvider = new WsProvider('ws://localhost:9944');
const api = await ApiPromise.create({ provider: wsProvider });
const chain = await api.rpc.system.chain();
console.log(`Connected to ${chain}`);
const lastHeader = await api.rpc.chain.getHeader();
console.log(`Last block number: ${lastHeader.number}`);
}
main().catch(console.error);
自托管与 RPC 提供商:您应该选择哪个?
| 标准 | 检查内容 | 重要性 |
|---|---|---|
| 成本 | 自托管:服务器 + 带宽。提供商:按需付费或订阅。 | 自托管在高流量下可能更便宜,但需要运维开销。 |
| 维护 | 自托管:您负责更新、备份、监控。提供商:托管。 | 减少工程时间和停机风险。 |
| 可扩展性 | 自托管:垂直扩展有限。提供商:内置水平扩展。 | 突发流量高峰可能压垮单个节点。 |
| 延迟 | 自托管:取决于服务器位置。提供商:多区域。 | 低延迟改善用户体验。 |
| 可靠性 | 自托管:单点故障。提供商:冗余集群。 | 生产应用更高的正常运行时间。 |
| 历史数据 | 自托管:需要归档节点。提供商:通常包含归档访问。 | 分析和历史查询所需。 |
常见陷阱与故障排除
- 节点不同步:检查网络连接、磁盘空间,以及您是否在正确的链上(Polkadot 与 Kusama)。
- RPC 连接被拒绝:确保节点正在运行且 RPC 端口已打开。开发时使用
--rpc-cors all。 - WebSocket 断开:某些提供商限制连接持续时间。使用保活 ping。
- 速率限制:公共端点有限制。对于生产环境,使用专用节点或具有更高限制的提供商。
- 内存不足:归档节点需要大量 RAM。考虑使用提供商进行归档查询。
使用 Polkadot 的 RPC 提供商
如果您更倾向于不运行自己的节点,RPC 提供商提供具有高可用性的托管端点。OnFinality 提供具有归档、trace 和 WebSocket 支持的 Polkadot RPC 端点。您可以免费获取 API 密钥并随需扩展。
要连接到 OnFinality 的 Polkadot 端点:
curl -H "Content-Type: application/json" \
-d '{"id":1, "jsonrpc":"2.0", "method": "chain_getBlock"}' \
https://polkadot.api.onfinality.io/public
对于生产环境,注册 API 密钥以获得更高的速率限制和专用节点选项。详情请参见 RPC 定价 和 支持的网络。
关键要点
- Polkadot 节点有几种类型:全节点、归档节点、验证人节点、收集人节点和轻节点。
- 运行自己的节点可以完全控制,但需要基础设施管理。
- RPC 提供商为生产 dApp 提供便利性、可扩展性和可靠性。
- 对于生产环境,始终使用经过身份验证的端点以避免速率限制。
- 在选择设置之前,评估您对历史数据、吞吐量和延迟的需求。
常见问题
全节点和归档节点有什么区别?
全节点只存储最近的区块(修剪历史),而归档节点存储从创世区块开始的所有区块。归档节点用于历史查询,但需要更多磁盘空间。
我可以在笔记本电脑上运行 Polkadot 节点吗?
可以,用于开发或测试。对于生产环境,请使用具有足够资源的服务器。
同步 Polkadot 节点需要多长时间?
同步全节点可能需要几个小时;归档节点可能需要几天。使用像 OnFinality 这样的提供商可以消除同步时间。
在 Polkadot 上构建是否需要运行节点?
不需要,您可以使用 RPC 提供商与网络交互。运行节点是可选的,但可以给您更多控制。
Polkadot 上有哪些 RPC 方法可用?
Polkadot 支持标准的 JSON-RPC 方法,如 chain_getBlock、system_account 和 state_getStorage,以及 Substrate 特定的方法。请参阅 Polkadot RPC 文档 获取完整列表。