作者:Anony
引言
所谓 “比特币钱包”,笔者指的是 “帮助用户控制各种形式的比特币的软件”。之所以排除通常被称为 “硬件钱包” 的专用硬件(现在已经有了更规范的称呼 “硬件签名器”),是因为它无法独立完成这样的控制;并且,从设计目标上说,签名器侧重于安全验证,而非应用场景设计。
本文的目标是讨论比特币钱包软件在产品设计上的两种可能的方向:这两种方向,与比特币作为一种电子货币的两种用途有关;同时,得益于新技术的出现,软件钱包在这两种方向上都展现出可以可以期待的前景;最后,笔者的隐含假设是,一款比特币钱包在各方面的约束下,必须在这两种方向中二选其一,笔者当然乐于接受自己是错误的,但在本文中,笔者会尽力展现这两种路线以及支持它们的技术的差异,尝试证明这种这种假设。
这两种用途,是 “储蓄” 和 “支付”。
我们在哪儿
在讨论比特币钱包如何进一步适配比特币的这两种用途之前,仍然有必要了解一下现有比特币钱包产品的特性。观察它们的现状以及演化的过程,也许能给我们一些洞见。当前,用户能够接触到的自主保管的比特币钱包可以分成两类:“链上” 钱包和闪电钱包。
“链上” 钱包
这是当前的比特币用户最常接触到的钱包,其谱系可以一直追溯到中本聪发布的初版 “bitcoin” 软件。在这里,“链上(on-chain)” 一词的实质含义是,它帮助用户以排他的形式控制比特币网络内的交易输出(UTXO)。
(往后我们就会发现,“链上” 这种表达可能会产生有害的暗示、阻碍我们的理解。但在目前,似乎这种表述依然还是主流。)
如果要勾勒现在的链上钱包产品的特征,我们首先想到的会是一套由三个规范构成的组合:(1)BIP-32 “确定性层级式(HD)钱包” ;(2)BIP-39 “助记词”;(3)BIP-44 “多账户 HD 钱包”。
BIP-32 从单个秘密种子中派生出许多私钥,帮助现代的链上钱包摆脱了最初的 “钥匙串”模式(软件零散地生成私钥然后派生出地址),大大提高了钱包的 备份-复原 便利性和隐私型;BIP-39 则将秘密种子编码成可读、易于记忆的有序词组,也提高了备份的便利性;最后,BIP-44 让钱包的背景信息(比如货币类型、脚本类型)来决定 私钥-公钥 的派生路径,从而减少用户需要备份的信息数量。它们都大大便利了用户的 备份-复原,定义了当前的比特币钱包的用户体验基准。
但还有另外两个值得重视的特性:(1)签名器兼容性;(2)多签名。前者指的是它支持一种分工:用户将 种子词/私钥 保存在签名器中,仅传出公钥给软件钱包以派生地址、获得钱币信息、构造交易;后者指的是它允许用户通过多个密钥和阈值条件来控制资金。没有签名器支持,多签名特性是无法实现的,或者说实现了也没有意义。但是,这两种特性都是在帮助用户提升保管的安全性,而不是提升日常支付的便利性。
闪电钱包
闪电钱包帮助用户控制的是闪电通道内的余额。可是, “闪电通道” 是什么呢?它基于与一个通道对手共同控制的 UTXO;并且,双方都保存了一系列对方预先签名的交易,以确保自己可以无需对方配合就能将合法的余额退出为排他性控制的 UTXO 。
这种钱包的概念可以追溯到 2017 年(形成闪电网络的时刻)。
闪电通道允许双方瞬时、无限次相互支付;借助这些通道们所形成的网络(闪电网络),用户可以向自己并无通道连接的他人支付,并且整个过程是免信任的。
顺理成章,闪电钱包是为支付场景而设计的。相比于链上钱包,闪电钱包在支付上的优势太明显了:能够实现即时的支付确认(而不必等待数十分钟)、手续费极低,还能获得支付的凭据。然而,将这种技术带到现实中、带给终端用户时,却遭遇了许多挑战,其中一些甚至在比特币网络作出深度变更(比如交易转发规则)之后才得以解决。本文不可能历数所有这些挑战,但闪电钱包的演化确实告诉了我们一些事情。
最初,移动端 —— 可以想像是支付软件工作的主要场景 —— 上的闪电钱包几乎只是桌面端的闪电 节点/钱包 实现的移植。它有一个非常显著的特点:用户必须先将资金转移到由闪电钱包控制的链上地址,然后再花费该地址中的资金、与某个闪电节点建立通道(无法通过种子词直接导入已有的钱包)。
这种产品设计,实质上是对自己的用户作出了一些假设:他们本来就是比特币的用户(拥有比特币),只是想寻找更方便的比特币支付手段。如果用户本来就没有比特币,希望直接从闪电钱包(接收支付)开始,是会被挡在门外的。
并且,在这种模式下,用户马上就会遇到闪电通道的反直觉之处:
闪电通道都是有容量的,因此有所谓的 “收款额度” 的概念:在一条通道中,你的对手的余额,就是其他人可以通过这条通道给你发送的支付的限额;而在上述情形中,由于是用户单方面注资与他人建立通道,这条通道在一开始是失衡的,只有用户一方有余额,对方没有余额,因此用户无法收取闪电支付;只有先发送支付(让通道对手具有余额)之后,才能接收支付。
这种假设,以及 “先支付后收款” 的体验,一直到 “闪电网络服务商(LSP)” 概念出现之时才得以改变:无论什么时候,当用户要收取的闪电支付的金额超过其收款额度时,一个 LSP 会为之增加收款额度(开设新通道或为已有通道增加容量),在用户收取支付的同时,收取服务费用。这样一来,闪电钱包才真正变成开箱即用的。
除此之外,还有一种重大的用户体验挑战是资金分割(钱包内的资金分散在各处,无法在一次支付中全部动用):资金分散在多条通道中;既有排他性控制的资金,也有通道资金。前者我们容易理解,后者是怎么回事呢?最初,通道资金与链上资金是 “泾渭分明” 的:通道资金无法直接用于发送链上支付 —— 给他人发送排他性的 UTXO ;但是,用户难免要发送链上支付,即便不是在闪电钱包内的链上钱包中保存资金,也是使用另一款链上钱包以备不时之需。换言之,由于钱包软件缺乏将一种形式(链上/通道)的资金全部倾注于任意支付形式(链上/闪电)的能力,用户被迫将自己的资金安置为不同的形式。
支持 “潜水艇互换” 这样的服务之后,这一局面有了很大的好转。但最终,一种叫做 “通道拼接” 的技术起到了釜底抽薪的作用:它让通道双方可以合作式创建链上交易(无论是创建支付,还是为通道注入资金),从而通道资金既可以发送闪电支付,也可以发送链上支付(同时,闪电通道的功能不间断),因此,用户在闪电钱包中无需再保留不同形式的资金。
到目前,大多数闪电钱包都没有实现签名器支持。
案例研究
在这一节,我们举几个例子,讨论在链上钱包基础上添加闪电支付特性的尝试。
Blue Wallet 是移动端最流行的链上钱包,最初,他们为用户提供了完全托管的闪电钱包;但在 2023 年,开发者下架了这项服务。目前,用户可以在自建的桌面端闪电节点上增设一个 LNDhub 服务,然后通过 Blue Wallet 来远程使用自己的闪电节点。
Electrum 是一款同时支持桌面端和移动端的钱包。它最初也是一款链上钱包,后来增加了自主保管的闪电钱包特性,因此,用户无需将资金迁移到任何地方,就可以开设通道、发送闪电支付。这些特性至今可用,而且开发也没有中断。
Muun Wallet 是另一款移动端链上钱包,它只保留排他性控制的资金,同时尝试通过 “潜水艇互换” 服务来获得 发送/接收 闪电支付的能力。比如说,当用户要发送闪电支付时,实际上是在区块链上发送支付给服务商,由服务商发送闪电支付给收款方。在它出现的时刻,这种模式可谓相当大胆。但是,当区块确认手续费率增加时,这种支付完全得不到闪电支付的低手续费的好处。这种尝试可以说失败了。
Electrum 钱包的例子是否证明了,在产品设计中兼容储蓄场景和支付场景是有可能做到的?笔者认为,这个问题可以转换成另一种形式:如果用户已知专门为支付场景优化的钱包能提供更好的体验,他们会不会愿意多使用一款钱包软件(并且多安排一套钱包备份)?
两种方向
上文的分类实际上使用的是开发者的视角,无论是 “链上” 或是 “闪电”,强调的都是其中控制的比特币资金的形式,而不是它对用户的效用。如果我们从用户视角出发,就会发现它们是在两种方向 —— 或者说比特币的两种用途,储蓄和支付 —— 上演化。闪电钱包的演化尤其明显,从用户先存入资金到 LSP 提供收款额度,从资金分割到适应所有支付需要,功能改进的背后是用户和应用场景的假设的转换。
撇开这种技术因素,笔者认为,在一种关键的假设 —— 比特币的价值仍将继续提高 —— 之下,这两种路线的分离将越加明显。对于已经拥有排他性 UTXO 的用户来说,比特币的价值提高意味着他们将更重视安全性,将投入多一些精力和资源来改善保管装置的安全性;同时,对于还未拥有排他性 UTXO 的潜在用户来说,这意味着获得和使用排他性 UTXO 的门槛提高,必须有其它类型的钱包软件可以让他们开箱即用以及 “囤聪(stack sats)”;此外,两类用户都有支付需求。
因此,在上一章的钱包分类的基础上,总结近年来出现的新技术,我们可以归纳出比特币钱包的两种发展方向:“可以继承的钱包” 以及 “分级支付钱包”。
可以继承的钱包
为保管安全性而优化的比特币钱包走向可以继承的钱包,是极为自然的事。比特币是一种优质的财产,并且还在成长中。这本身就是我们在保管安全性上不断优化的理由之一。那么,当一个人考虑搭建或优化长期保管比特币的装置时,是否便于继承,终将成为 TA 的考虑维度之一。
与单纯应对丢失和失盗不同,继承涉及到将比特币财产有次序地移交给特定的他人,并且还应当是(当事人身故的)事件驱动的。这比以往的链上钱包所瞄准的场景 —— 单人的安全保管 —— 要更加复杂,可以说复杂很多。在这方面,一种取得重大进步的技术是 “Miniscript”,它让用户可以自主编程带有时间锁的花费条件,进而,编程出优先级不同的花费条件(公钥权限),随着时间流逝依次启用,从而支持当事人身故(资金未被更高优先级的花费条件花费)条件下的资产移交(花费权限启用)。
目前,多款软件钱包和硬件签名器都已支持 Miniscript,只是 Miniscript 编程出来的比特币脚本属于隔离见证 v0(P2WSH)脚本,其隐私性和经济性还可通过使用 Taproot (P2TR)脚本来进一步优化。
Miniscript 也许不是这条路的终点。但 “可以继承” 无疑是以安全保管为要点的比特币钱包的前进方向。
分级支付钱包
尽管 LSP 帮助闪电钱包解决了收款流动性的问题,使闪电钱包可以做到开箱即用,但是,由于建立闪电通道同样是生成一个链上 UTXO,依然有相关的使用成本。举个例子,在用户启用一个新的、带有 LSP 的闪电钱包,并以收取闪电支付作为启动步骤时,LSP 会对这笔支付的数额设定一个下限 —— 这笔支付应该在扣减 LSP 的手续费之后,还能大于粉尘面额,从而让用户在闪电通道的承诺交易中拥有一个大于粉尘面额的输出来表示其通道余额。
门槛大大降低,但还没完全消除。LSP 的手续费和粉尘面额,用比特币来计价也许并不大(也许只是 1000 聪),但换算成法定货币,就未必了。
不论是为了让比特币能够以更微小的形式嵌入其它应用中,还是为了号召朋友们尝试一下比特币、帮助人们从小额开始积累比特币,都理应有更加轻量的方案。
幸好,正如 Giacomo Zucco 指出的,不同形式的比特币的安全性和便利性是一条光谱,我们可以尝试使用更便利的方案帮助用户起步,然后,当用户积累了一定数量的聪时,再换用更加安全的形式(比如闪电通道)。这就是 “分级钱包” 的概念。
比如,考虑一下 bitcoin ecash 。它是一种 “铸币协议”,用户向自己信任的铸币厂发送闪电支付,铸造出同等数额的 ecash token;这种 token 可以事后再向铸币厂兑换成闪电支付;其特殊性在于,由于应用了 “盲签名”,铸币厂无法跟踪用户的支付。由于 token 自身携带了铸币厂、钱币面额、花费条件等一切信息,它就像一种银票,铸币厂见票即付;那么,管理 ecash token 的钱包软件就可以做得极度轻量。用户可以像发送文字消息一样发送支付。当前,流行的比特币 ecash 协议有两种:Cashu 和 Fedimint 。
也许有读者会指出,这些 ecash 协议终究是一种托管方案,不应该让它们进入自主保管钱包。但在笔者看来,ecash token 的自包含特性非常吸引人,它是我们目前已知最轻量的比特币,并且,盲签名使其隐私性有很好的保证。盲签名使之与我们已知的托管链上钱包和托管闪电钱包(在托管商面前毫无隐私性)有重大的区别。因此,至少可以考虑,在足够的安全提醒和数额约束之下,让用户使用它。
另外,可以考虑 Ark 。它是一种 “共享 UTXO” 协议,让许许多多用户能够容身于一个 UTXO 中,还能保证单方面退出权利。每个共享的 UTXO(资金池)有一个服务商;在支付时,支付方在一个资金池中向服务商支付,支付方在创建另一个资金池时向收款方支付,而 Ark 协议能让两个动作绑定,以实现免信任性。每个资金池都通过时间锁设置了存续时间,使得服务商可以在终结之时一次性清扫池内的资金、节约链上交易手续费。共享 UTXO 使许多用户能够分摊链上操作成本、降低了每一位用户的使用成本;同时,它不使用 “通道” 的概念,自然也就无所谓收款额度和通道管理,因此也可以做到开箱即用。但是,由于免信任性依然要求用户在退出资金池时,其资金能形成一个 UTXO(超过粉尘面额),它同样有可能为新用户设置初次收款门槛。
总之,为了接纳资金数额更少的用户,我们需要探索分级钱包。而这种钱包(用到了多种为便于支付而设计协议)会自然与为支付而设计的钱包形成概念上的融合。
隐私强化方案
还有一种特性,笔者认为它可能只会是 “可继承的钱包” 的一个插件,那就是隐私强化方案,比如 CoinJoin、PayJoin 。一方面,这些概念都是在链上交易的基础上形成的;另一方面,这些交易都是多方交易:一笔交易中存在来自多个参与者的输入和输出,为了构造这样的交易,参与者们可能要多次沟通,甚至可能协调失败,因此,如果参与者的输入并非自己排他性控制的、而是与其他人共享控制的(比如闪电通道或 Ark),则显然在参与这样的交易时会面临更多麻烦。因此,这些隐私强化方案似乎天然更适合在储蓄钱包中实现,而不是在支付钱包中实现。不过,由于支付钱包所用的协议(比如闪电网络)本身已经提供了相当不错的隐私性,也许这些用户也不那么需要这些隐私强化方案。
还有一种相对特殊的隐私强化方案是静默支付。静默支付让用户可以发布一个静态的收款码,任何人向该收款码支付都会自动为其主人生成一个截然不同的(单签名)地址,这就为其主人自动应用了一种重要的隐私保护措施 —— 不重复使用地址。并且用户不再需要为接收支付而为每一个支付方主动提供一个新地址。静默支付的特殊性还在于,使用它的同时,用户也就不再需要应用 BIP32 来为自己生成单签名的地址。这有可能会给单签名钱包的设计带来重大变革。不过,它有一个重大的不便之处是,用户无法依据确定性的钱包地址(只看交易的输出)来扫描支付,而必须根据每一笔交易自身的信息来检验其中是否包含对自己的支付,也即软件的使用开销会增大。
结语
本文总结了自主保管的比特币钱包的现状,并设想了新的技术如何集成到现有的产品模式中、进一步满足产品的使用场景。
当前的比特币钱包可以分类为 “链上钱包” 和 “闪电钱包”,然而,这是从技术元素出发的分类;从用户角度看,它们的用途和理想形态可以说是 “储蓄钱包” 和 “支付钱包”。作为储蓄钱包,它们的下一个阶段是 “可以继承的钱包”,其中发挥重要作用的技术可能是 Miniscript 。而作为支付钱包,除了强化支付的便利性,它们还承担接纳新用户的责任,因此,它们的下一个阶段是 “分级的支付钱包”。此外,隐私强化方案更有可能集成到储蓄钱包中。
(完)