getwalletinfo 字段解剖:余额三兄弟被请走后,钱包档案还剩下什么 图 1
getwalletinfo 字段解剖:余额三兄弟被请走后,钱包档案还剩下什么 · 图 1

比特币核心 v30 的发布说明里有一条容易被划过去的改动:getwalletinfo 删除了 balance、unconfirmed_balance、immature_balance 三个余额字段,配套的 getunconfirmedbalance 命令整体退役。第一次升级后照着旧笔记找余额的人,多半会以为钱包出了毛病。本文对照 v31.0 源码,逐格讲清这份钱包档案现在到底装着什么。

余额为什么不在这里

发布说明给这条改动留了新动线:查未确认余额改跑 getbalances,读响应里 mine 分组下的 untrusted_pending 项。把余额从 getwalletinfo 拿走,不是余额没了,而是”档案”与”账目”分了家——getwalletinfo 从此只描述钱包本身的状态,不再兼职报账。这个分工在 v31 的字段表里看得很清楚:返回对象里已经找不到任何金额字段。

getwalletinfo 字段解剖:余额三兄弟被请走后,钱包档案还剩下什么 图 2
getwalletinfo 字段解剖:余额三兄弟被请走后,钱包档案还剩下什么 · 图 2

身份区:这是哪个钱包、什么形态

walletname 是钱包名。walletversion 已标注废弃:源码里它固定回填常数 169900,只为兼容仍关心版本号的旧客户端而保留,并不描述描述符钱包的真实演化。format 是数据库格式,帮助文本写明目前只剩 sqlite 一种。descriptors 表示该钱包是否用描述符管理输出脚本;external_signer 表示是否配置了外接签名设备;blank 表示这是个刻意不含任何密钥与描述符的空钱包;private_keys_enabled 为 false 时说明私钥被禁用,钱包只能旁观。这四个布尔合起来基本能判定一个钱包的出身和用途。

活动区:交易条数、密钥池与扫描状态

txcount 是钱包记账的交易总条数。keypoolsize 统计预生成的外部密钥数量,keypoolsize_hd_internal 统计找零用的内部密钥数量,后者只在钱包使用内部密钥池时出现。这两格是判断”还能领多少个地址不用解锁补池”的第一手依据。

加密钱包会多出一个 unlocked_until:解锁有效期的截止时刻,钱包锁着时为零;没设过口令的钱包干脆不出现这个键。scanning 在没有重扫进行时直接是 false,有重扫时变成包含 duration(已扫描秒数)与 progress(零到一之间的进度)的对象,脚本判断钱包”忙不忙”看它就够,不必去猜日志。

birthtime 是钱包愿意从哪个时间点开始正视链上历史。它有一个容易忽略的联动:以较早时间戳导入任何描述符,都会把 birthtime 往前拉——这也是导入历史地址后扫描范围突然变大的原因。flags 数组列出钱包当前带着的标志位;avoid_reuse 单独一格报告是否启用”拒绝复用地址”记账;档案末尾还有 lastprocessedblock,记录钱包账本跟到的那块区块。

一条隐藏行为:它会替你等账本

源码里 getwalletinfo 在组装响应前先调用了一次内部同步等待,把钱包账本追平到当前链尖再返回。这意味着节点刚启动、钱包还在消化区块时,这条命令可能显慢——慢不是它卡住,而是它在替你等一份不会过期的档案。反过来,它返回的每一格都保证与最新链状态一致,这在多钱包轮询脚本里是省掉一次额外核对的好性质。

三条实操建议

一是升级后先跑一遍 getwalletinfo,确认 format 与 descriptors,把旧脚本里的余额读取全部改道 getbalances。二是把 scanning 与 birthtime 当作导入历史钱包后的进度仪表盘,扫描期间不要叠加反复导入。三是 walletversion 从此不要再作为判断依据,判断钱包能力应该看标志位与 format。

与相邻命令的分工表

把钱包侧常用命令按”管什么”切一刀,边界立刻清楚:报账目找 getbalances 与 listunspent;查单个地址的归属与细节找 getaddressinfo;领新地址找 getnewaddress;密钥池的深度在 getwalletinfo 有读数,但补充动作归 keypoolrefill;扫描进度在这里只有 duration 与 progress 两格,要控制扫描边界的是 rescanblockchain 的高度参数。旧教程里”用 getwalletinfo 看余额”的三步流程,升级后每一步都该重新点名,别让脚本拿着已经不存在的字段返回空值继续往下跑。

风险提示:本文以比特币核心 v30 发布说明与 v31.0 源码为基准,字段集合可能随版本调整,请以实际运行版本的 RPC 帮助与源码为准。内容为技术说明,不构成任何投资建议。