34 / 736WATCH

Watch-only Wallet

仅用于观察的钱包

Watch-only Wallet 可以显示收款和余额,并准备未签名交易,但不持有花费所需的私钥。要正确显示结果,它必须掌握钱包的完整规则,并获得可靠的区块链数据。

Watch-only Wallet 是只读钱包:它能显示付款记录和余额,却不持有花费所需的私钥。它也可以准备交易,再由另一个设备或程序签名。这样,你能在手机或电脑上查看钱包,同时将密钥单独保管。不过,watch-only 这个标签本身既不能说明谁持有密钥,也不能保证显示的数据正确。

爱丽丝把密钥保存在硬件钱包里,想用手机确认一笔收款。她向手机导入的是钱包的公开配置,而不是备份词。应用由此识别相关地址,并在网络中查找这些地址的交易。即使签名设备关着机放在家里,她仍能看到 20 000 sat(比特币的最小单位) 的收款和确认情况。手机并没有因此获得花费这笔钱的权限。商家也可以用同样的方法让会计查看收支,而不必交出密钥。关键在于实际导入了什么:如果输入 Seed Phrase,也就是能恢复密钥的备份词,这种隔离就不存在了。 [12]

只读应用也能导入别人的公开地址。因此,屏幕上的金额不能证明使用者有权花费,更不能证明他有足够资金偿还所有债务。应用汇总找到的 UTXO,即以往付款中尚未花费的输出。但它只能找到与导入资料相符、且历史数据中可查到的记录。地址遗漏、扫描尚未完成或服务器不可靠,都可能让结果不完整。屏幕显示零,并不单独证明比特币丢了;应先检查监控范围和数据来源。 [8] [9]

爱丽丝要付款时,只读应用会选择可用 UTXO,准备收款人、金额和手续费。输入中未用完的部分可以退回自己的钱包,这就是找零,也称 change。这些资料可以通过 PSBT 传递;它是 BIP174 定义的部分签名比特币交易格式。独立设备因此无须保存自己的 UTXO 数据库,也能取得签名所需的信息。爱丽丝必须在该设备的可信屏幕上核对实际收款人、金额、手续费和找零。被入侵的应用可能准备一笔与她本意不同的付款。还应注意 sighash 设置,它决定签名覆盖交易的哪些部分。只有检查并签名后,才应将符合已批准方案和钱包规则的最终交易广播到网络。 [2] [10]

扩展公钥 xpub 能在钱包的某个分支中派生更多公钥;它自己不能签署付款。但得到 xpub 和钱包规则的人,可以关联能够派生的地址、过去及未来的付款和余额。与仅分享一次收款地址相比,这透露的信息多得多。第三方服务器也可能从应用反复发出的查询中拼出类似图景。自行运行验证区块链的 Full Node 可以减少此类披露;加密或其他私密连接不会向目标服务器隐藏查询本身。只导出需要的账户,限制副本数量,也要保护把地址与姓名或付款用途对应起来的标签。 [1] [13] [14]

下面是配置和恢复钱包的技术参考。脚本规定花费条件;Output Descriptor 记录这些规则和派生地址所需的资料。HD Wallet 从 seed 生成一棵密钥树;seed 是用于派生这些密钥的秘密初始数据。non-hardened 派生可以从 xpub 生成更多公钥,而 hardened 派生需要私钥。Multisig 则增加了预先规定的签名数量要求。 导入地址只会观察该地址的脚本,不会覆盖未来的收款和找零地址。公钥只有在软件明确派生相应脚本时,才能覆盖不同脚本类型。账户 xpub 可以派生 non-hardened 后代,但本身不说明 P2PKH、SegWit、Taproot、内部路径或 Multisig 签名门槛。描述符补充这些规则。应从签名设备的正确账户导出,并确认网络和脚本类型,不要猜测派生路径,也就是从起始密钥开始的一系列派生步骤。 [1] [4] [7]

HD 钱包通常将收款分支 /0/* 与用于 change,即找零的内部 /1/* 分开。缺少内部分支时,支出后的部分资金可能看似消失。range 指派生地址的范围,过小可能漏掉收款。next_index 决定接下来生成哪个地址;两个程序中的该值不一致,可能导致地址重复使用。应保持活动描述符、范围和索引一致,并在签名设备屏幕上核对收款地址:恶意软件即使显示可信余额,也可能替换地址。 [6] [9]

Bitcoin Core 的 importdescriptors 用 timestamp 指定重新扫描的起点。now 跳过旧历史,0 要求从 Genesis Block 开始扫描。range 的范围和旧区块是否可用同样重要。active 决定是否使用该描述符生成新地址;internal 标记钱包内部的输出,例如找零。裁剪节点为了节省空间删除了旧区块,因此可能缺少所需历史。Rescan 只是重新发现已有交易。应保存首次使用的日期或高度,并用已知地址和交易核对恢复结果,而不只是看屏幕上的零。 [9] [10]

BIP380 定义了描述输出脚本集合的语言。示例 wpkh([d34db33f/84h/0h/0h]xpub…/0/*)#checksum 包含脚本类型、主密钥指纹、来源路径、账户公钥、分支、可变索引和校验和。这不是可直接导入的有效数据。Taproot 使用 BIP386 的 tr();BIP389 允许在一个表达式中列出多条路径。校验和能发现抄写错误,但不能认证作者。含有 xprv 的描述符携带私钥,不应放入观察协调器。 [4] [5] [6] [7]

BIP32 描述了一个重要例外:父级 xpub 加上完全经过 non-hardened 步骤派生的后代私钥,可以用于计算父级私钥。只有 xpub 不足以完成攻击,危险的是这组组合。导出账户上方的 hardened 步骤会阻止攻击跨越该边界。不要把 xprv、seed 或私钥放入观察钱包、其数据库或随附的 PSBT 文件。 [1]

观察 Multisig 需要签名门槛、脚本类型、每位共同签名者的 xpub、密钥来源和顺序,以及两个地址分支。一个 xpub 不够。即使 seed 完好,丢失描述符也可能使恢复变得困难;改变顺序或脚本封装可能产生不同地址。应在所有签名设备上核对规则和示例地址,备份带校验和的描述符或标准配置,并认识到它会暴露共同签名者之间的关系。 [4] [11]

应在私钥之外单独保存两个分支的描述符、密钥来源、网络、创建日期或高度、范围、索引、标签和 Multisig 规则。BIP329 用于传输标签,不能代替描述符或历史。请在独立配置或测试网络中演练恢复:导入公开配置,扫描历史,核对两条分支的旧地址及预期 UTXO,准备 PSBT 并用指定设备签名。广播前检查结果。Watch-only 用于观察和准备,并不授予花费权限。 [3] [9] [12]

要获得更完整的理解,请将本词条与以下词条结合阅读: Extended Public Key (xpub), 钱包, Cold Storage, Output Descriptor, PSBT, Bitcoin. 反向关联还来自: HD Wallet, Cold Storage, Extended Public Key (xpub), Output Descriptor.

DOC · 001BIP 32 — Hierarchical Deterministic Wallets规范 DOC · 002BIP 174 — Partially Signed Bitcoin Transaction Format规范 DOC · 003BIP 329 — Wallet Labels Export Format规范 DOC · 004BIP 380 — Output Script Descriptors规范 DOC · 005BIP 386 — tr() Output Script Descriptors规范 DOC · 006BIP 389 — Multipath Descriptor Key Expressions规范 DOC · 007Bitcoin Core — Output Descriptors文档 DOC · 008Bitcoin Core RPC — createwallet文档 DOC · 009Bitcoin Core RPC — importdescriptors文档 DOC · 010Bitcoin Core — Offline Signing Tutorial文档 DOC · 011Bitcoin Core — Multisig Tutorial文档 DOC · 012Electrum — Cold Storage文档 DOC · 013Bitcoin Optech — Output Script Descriptors文档 DOC · 014Sparrow Wallet — Quick Start Guide文档
修订日期: 来源优先 · 非投资建议