getdescriptoractivity怎么用? 图 1
getdescriptoractivity怎么用? · 图 1

Bitcoin Core 31 的 getdescriptoractivity 可按描述符和指定区块核对收款、花费及可选内存池事件。本文给出区块预筛、范围描述符和事件验收的完整流程。

getdescriptoractivity 适合回答一个很具体的问题:给定一组输出描述符和一组主链区块,哪些交易向这些脚本付款,哪些交易又花费了它们?它不是自动遍历全链的钱包恢复按钮;输入范围决定了能看到什么。

先做“区块候选集”,再取活动

getdescriptoractivity接收主链blockhash列表、描述符scanobjects和可选include_mempool参数。 调用前先明确起止高度和目标描述符。若区间很大,可用 scanblocks 一类过滤能力找出可能相关的区块,再把候选主链区块交给 getdescriptoractivity。这样把“寻找可能命中”与“提取具体事件”分成两步,既便于复核,也避免误以为接口会替你扫描全部历史。

描述符 + 高度范围

scanblocks 预筛可能相关区块

确认区块仍在主链

getdescriptoractivity 提取收款/花费事件

按 txid、vout、blockhash 对账

区块集合必须记录高度和哈希。只保存高度会在短重组后失去上下文;只保存哈希而不记扫描边界,也无法证明有没有漏掉前后区间。

描述符范围是最容易漏账的地方

官方文档建议把该RPC与scanblocks返回的relevant_blocks配合使用,调用可能持续数分钟。 范围描述符需要覆盖真实派生索引。范围太窄会漏掉已使用地址,范围无限放大又会增加扫描成本和误操作风险。先用 getdescriptorinfo 校验 checksum、是否为范围描述符及类型,再按钱包备份、地址生成记录和 gap 规则设定最小充分范围。

输入项验收问题失败后动作
descriptorchecksum和网络是否正确停止,修正来源
range是否覆盖已知派生游标对照备份扩展
blockhashes是否属于目标主链区间重建候选集
include_mempool是否明确需要未确认事件与确认记录分栏

不要在普通日志中复制含私钥的描述符。活动核对只需要公开脚本材料时,应使用脱敏、无私钥版本,并限制输出记录的访问权限。

怎样读收款与花费事件

activity数组区分spend与receive;确认事件包含blockhash和height,未确认事件省略这两个字段。 事件要落成可对账的账本,而不是只显示“收到/发出”。RPC 的 amount 是以BTC计的numeric;每行应先保存这个原始值及其单位,再用确定的十进制规则转换为聪整数落账,同时保存 descriptor 指纹、txid、输入或输出位置、blockhash、高度、确认状态和发现来源。收款事件说明交易创建了匹配输出;花费事件说明后续输入消费了匹配的既有输出,两者应通过 outpoint 关联。

一个输出先在内存池出现、随后进入区块,可能被接口观察两次。数据层用 txid+vout 作为业务对象,再给它附上 mempool、confirmed 或 conflicted 状态,不能把两次观察累加成两笔收入。

include_mempool是一条独立证据轨

spend事件给出spend_txid、spend_vin和prevout信息,receive事件给出txid、vout和output_spk。 选择包含内存池后,结果会受本节点当前内存池影响。RBF替换、交易过期、节点策略和重启都可能让未确认事件消失。页面应把未确认区域与指定区块的已确认区域视觉分开,并注明观测时刻。

建议验收顺序:

  1. 用已知测试描述符制造一笔收款和一笔花费。
  2. 保存预筛区块集合及其主链状态。
  3. 运行接口并用 txid、vout 复算收款和花费。
  4. 关闭 include_mempool 重跑,解释两份结果差异。
  5. 扩大一小段范围,确认新增事件来自合理派生索引。
  6. 让第二位复核者仅凭记录重建资金流。

它不能代替钱包备份

活动结果只覆盖你提供的描述符、范围、区块和当前内存池。错误描述符、遗漏派生分支、区块集合缺口或修剪限制都可能造成假空结果。即使对账成功,也不证明私钥可恢复、签名设备可用或钱包备份完整。

恢复场景要把“发现历史活动”“确认当前UTXO”“验证可签名性”“验证备份可恢复”拆成四个验收项。本文只解决第一项及其对账方法,不构成资金恢复保证或交易建议。

getdescriptoractivity一级资料与延伸

  1. Bitcoin Core 31 getdescriptoractivityhttps://bitcoincore.org/en/doc/31.0.0/rpc/blockchain/getdescriptoractivity/ (访问于2026年7月28日)
  2. Bitcoin Core 31 scanblockshttps://bitcoincore.org/en/doc/31.0.0/rpc/blockchain/scanblocks/ (访问于2026年7月28日)
  3. Bitcoin Core输出描述符文档https://github.com/bitcoin/bitcoin/blob/v31.0/doc/descriptors.md (访问于2026年7月28日)

站内延伸:getdescriptorinfo检查deriveaddresses安全派生listdescriptors安全审计

事实包保留边界:活动结果取决于传入区块集合、描述符范围与当前内存池,不能替代完整钱包备份或长期索引。