作者:DARIO SNEIDERMANIS

来源:https://blog.muun.com/designing-a-foolproof-script-upgrading-mechanism/

原文出版于 2021 年 11 月12 日。

Designing a foolproof script upgrading mechanism

几天后,比特币将激活它最重要的升级,Taproot。Taproot 在许多方面都让人赞叹,但它最引人注目的地方可能是,它移除了在比特币上使用任意脚本的最后一个障碍。

多年以来,比特币社区产生了许多关于利用脚本功能来提高比特币使用体验的奇思妙想。这些想法既有可扩展性上的(例如支付通道、通道工厂),也有隐私上的(原子化互换、coin pool),还有安全和资金找回上的(使用时间锁的金库,社交恢复)。

尽管这些优化都能带来一些好处,但大部分比特币钱包依然在使用原始的 “给公钥支付(pay-to-public-key,P2PK)” 脚本的一些变种。这是为什么呢?

答案在于其它脚本在效率、隐私和互通性上的缺失。

协议层的效率和隐私性

虽然从 2011 年开始(BIP13 引入 P2SH 脚本)就已经可以使用任意脚本了,但实用性上的局限却大大妨碍了在终端产品中使用任意脚本。使用更强大的脚本意味着要及支付更高的交易手续费 —— 有时候会高到让人望而却步。更糟糕的是,不常用的脚本会导致你在链上几乎完全丧失隐私性:你可以在区块链上搜索和定位任何特定脚本产生的所有交易。

这就是 Taproot 解决的问题。通过结合 Taproot 和 Musig,任何脚本都可以看起来跟常规的 “给公钥支付” 脚本没有区别。Taproot 还有一个特别吸引人的地方:它将个体的经济激励(支付更少的手续费)与提高所有用户的隐私结合在一起。

因为让任意脚本都变得更高效、更隐私,Taproot 有望在生态系统中掀起一波创新浪潮。但是,这些创新,只有在交付到用户手中之后,才能发挥作用。这就离不开钱包层的努力。

钱包层的钱包复原互通性

钱包复原的互通性是自主托管钱包(self-custodial wallets)的关键属性:它保证了,即使钱包的供应商消失了,资金也还是能找回来。因为助记词(mnemonics)是在 2013 年引入的,钱包的标准衍生路径(译者注:从单个助记词衍生出许多私钥的流程)是在 2014 年引入的,我们在 P2PK 上已经有了一个基本上可互通的复原机制,可以导入和检测所有的资金了。

但是,助记词模式依赖于所有钱包都使用同一种单密钥的脚本:P2PK。如果我们想要在一个有支付通道和多签名金库的世界里保持(和优化!)复原机制的互通性,我们需要开发新的备份和复原机制。

请看 “脚本描述符”(从 BIP380BIP386)。脚本描述符是由 Pieter Wuille 和 Andrew Chow 提出的,它提供了一种可阅读的方法来表达密钥、脚本、衍生路径和地址的任意组合,而且不会产生歧义。这些描述符使得一个程序可以为给定的脚本发现和花费资金,而且是完全可互通的。

钱包现在可以产生自己的输出描述符,并立即获得跟其它描述符软件(比如 Bitcoin Core)的互通性。一些钱包已经在这样做了!

输出描述符升级

虽然描述符为所有钱包解决了复原的互通性,但这些钱包的设置可能会随时间而改变。随着比特币的演化,新的地址类型和脚本功能也会出现,而且像支付通道这样的想法也会逐渐成熟(请想想 “eltoo”)。

以前,钱包提供商通过提示用户创建一个新的钱包来引入这些升级。这种机制给用户带来了很大的负担。他们需要记下新的一组助记词、在冷存储中存好,然后再将资金转移到新钱包里面(这需要支付链上手续费)。最后他们的资金会分散在不同类型的地址类型里。

在一个技术飞速进步的世界里,我们需要设计一种傻瓜式的描述符升级机制,来降低采用新地址类型和脚本的摩擦力。那么,钱包的备份如何做到既安全又易于升级呢?

Muun 的 Emergency Kit(“应急工具包”)就是为了这个目标是设计的。Emergency Kit 是一个 PDF 文件,记载了你的私钥和输出描述符。所有敏感材料都是用一个冷存储复原码(cold recovery code)安全加密过的。所以,这个工具包自身就是无损的,而且存储在云端也是安全的。

每次需要用到一个新的描述符时,用户都可以简单地更新自己的应急工具包。因为在使用新的描述符之前更新过,所以资金必定都能找回。同时,冷存储复原码是固定的,保管在冷存储中。

因为同一个钱包中可以存在多种描述符,用户不再需要分割资金或发起链上交易来转移它们。用户可以选择自己喜欢的地址类型,而且随着生态的成长而使用新的类型。

Muun 中的 Taproot 和 Musig

今天我们放出了新的描述符更新机制并首次将它用到 Taproot 和 Musig 上。敬请期待 Muun 的新型脚本描述符的深入讲解。

(完)