把冷钱包的扩展公钥挂进 LND:wallet accounts 导入的观察边界与历史盲区 图 1
把冷钱包的扩展公钥挂进 LND:wallet accounts 导入的观察边界与历史盲区 · 图 1

把冷钱包的扩展公钥挂到在线服务器上监控充值,是自托管世界的常规操作。比特币核心钱包的做法是 descriptor 观察钱包,而闪电节点 LND 的钱包里也有对应机制:以”账户”为单位组织密钥,允许把一串外部扩展公钥导入为一个只观察、不持钥的账户。命令入口在 lncli wallet accounts 命令组下。本文基于 0.19.0-beta 源码,讲清导入规则、派生方案的映射关系,以及一个最容易被忽视的时间边界。

账户是什么,列表能看见什么

在 LND 0.16.0 引入账户机制后,钱包的密钥空间被切分成若干命名账户,每个账户绑定一个派生前缀与地址类型。wallet accounts list 把账本摊开,每个账户的字段包括:名字、支持的地址类型、背后的扩展公钥、主密钥指纹、派生路径、外部与内部两支各已派生的密钥数量,以及一个决定性质的布尔 watch_only——它标记该账户的私钥是否在钱包手里。默认账户持有私钥可动钱,导入的账户通常只看不花。列表同时是审计现场:派生计数能暴露地址用到第几号,外部公钥与指纹则是与硬件钱包对账的凭据。

把冷钱包的扩展公钥挂进 LND:wallet accounts 导入的观察边界与历史盲区 图 2
把冷钱包的扩展公钥挂进 LND:wallet accounts 导入的观察边界与历史盲区 · 图 2

导入的映射规则与同名冲突

wallet accounts import 的参数就是一个扩展公钥加一个名字。规则细节集中在三类键上。BIP-0044(m/44’ 起)的键必须显式指定地址类型:LND 不支持把 BIP-0044 键按传统 P2PKH 方案导入,填 nested 会按 BIP-0049 标准方案映射,填 witness 则按 BIP-0084 方案映射——同一串公钥,指不同的地址类型会进不同的密钥范围,这是导入前后对不上地址的头号原因。BIP-0049 的键同样要指定类型,用来区分标准 BIP-0049 方案(外部与内部都用嵌套隔离见证)与 LND 自己的扩展方案(外部嵌套、内部原生见证)。可选的主密钥指纹标注的是根密钥 m 的指纹,部分硬件钱包要靠它识别账户归属。名字冲突的处理很果断:同名账户哪怕密钥范围完全不同也直接报错,防止两个钱包数据混写进同一个名字。

时间边界:只认导入之后发生的事

proto 与命令行帮助都写明了同一条限制:导入账户的密钥所发生的收款与花费,只有在导入之后才会被 LND 检测到;对更早历史事件的回扫,文档措辞是”稍后支持”——在 0.19.0-beta 的说明里它仍是将来时。这意味着把一个用了两年的冷钱包扩展公钥今天导进来,过去两年的充值记录不会自动浮现,导入时点之前的对账得靠外部工具。把这条边界当成产品约束来设计监控系统,比事后惊讶于”少了一屏历史”要便宜得多。另一个务实提醒:导入的是公钥,在线服务器因此永远动不了这些钱——这既是安全卖点也是功能天花板,热转冷容易、冷转热必须回到持钥侧。

与相邻机制的分界

不要把它和另外两件东西混淆。单把公钥导入钱包(不带账户层级的裸密钥监听)是另一条命令 import-pubkey,0.19.0 起提供,适合临时盯一把特定公钥;账户导入则是把整棵子树挂进来,批量地址随用随发。也不要与闪电通道资金混账:账户管的是链上收付,通道余额在另一套账本里,两条线在账户列表的视角里互不越界。对隐私敏感的用户还应记得扩展公钥本身的分量:拿到它的一方可以枚举你未来所有收款地址,交付之前要想清楚它能被用来推算什么。

风险提示:观察账户无法动用资金,历史回扫能力以你所用版本文档为准;扩展公钥泄露会带来地址关联与隐私暴露面;导入时地址类型指定错误会导致监控地址与实际收款地址不一致,上线前请逐地址核验;本文不构成任何投资建议。