钱包说没钱,UTXO 扫描器说你很有钱:scantxoutset 的三种模式与盲区 图 1
钱包说没钱,UTXO 扫描器说你很有钱:scantxoutset 的三种模式与盲区 · 图 1

一、三种模式怎么分工

scantxoutset 与常规钱包扫描的路线不同:它不看交易历史,直接遍历节点当前维护的未花费输出集合,按脚本逐个匹配后返回结果。第一种用法是 scan 模式:把地址或脚本人肉拼成描述符——例如 addr(地址)sh(wpkh(公钥))——让工具在 UTXO 集合里直接找能对上号的输出。好处立竿见影:一笔从未在链上花出过的裸 multisig 收款,不在任何钱包的脚本表里,交易索引也懒得为它建地址索引,钱包界面显示零余额;但按脚本扫 UTXO 能当场把它揪出来——这是”链上明明有币、钱包却说没有”的经典解法之一。

第二种模式 solvable 是给托管型钱包的懒办法:不用你逐个枚举脚本,钱包遍历自己描述符表里全部可解的输出挨个对。注意两种模式的输出都只报汇总计数、总金额与外部脚本列表,不会把私钥相关信息带出来——这是设计边界,不是丢字段。第三种模式 expand 根本不扫描,只把传入的描述符补全并返回其末尾的校验和——描述符末尾 # 后那串短码专门拦截手抄和粘贴掉字符的错误,校验和报错九成九是描述符本身拼错了,先修字符串再怀疑钱包。

钱包说没钱,UTXO 扫描器说你很有钱:scantxoutset 的三种模式与盲区 图 2
钱包说没钱,UTXO 扫描器说你很有钱:scantxoutset 的三种模式与盲区 · 图 2

二、两个必须记住的盲区

第一个盲区:扫描对象是已确认的 UTXO 集合,内存池里尚未确认的输出不在这个世界里。刚转进来还没确认的币会显示”没有”,等确认后再扫才有——扫描前先看一眼这笔收款的确认数,能省掉一次空欢喜。第二个盲区与它的匹配方式有关:expand 出来的脚本必须与链上输出逐字节一致,签名脚本里多塞过数据的历史输出(早期地址类型里存在这类情况)可能匹配不上;遇到结果存疑,把脚本原文与区块浏览器显示的 scriptPubKey 十六进制逐字符对照,比反复换姿势重扫更快定位。

三、实操顺序

先用 expand 确认描述符本身没写错、校验和能算出来;再用 scan 逐脚本扫主地址段;怀疑钱包覆盖不全时补一轮 solvable 交叉验证;仍为空就按”未确认、脚本不完全匹配、当初根本没收到这笔”三个方向排查。大集合上的扫描按区块分块推进、可中断续扫,进度字段里的高度就是断点。把它记住成一把手术刀而不是体检仪:目标明确、切完即走,长期余额监控还是该交给完整索引的钱包。

四、和重扫钱包的区别

钱包发现资金还有一条常规路:rescanblockchain 从指定高度起重放区块交易、按脚本表匹配。两条路的适用面完全不同。重扫依赖节点的交易索引或钱包自己的记录,速度取决于要回放的区块跨度,动辄几十分钟到几小时;scantxoutset 只碰当前未花费集合,同一台节点上通常快一个数量级,但它回答的仅是”现在有没有”,不回答”历史上发生过什么”。排障时两者是接力而不是二选一:先用 scantxoutset 三秒确认资金此刻在不在,再决定要不要为找一笔陈年交易跑重扫。输出字段也提示了这层定位:命中只给交易号、输出序号与首次出现的高度,没有金额流水,没有地址簿,把它当”链上盘点”而不是”账单查询”,预期就不会错。

本文内容仅供信息与教育参考,不构成投资建议、法律或税务意见,也不构成对任何产品或服务的推荐。比特币与闪电网络操作不可逆,涉及资产操作前请自行核实关键参数并评估风险。