gettxout如何确认UTXO未花费? 图 1
gettxout如何确认UTXO未花费? · 图 1

gettxout 查询某个 outpoint 在指定节点视图中是否仍未花费。第三个参数 include_mempool 决定是否把内存池里的未确认花费算进去,因此同一 UTXO 在 true 与 false 下可能得到不同答案。

请求与三种结果

    {"jsonrpc":"2.0","id":44,"method":"gettxout","params":["txid...",1,true]}

返回对象时可读取 confirmations、value 和 scriptPubKey,说明该节点视图仍把输出视为可用;result:null 可能是 outpoint 不存在、已在链上花费,或在 include_mempool:true 时正被内存池交易花费。

用 true 和 false 定位未确认花费

先以 true 查询,若为 null,再以 false 查询。false 返回对象而 true 为 null,通常说明已有未确认交易正在花费它;两者都为 null,则继续查创建交易、索引参数与链上花费;两者都返回时,输出目前未被本节点观察到花费。

结果不是全网锁

节点可能尚未收到冲突交易,区块也可能重组。构造交易前还要锁定本地 coin selection,广播前用 testmempoolaccept 预检,并在签名设备核对 outpoint、金额和找零。需要高确定性时,在多个独立节点按相同高度复取。

返回对象中的 bestblock 用来固定这次 UTXO 视图,confirmations 说明确认深度,coinbase 则影响成熟期判断。钱包即使读到未花费,也要确认脚本确由自己控制、金额和网络正确;一个存在的输出不等于当前签名策略一定能花费它。

接受Bitcoin Core gettxout风险的前提

先确认自己能解释txid与vout定位,再判断mempool开关是否在预期范围,最后以结果字段验收。任何一项说不清,结果就仍待核验。

Bitcoin Core gettxout:先固定不会漂移的判断

  1. gettxout按txid和vout查询当前UTXO集合中的未花费输出,可选择是否把mempool中的花费纳入判断。
  2. 成功结果包含bestblock、confirmations、value与scriptPubKey;confirmations为0可对应尚未确认但在mempool可见的输出。
  3. 返回null可能表示输出已花费、不存在或被mempool中的交易花费,必须结合原交易与mempool参数解释。(有限确认)

Bitcoin Core gettxout:仍要回到现场确认的部分

裁剪不会改变当前UTXO集合,但节点同步状态和mempool视图会影响即时判断,关键支付需等待确认。

Bitcoin Core gettxout:四个不能跳过的检查点

  • 要问:txid与vout定位是否与当前环境一致? 验收目标:用txid与vout定位直接回答搜索意图并形成可执行核验信息。
  • 要问:mempool开关是否与当前环境一致? 验收目标:用mempool开关直接回答搜索意图并形成可执行核验信息。
  • 要问:结果字段是否与当前环境一致? 验收目标:用结果字段直接回答搜索意图并形成可执行核验信息。
  • 要问:null分支是否与当前环境一致? 验收目标:用null分支直接回答搜索意图并形成可执行核验信息。

Bitcoin Core gettxout的证据出处

  • Bitcoin Core gettxout的一级来源 1:Bitcoin Core Docs。用于正式字段、流程或产品说明
  • Bitcoin Core gettxout的一级来源 2:Bitcoin Core 31.0。用于实现路径、比较基准或风险边界

与Bitcoin Core gettxout直接相邻的站内主题

Bitcoin Core gettxout的当前部署若与文档不一致,应先确认版本再操作。