本文是《比特币下一次升级要包含的Taproot究竟是什么》的后续。如果还没读过那篇文章的话,你应该先看一下。
【这里说明一下:前文中将cooperative close译作“合作终止合约”,后来小编觉得用“合作结算合约”更好】
如果在比特币上部署了Taproot之后,很多智能合约结构看起来就跟其他常规交易一样。只要所有参与者都同意合约的结果(比如“合作结算合约”),将Schnorr签名和MAST巧妙结合起来既提供了数据传输效率,还能提供隐私性。
但是,如果Taproot智能合约非常复杂,在没有合作结算合约的情况下,需要揭示的默克尔路径的数据量仍然很大。
比特币核心开发者Gregory Maxwell的后续提案“Graftroot”可以提供与Taproot类似的好处,但没有上面所说的那种缺点,为智能合约提供更高的灵活性。
Graftroot
在使用Taproot时,智能合约的所有参与者组合他们的公钥来生成一个“阈值公钥”,就能使用他们的“阈值签名”来花费资金。而使用Graftroot时,所有参与者也会生成类似的阈值公钥,但不会去微调阈值公钥。
参与者确实创建了不同的脚本:可供花费资金的各种条件。但是,使用Graftroot,参与者会对不同的脚本都进行签名,以生成与这些脚本相对应的阈值签名。所有希望通过特定脚本作为后路的参与者接受并存储该脚本和相应的阈值签名。这种签名可以后续向全世界证明其对应脚本是一种有效的替代方案,是所有参与者都同意的一种“授权”。
假设Alice和Bob建立了一个智能合约,他们可以一起花钱,或者让Alice在一周后单独花钱,或者让Bob使用一个密码就能单独花钱。在这种情况下,Alice和Bob组合他们的公钥来创建一个阈值公钥,如果他们能够提供阈值签名,那他们就可以使用这笔资金。(只有当他们要花钱的时候,他们才会生成阈值签名。)
然后,Alice和Bob还会创建并立即为替代脚本签名。 Alice用阈值签名给允许她在一周后花费比特币的脚本签名,而Bob用阈值签名给允许他使用一个密码就能单独花钱的脚本签名。(注意,仅凭阈值签名和相应的脚本是不够的;它们只是证明脚本是Alice和Bob都同意的,但仍需满足脚本中指定的条件才能使用这笔资金。)
等到合约到期时,Alice和Bob可能会同意签名结算交易。他们一起创建一个阈值签名,就可以花费阈值公钥对应的比特币,而且其他人并不知道其他可以满足的条件,甚至不会涉及多个人,看起来就跟一笔常规交易一样。
但是,如果由于某种原因无法合作结算合约,那么谁能满足替代条件,谁就可以独自花费这笔资金。如果Bob知道那个密码,他就能将“他的”替代脚本与对应的阈值签名结合起来。其他网络参与者可以根据阈值公钥来检查阈值签名并得出结果,因为这个替代脚本是智能合约的所有参与者都同意的。因此,Bob可以顺利使用这些带有密码的比特币。或者,如果一周过去以后,Alice就可以利用“她的”替代脚本与阈值签名结合起来使用这些比特币。在这两种情况下,其他人都不知道另外的替代方案。
Graftroot的主要好处在于,它不需要关心智能合约有多么复杂,或者更准确地讲,不再需要关心有多少种可能的结算结果。虽然上面的例子只包含了两个可选脚本,但实际上Graftroot结构可以包含几百个可选脚本,并且不会对可选脚本产生任何影响。甚至当最初的智能合约构建完成后,Alice和Bob还可以添加更多条件!
不过,Graftroot也有缺点,其中一个就是它是交互式的。参与者必须相互交流才能为替代脚本签名,甚至是在花钱之前。此外,参与者需要存储替代脚本的阈值签名;如果他们丢失了这个签名,他们就没有其他解决办法了。
Graftroot的发展
那么,比特币用户什么时候才能用上这种技术呢?
好消息是,通过隔离验证,利用被称为“脚本版本控制”的功能允许以向后兼容的方式相对容易地推出一些技术升级,包括Schnorr签名、Taproot 和 Graftroot。
不过,理想情况下,那些致力于上述升级的比特币核心开发者更希望能立即推出所有这些改进方案,包括Pieter Wuille、Anthony Towns、Johnson Lau、Jonas Nick、Andrew Poelstra、Tim Ruffing、Rusty Russell和Gregory Maxwell。虽然脚本版本控制使升级变得容易,但它也要求交易中显示正在使用哪种协议升级。因此,虽然Graftroot可以完全隐藏可用的替代脚本,但脚本版本会暴露出该交易正在使用Graftroot。因此,一次部署多种协议升级可以在一定程度上避免这种问题,因为它们都使用相同的脚本版本。但最重要的是,一次部署多种升级有利于软件兼容性。
另一方面,当涉及到全天候运行的安全关键协议的共识更改时,“相对容易推出”仍然是一项艰巨的任务,因为在升级时会有不同的利益方和偏好方。每个潜在的新功能都有其自身的优缺点,所以一次组合多种升级也可能导致更多的反对意见。当然,将更多功能组合到单次升级中并不会降低开发难度。
因此,就目前而言,Schnorr签名和Taproot是优先考虑的,大部分人都建议包含在一次升级里。至于Graftroot可能就要放到后续的升级中了。