资讯动态

Solana 如何配置 RPC 节点的 --full-rpc-api、--no-voting 与 --account-index 参数?

发布时间:2026/9/15 13:05:30 来源:尧图企业网站定制
Solana 如何配置 RPC 节点的 --full-rpc-api、--no-voting 与 --account-index 参数【免费下载链接】solanaWeb-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.项目地址: https://gitcode.com/GitHub_Trending/so/solanaSolana 的 RPC 服务器与共识验证者运行的是同一个进程即solana-validator二者的区别完全体现在启动参数上。如果你要部署一个对外提供 JSON RPC 服务的节点就需要在启动脚本里正确配置--full-rpc-api、--no-voting和--account-index这几项参数。本文以 testnet 集群为例给出官方文档中的完整启动脚本、--account-index的取值依据以及节点启动后的验证命令。适用前提来自官方文档的明确说明软件环境为 Ubuntu 20.04已在机器上安装 Solana CLI需要先按 Validator 设置指南 完成 CLI 安装、身份密钥、磁盘挂载和系统调优等前置步骤RPC 节点不需要创建 vote account也不参与投票这是与共识验证者流程最大的区别。三个参数分别解决什么问题RPC 节点设置文档 对这几个参数的说明如下--full-rpc-api在本验证者上启用全部 RPC 操作。不加这个参数时节点只开放部分只读 RPC 接口。--no-voting让验证者不参与共识投票。文档同时提醒出于资源限制考虑通常不希望同一个节点既当共识节点又当全功能 RPC 节点。--account-index为账户构建内存索引加速需要扫描整个账户集合的 RPC 请求如getProgramAccounts和 SPL token 类请求。随着链上已填充账户数量增长这类请求可能性能变差需要支持它们时才应开启。示例脚本中还包含--private-rpc不在solana gossip命令的输出中公布本节点的开放 RPC 端口。是否使用取决于你是否希望被 gossip 网络里的其他节点发现你的 RPC 端口。更多参数细节文档建议查阅solana-validator --help命令。准备工作安装并配置 CLI在可信本机安装 Solana CLI 后用下面命令确认安装成功solana --version文档给出的示例输出文档示例实际版本可能不同solana-cli 1.14.17 (src:b29a37cf; feat:3488713414)然后把 CLI 指向目标集群本文示例使用 testnetsolana config set --url https://api.testnet.solana.com执行solana config get验证输出中应出现RPC URL: https://api.testnet.solana.com这一行。生成身份密钥在可信本机上生成身份密钥对solana-keygen new -o validator-keypair.json注意RPC 节点不需要vote-account-keypair.json也不需要authorized-withdrawer-keypair.json因此可以跳过验证者指南中创建 vote account、充值 SOL 和创建投票账户的整个章节。磁盘与硬件硬件要求文档 对 RPC 节点给出的建议如下CPU16 核 / 32 线程或更多比共识验证者的最低要求更高RAM如果使用了account-index需要 512 GB 或更多磁盘Accounts 和 Ledger 不应存放在同一块盘上如需保留更长的交易历史考虑更大的 ledger 盘软件官方构建和运行的平台是 Ubuntu 20.04预构建二进制要求 CPU 支持 AVX2。验证者设置指南中的磁盘准备流程df -h检查空间、lsblk -f查看设备、mkfs -t ext4格式化、分别挂载到/mnt/ledger和/mnt/accounts对 RPC 节点同样适用照 setup-a-validator.md 中 Hard Drive Setup 一节操作即可。系统调优sysctl 的 UDP 缓冲区、vm.max_map_count、文件描述符上限等在文档中被标注为缺少这些设置验证者可能无法启动因此属于必做项命令见 validator-start.md 的 System Tuning 一节。编写 validator.sh 启动脚本在/home/sol/bin/下创建validator.sh并加上可执行权限mkdir -p /home/sol/bin touch /home/sol/bin/validator.sh chmod x /home/sol/bin/validator.sh以下是官方文档给出的 testnet RPC 节点完整示例脚本。注意其中--identity指向/home/sol/validator-keypair.json如果你把密钥放在别处需要替换成实际路径#!/bin/bash exec solana-validator \ --identity /home/sol/validator-keypair.json \ --known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \ --known-validator dDzy5SR3AXdYWVqbDEkVFdvSPCtS9ihF5kJkHCtXoFs \ --known-validator eoKpUABi59aT4rR9HGS3LcMecfut9x7zJyodWWP43YQ \ --known-validator 7XSY3MrYnK8vq693Rju17bbPkCN3Z7KvvfvJx4kdrsSY \ --known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \ --known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \ --only-known-rpc \ --full-rpc-api \ --no-voting \ --ledger /mnt/ledger \ --accounts /mnt/accounts \ --log /home/sol/solana-rpc.log \ --rpc-port 8899 \ --rpc-bind-address 0.0.0.0 \ --private-rpc \ --dynamic-port-range 8000-8020 \ --entrypoint entrypoint.testnet.solana.com:8001 \ --entrypoint entrypoint2.testnet.solana.com:8001 \ --entrypoint entrypoint3.testnet.solana.com:8001 \ --expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \ --wal-recovery-mode skip_any_corrupted_record \ --limit-ledger-size几点说明第一行必须使用exec solana-validator ...。文档特别强调如果使用 logrotate 做日志轮转不用exec会导致轮转信号发给包装脚本而不是验证者进程两者一起被杀死。与共识验证者的示例相比本脚本去掉了--vote-account增加了--full-rpc-api、--no-voting、--private-rpc、--accounts和--rpc-bind-address 0.0.0.0。--rpc-port 8899对应 8899 TCPJSONRPC over HTTP8900 TCPJSONRPC over Websockets是派生端口取RPC_PORT 1无需单独指定。--dynamic-port-range 8000-8020把 P2P 动态端口限制在 13 个端口的范围内--entrypoint和--expected-genesis-hash都是 testnet 集群的值换集群时要整体替换可对照 Available Clusters 页面 中各集群的示例命令文档同时提醒这些命令仍需按 RPC 节点的用途再做调整。示例中的--known-validator身份及其运营方在 setup-an-rpc-node.md 中有完整列表Solana Labs、MonkeDAO、Certus One、SerGo、Algo|Stake。按要支持的 RPC 请求选择 --account-indexsetup-an-rpc-node.md 和 validator-start.md 都给出了--account-index支持的取值。它的作用是建立内存中的账户索引通过关键字段索引账户来显著提升 RPC 性能取值索引方式服务的 RPC 请求program-id每个账户按其所属 program 索引getProgramAccountsspl-token-mint每个 SPL token 账户按其 token Mint 索引getTokenAccountsByDelegate、getTokenLargestAccountsspl-token-owner每个 SPL token 账户按 token owner 地址索引getTokenAccountsByOwner以及带 spl-token-owner 过滤条件的getProgramAccounts文档说明可以用该参数启用一个或多个索引。如果你的 RPC 服务需要支持getProgramAccounts就加上--account-index program-id如果需要服务 SPL token 查询则对应增加spl-token-mint或spl-token-owner。选择依据是文档中各取值对应的 RPC 方法不需要支持相应请求就不必开启——开启后按硬件要求文档RAM 需要提升到 512 GB 或更多。启动节点并验证手动试运行在sol用户下执行启动脚本/home/sol/bin/validator.sh脚本应当拉起solana-validator进程。在另一个终端窗口中检查进程是否存在ps aux | grep solana-validator输出中应能看到一行包含solana-validator以及你写入validator.sh的全部参数借此可以确认--full-rpc-api、--no-voting等参数确实生效。查看日志su - sol tail -f solana-rpc.log文档说明验证者运行时会产生持续的大量日志输出应留意其中是否有_ERROR_字样如果没有错误信息可以继续下一步。确认节点已加入集群先查出自己节点的公钥solana-keygen pubkey ~/validator-keypair.json然后用solana gossip确认节点已注册到 gossip 协议solana gossip | grep pubkey其中pubkey替换为上一步得到的公钥。成功后应看到类似下面的一行文档示例输出139.178.68.207 | 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on | 8001 | 8004 | 139.178.68.207:80 | 1.14.17 | 3488713414如果 grep 没有任何输出文档给出的判断是节点可能启动出了问题应回到验证者日志中排查。接着用solana validators确认节点已加入网络solana validators | grep pubkey最后用solana catchup观察节点追赶网络的进度solana catchup pubkey如果这条命令报连接尝试相关的消息说明节点尚未真正加入网络需要重新检查日志以及上面两条命令的结果。配置为系统服务验证手动启动正常后可以参照 validator-start.md 中 Systemd Unit 一节创建/etc/systemd/system/sol.service其中ExecStart指向/home/sol/bin/validator.sh然后启动服务sudo systemctl enable --now sol再次用tail -f看日志、用solana gossip和solana validators复核即可。限制与已知问题不会保留完整链上历史示例脚本使用--limit-ledger-size限制本地保留的区块数默认目标是把 blockstore 磁盘占用控制在 500 GB 以内。RPC 用户若需要查询历史区块数据需要额外接入 Solana bigtable 实例仓库中的 storage-bigtable 目录说明了相关组件。磁盘空间文档的常见故障一节提示ledger 所在磁盘至少需要 2 TB 空间节点长时间追不上网络时文档归因可能是网络/硬件问题或需要向其他验证者获取最新快照。Docker 不支持用于生产集群requirements 文档明确不建议在 Docker 中运行线上集群含 mainnet-beta的验证者Docker 仅用于开发。端口开放8899/8900 属于可选对外开放端口文档建议已质押的 mainnet-beta 验证者出于安全考虑不要对互联网开放它们而 8000-10000 的动态端口范围脚本中收窄为 8000-8020是入站和出站都必须开放的。监控可以在另一台机器上运行solana-watchtower监控本节点详见 monitoring 最佳实践。完成上述验证——ps aux中能看到带全部参数的进程、solana gossip和solana validators都能 grep 到自己的公钥、日志无_ERROR_——这个 RPC 节点就按预期完成了部署。之后如果调整--account-index或--rpc-port修改validator.sh后重启 systemd 服务即可。【免费下载链接】solanaWeb-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces.项目地址: https://gitcode.com/GitHub_Trending/so/solana创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价