help 命令的目录结构:九个类别、隐藏区与弃用开关 图 1
help 命令的目录结构:九个类别、隐藏区与弃用开关 · 图 1

在一台同步中的全节点上敲一句 help,返回的是整台机器所有命令的说明书目录:它把命令按功能归类打印成一组带等号包裹的类别标题,每类下面逐条列出命令名与首行摘要。这个目录背后是一张内部注册表——每条 RPC 都登记了类别、唯一标识和执行入口。本文按 v31.0 的 src/rpc/server.cpp 拆解 help 的分组打印、隐藏类别的两种触发路径,以及”help 查不到的命令”到底藏了什么。

一、help 的分组逻辑。注册表里每条命令带一个 category 字段。不带参数的 help 会把全部命令按”类别名加命令名”排序后逐条执行一遍”只出帮助”的调用:实现里先给请求对象打上 GET_HELP 标记,命令处理器不执行真实业务,只抛出帮助文本。当遍历到一条新类别的命令时,输出一行形如 == Wallet == 的类别标题——类别名首字母大写后打印。于是 help 天然是一份分组目录,而且顺序稳定(按类别名与命令名排序),适合做文档生成的抓取源。

二、hidden 类别:查得到名字才打得开。注册表里有一类命令登记在 hidden 之下。server.cpp 的过滤逻辑是:strCommand 为空(无参 help)时,类别等于 hidden 的命令被跳过——它们在目录里完全隐身;但只要明确给出命令名,同一个命令的帮助就正常返回,不因为 hidden 而拒绝。换句话说,hidden 是”不主动公开”而不是”不可访问”,这正是那几条测试与实验命令的定位。测试与实验命令。v31 源码树里登记在 hidden 之下的注册条目有 19 条(同一个命令可能有重复登记),其中既有面向开发调试的 echo、echojson 这类回显工具,也有 sendmsgtopeer、addpeeraddress 这类直接触碰网络内部状态的开关。这类命令的共同点是:行为可能随版本变化、输出不做兼容承诺、误用会产生误导,因此官方选择不在 help 目录里替它们背书——但你要真心想用,名字给你,风险自担。

三、类别清单与数量级。v31 注册表里出现的类别名共九个:wallet、blockchain、control、network、util、rawtransactions、mining、hidden、logging。粗略数量级(按注册条目计,钱包类命令常为多钱包场景重复注册,实际命令数略少):wallet 约 55、blockchain 38、rawtransactions 21、network 15、util 8、mining 7、control 6,加上 hidden 与 logging 各若干。这些数字随版本变动,正确用法是当场核对:help 列目录、help 命令名 查详情,比查任何二手表格都可靠。

四、与 -deprecatedrpc 的接力。help 目录之外还有第三个门:被弃用行为的开关。有些历史字段与行为已从默认输出删除,通过 -deprecatedrpc=<特性名> 可以按特性逐项临时恢复(具体特性名以对应版本的 help 输出与发行说明为准,逐版本都会变)。三扇门合起来是同一套治理哲学:命令的”说明书地位”(类别)、“可得性”(hidden)与”历史兼容窗口”(deprecatedrpc)分层管理,客户端生态的迁移节奏由此可控。

五、实操建议。给自动化脚本:只依赖 help 目录里出现过的命令与类别,hidden 条目不写进生产代码。给运维:找不到功能先怀疑它在 hidden 或需要参数组合(-named 传参、-rpcwallet 指钱包),而不是怀疑功能不存在。给写作者:引用 help 原文时标注比特币核心版本号——类别数与条目清单是版本敏感的,跨版本引用最容易翻车。

六、单条命令帮助的结构。help 加命令名返回的文本由命令注册时的结构决定:名称与首行摘要、参数表(每个参数的类型、必填或可省、默认值)、返回值说明、示例调用。参数表读法有讲究:标着可选的参数省略后走默认值,默认值一栏写明了不传时的行为,这正是排查同一条命令别人好用我的不好用的第一核对点——多数差异出在省略了同一个可选参数。示例段落由开发者手写在注册代码里,会随版本修订,是少数官方替这条命令写的用法说明,值得和参数表一起读完。

风险提示:本文内容为技术机制科普,不构成任何投资建议、收益承诺或买卖时机判断。涉及协议规则与软件行为的描述以对应软件版本(文中已标注)的官方源码与规范为准。涉及资金操作的(如通道强制关闭、修剪开关),请先在测试网或小额环境验证。

help 命令的目录结构:九个类别、隐藏区与弃用开关 图 2
help 命令的目录结构:九个类别、隐藏区与弃用开关 · 图 2