静默支付在找币时到底扫什么:增量扫描、成本与遗漏区块的找回 图 1
静默支付在找币时到底扫什么:增量扫描、成本与遗漏区块的找回 · 图 1

静默支付(BIP352)用一个公开标签代替公开地址:对方给你标签,链上每笔付款的地址都是临时生成、彼此无法关联的(机制本体见 BIP352静默支付如何避免地址复用?)。硬币的另一面是找钱:钱包不再盯一个地址,而要扫描全链交易重新试算。这篇文章讲的就是这份“看不见的账单”。

扫描一次要付多少计算

收到一笔可能付给你的静默付款,钱包要做的事大致是:对标签里的公钥与交易输出做一次性密钥协商,得到候选私钥,再算出对应的 taproot 输出脚本,与区块里的脚本比对——两次离散对数级的运算,外加与扫描算法匹配的输出遍历。实际耗时高度依赖实现与架构:把区块喂给本地扫描器的方案在移动端可能以小时计,接入专用索引服务或桌面端优化的实现可以把全历史扫描压到更短的量级,差异本身就是这套方案的核心工程话题。这也是为什么静默支付仍是较新的提案族(BIP 351/352 以规范仓库当期文本为准):发送侧改造小、普及快,收款侧的扫描成本则要等扫描器、索引服务与节点能力逐步补齐,各钱包的接收支持进度差异明显,以所用钱包的发布说明为准。

增量扫描与历史补扫:两段各管一头

钱包不会每次同步都从零扫起。工程上扫描责任通常分两段:日常增量扫描覆盖从钱包设定起始高度到链头的新增区块,是你日常“新钱到没到”的通道;另一段是向历史方向的补扫,用来找回可能遗漏的更早区块。各实现对补扫范围、触发方式和默认参数的命名与取值都不统一,本文不锁定具体数字;可以确定的是:超出既定范围的历史一般不会自动补扫——这不是丢币,而是需要你显式把扫描范围往前推(重新扫描的通用思路见 rescanblockchain怎样限定高度?)。

错过最新高块怎么办

静默支付的入账依赖扫描器看见那笔交易。如果你的节点落后了链头,或者标签换了扫描还没轮到,钱不会消失:输出一直躺在链上,扫描器追上后自然认领。要主动核对,可以拿付款交易的 TXID 在支持的钱包里确认认领状态;静默支付没有“待确认地址”这种链上实体,链上只能看到付款方构造的那笔普通输出(时间锁类交易的确认逻辑可参照 交易最终性是什么?它和确认数有什么区别)。

快速问答

问:扫描成本会一直增长吗?同步正常的钱包只做增量扫描,成本平摊后接近“每个新区块试算若干输出”,与首次全历史扫描不是一个量级。 问:公开标签泄露了会怎样?别人只能给你付钱,看不到你收到的钱和其他人的关系;但标签泄露不等于私钥泄露,隐私与资金安全是两条线。 问:为什么我换了节点就“找不到钱”?扫描状态跟钱包数据走,新节点需要重扫既定范围;如果入账在范围外,需要手动扩展扫描范围。 问:静默支付会影响发送方费率吗?不会,发送方构造的就是普通交易,只是地址来源不同。

常见误区

一是把“没扫到”当成“没到账”,静默支付的认领完全由接收方扫描决定,链上不会为它单独立一行账。二是以为扫描成本由付款方承担;成本在收款侧,这是隐私方案常见的非对称代价。三是把 BIP351 标签和过去的支付码方案混为一谈,两者的密钥派生与扫描协议不同。

小结

静默支付用收款侧的扫描换地址不可关联性。理解增量与补扫的分工、成本量级与找回路径,你才能判断它适合日常收款还是高价值冷收款——后者通常希望把扫描责任压给稳定的自有节点。

风险提示:本文描述协议与实现参数,参数可能随版本演进,不构成投资建议。