Taproot如何助力比特币

avatar
区块记
4年前
本文约2446字,阅读全文需要约4分钟
Taproot将扩大比特币智能合约的灵活性,同时在此过程中提供更多的隐私。

比特币用户可能在不久之后就能从 Taproot 中获益。Taproot最早是由比特币核心贡献者、前Blockstream首席技术官Gregory Maxwell提出的,Taproot将扩大比特币智能合约的灵活性,同时在此过程中提供更多的隐私。即使是最复杂的智能合约,在区块链上,通常也会与常规交易无法区分。

虽然是一项大工程,但这不仅仅是理论。几位比特币核心贡献者 --- 包括Pieter Wuille、Anthony Towns、Johnson Lau、Jonas Nick、Andrew Poelstra、Tim Ruffing、Rusty Russell以及事实上的Gregory Maxwell --- 正在研究一个包括Taproot的Schnorr签名提案。

下面来了解一下Taproot以及它的工作原理。

P2SH

所有的比特币基本上都被 锁定 在脚本中:嵌入在区块链上的交易中的几行代码,它们确定了比特币在下一次交易中是怎么被使用掉的。使用的条件通常涉及提供一个签名来证明币的所有权。但其他熟知的条件包括时间锁(币只能在特定的区块高度或日期之后才能被使用)或多签(只有当一组私钥中的某几个提供签名时,币才能被使用)。

不同的条件可以进行混合和匹配来创建复杂类型的智能合约。来看看这种合约的例子,如果Alice和Bob都签名,或者Alice在一周后单独签名,或者Bob单独签名的同时也提供了一个密码,币就可以被“使用”。无论这三个条件中的哪一个先被满足,都是关乎于币是如何被使用的。

从2012年开始,脚本(条件)往往一开始是不公开的,只有币的新所有者才知道币怎么能被使用。这是使用一种叫做P2SH的技巧来实现的,最初区块链中只包含脚本的哈希值。这个看似随机的数字却蕴含着币。当所有者使用比特币时,他同时揭示了整个脚本以及脚本的 解决方案。然后,任何人都可以使用初始哈希来检查所提供的脚本确实是锁定了币的原始脚本,并且可以立即得出结论,脚本的要求得到了满足。

不过,当币被使用的时候,目前还是有必要揭示所有可能满足的条件 --- 包括没有满足的条件。这主要有两个缺点。一,它的数据量很大,尤其是在条件很多的情况下。二是对隐私不利。每个人都会了解到资金可能被使用的各种不同方式,例如,这可以透露出使用了什么样的钱包,甚至可能更多。

MAST

MAST是一种拟议的解决方案,它使用Merkle树(由密码学家Ralph Merkle发明的一种有几十年历史的紧凑数据结构)来解决这两个缺点。简而言之,所有可以使用资金的不同条件都被单独哈希(而不是组合成一个单一的哈希),并包含在Merkle树中,最终产生一个单一的哈希:Merkle根。这个Merkle根 锁定 了这些币。

独特的好处是,如果Merkle树中的任何数据被揭示,Merkle根和一些额外的数据(称为Merkle路径)可以用来验证该特定数据被包含在Merkle树中。Merkle树的其余部分仍然是哈希过的和隐藏的。

对于MAST,这意味着只有满足的条件才需要被揭示。如果在上面最初的例子中,Alice一个人在一周后花掉了资金,她只是让这个条件被揭示出来(以及Merkle路径)。没有人知道这笔钱也可能是Alice和Bob一起花的,或者Bob一个人花的(他也加了一个密码)。这使得MAST比复杂的P2SH智能合约的数据效率更高,并且增加了隐私性。

然而通过Schnorr,Taproot可以做得更好:一笔交易可以完全隐藏MAST这样的构造。

Schnorr

Schnorr签名方案一直是许多比特币开发者所期望的,目前正在开发中,将作为软分叉协议升级进行部署。许多密码学家认为Schnorr签名方案是该领域最好的方案,因为它的数学特性提供了很强的正确性,它不会受到易变性的影响,而且验证速度相对较快。

作为其在比特币发展中最负盛名的特性,Schnorr的 线性数学 允许签名聚合:同一交易中的几个签名可以合并成一个。类似的技巧也可以应用到多签交易中。将公钥和签名都组合成 阈值公钥 和 阈值签名,就可以使多签交易与常规交易无法区分。

而签名方案还可以以更有趣的方式使用。例如,可以使用数据来 调整 私钥和公钥。作为一个简化的例子,一个私钥及其对应的公钥可以通过将两者乘以2来调整。私钥×2 和 公钥×2 仍然会对应,私钥×2 仍然可以签署能用 公钥×2 验证的信息。任何不知道原始密钥对被调整的人甚至不会看出任何区别;调整后的密钥看起来就像其他密钥对一样。

这就是Taproot的功能所在。

Taproot

Taproot是基于这样的认识:无论多么复杂,几乎所有的MAST构造都可以(或者应该)包含一个条件,让所有的参与者都能就结果达成一致,并一起签署结算交易。在前面的例子中,如果Bob知道Alice下周可以自己取回所有资金,他不妨现在就和她合作,一起签名。(在许多典型的智能合约设置中,如果他不这样做,甚至会受到惩罚。复杂的情况其实只是为了让大家保持诚实)。

Taproot类似于MAST,并且总是包含一个所有参与者都能够共同使用资金的条件:合作结束( Cooperative Close)。

通过利用Schnorr签名,这就是它变得有趣的地方。

首先,合作结束会使用Schnorr的阈值技巧,让它看起来像一个普通的交易。这样,所有参与者的公钥加在一起,就形成了 阈值公钥。与这个门槛公钥相对应,所有参与者的签名组合---他们的 门槛签名---就可以让他们使用资金。

到目前为止,一切都很好,但把资金当作正常的交易来消费是他们唯一能做的事情---还没有类似MAST的结构。这就是另一个Schnorr技巧所起到的作用。

所有可以使用资金的替代方式---非合作的结果---这次都被组合成一个不同的脚本。然后,这个脚本被哈希,用来调整阈值公钥。而不是像前面的例子中使用的 公钥×2,结果是 阈值公钥×脚本(简化的表达)。当然,这个 阈值公钥×脚本 对应的是 阈值签名×脚本。

现在,如果资金是被共同使用出去的,所有的参与者将他们的签名组合成 门槛签名,然后用脚本进行调整。由此产生的 门槛签名×脚本 就可以让他们使用这笔钱。然而,重要的是,在外界看来,这一切仍然只是一个普通的公钥和一个普通的签名---一个普通的交易。

只有当合作结束被证明是不可能的时候,门槛公钥才能显示出它的真实面目:被调整过。

在这种情况下,原始的阈值公钥和脚本都会被揭示出来。这就证明了 阈值公钥x脚本 是用这个特定的脚本进行了调整。所以,就像P2SH中的哈希一样,这个调整证实到,如果满足这个脚本中规定的备选条件,资金应该是可以使用的。(和P2SH一样,这些条件当然是立即满足才能使用资金。)

另外,不需要用脚本来调整阈值公钥,而是可以用Merkle树的Merkle根来调整阈值公钥,这个Merkle树包括了资金可以花费的所有不同条件:一个MAST结构。那么,要使用资金,只需要揭示已经满足的使用条件。

因此,Taproot提供了MAST的所有好处,而在正常情况下,没有人会知道一个普通的交易中隐藏着一个如此复杂的智能合约作为备用方案。

原创文章,作者:区块记。转载/内容合作/寻求报道请联系 report@odaily.email;违规转载法律必究。

ODAILY提醒,请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。

推荐阅读
星球精选