不久之后,比特币用户也许可以从名为“ Taproot”的技巧中受益。第一的 建议的 由比特币核心贡献者和前Blockstream首席技术官格雷戈里·麦克斯韦(Gregory Maxwell)共同开发,Taproot将扩展比特币的智能合约灵活性,同时提供更多的隐私权。即使是最复杂的智能合约,在区块链上也通常无法与常规交易区分开.
尽管这是一项艰巨的任务,但这不只是理论上的。几个最丰富的比特币核心贡献者—包括Pieter Wuille,Anthony Towns,Johnson Lau,Jonas Nick,Andrew Poelstra,Tim Ruffing,Rusty Russell以及事实上的Gregory Maxwell —都在研究Schnorr签名提案,其中包括Taproot,所有一次协议升级.
这是Taproot及其作用方式.
P2SH
所有的比特币本质上都是“锁定”在脚本中的:嵌入在区块链中包含的交易中的几行代码,定义了如何在下一次交易中花费这些代币。消费条件通常涉及提供签名以证明硬币的所有权。但是其他众所周知的条件例如包括时间锁定(硬币只能在特定的块高度或特定日期之后使用)或多重签名(只有在一组私钥中有一定数量的私钥提供签名时才可以使用硬币).
可以混合和匹配不同的条件,以创建复杂类型的智能合约。这样的合同的一个例子是,如果爱丽丝和鲍勃都签了字,就可以用硬币, 或者 如果一个星期后爱丽丝一个人签字, 或者 如果鲍勃一个人签名,同时还提供了一个秘密号码。首先满足这三个条件中的哪一个,是如何使用硬币的.
自2012年以来,脚本(条件)一开始通常是不公开的;只有新的代币所有者知道如何使用它们。这是通过称为P2SH(按脚本哈希付费)的技巧完成的,最初,区块链中仅包含脚本的哈希。这个看似随机的数字保存着硬币。当所有者花费硬币时,他会揭示整个脚本 也 脚本的“解决方案”。然后,任何人都可以使用初始哈希值来检查提供的脚本是否确实是锁定硬币的原始脚本,并且可以立即得出结论,满足了脚本的要求.
尽管如此,当硬币用完后,当前仍需要显示所有可能满足的条件,包括不满足的条件。这有两个主要缺点。第一,它的数据量很大,尤其是在有很多条件的情况下。第二,对隐私不利。每个人都可以了解花钱的所有不同方式,例如,可以揭示使用了哪种钱包,甚至更多。.
桅杆
MAST(Merkelized抽象语法树)是一种建议的解决方案,它使用Merkle树(密码学家Ralph Merkle发明了数十年的紧凑数据结构)来解决这两个缺点。简而言之,可以使用这些资金的所有不同条件是 个别地 散列(而不是合并为单个散列)并包含在Merkle树中,该树最终产生一个散列:Merkle根。默克尔(Merkle)的根部“锁定”了硬币.
独特的好处是,如果 任何 在显示Merkle树中的数据中,可以使用Merkle根和一些其他数据(称为Merkle路径)来验证Merkle树中是否包含特定数据。默克尔树的其余部分仍被散列并隐藏.
使用MAST,这意味着只需要显示所满足的条件。如果在上面的第一个示例中,爱丽丝一个星期后独自花掉了这笔资金,那么她只是揭示了这种情况(以及默克尔路径)。没有人知道这笔钱也可能是爱丽丝和鲍勃一起花的,或者如果鲍勃添加了一个秘密号码,也可能是鲍勃一个人花的。与复杂的P2SH智能合约相比,这使MAST的数据效率更高,并增加了启动时的私密性。.
但是使用Schnorr,Taproot可以做得更好:交易可以掩盖一个MAST结构的存在.
施诺尔
长期以来,Schnorr签名方案一直是许多比特币开发人员的心愿单,目前正在开发中,以作为软叉协议升级进行部署。许多密码学家认为Schnorr签名方案是该领域中最好的,因为它的数学特性提供了很强的正确性,它没有延展性,并且可以相对快速地进行验证。.
Schnorr的“线性数学”是在比特币环境中最著名的优势,它可以进行签名汇总:同一笔交易中的多个签名可以合并为一个。类似的技巧可以应用于多重签名交易。将公钥和签名都组合为“阈值公钥”和“阈值签名”,可以使多重签名交易与任何常规交易都没有区别.
签名方案可以更有趣的方式使用。例如,可以使用数据“调整”私钥和公钥。作为简化示例,可以通过将私钥及其对应的公钥乘以2来进行调整。 “私钥x 2”和“公钥x 2”仍将对应,并且“私钥x 2”仍可以签署可以用“公钥x 2”验证的消息。任何不知道原始密钥对已被调整的人甚至都不会发现任何区别。调整后的键看起来像其他任何键对一样.
这就是启用Taproot的原因.
直根
Taproot基于一个有趣的认识:无论多么复杂,几乎任何MAST构造都可以(或应该)包含一个条件,该条件允许所有参与者就结果达成一致,并简单地共同签署和解交易。在较早的示例中,如果Bob知道Alice可以独自下周领取所有资金,那么他现在最好与她合作以共同签字。 (在许多典型的智能合约设置中,如果不这样做,他甚至会受到惩罚。复杂性的确可以使每个人保持诚实。)
Taproot类似于MAST, 总是 包括所有参与者都可以合作花费资金的条件:“合作结束”。
通过使用Schnorr签名,这才变得有趣.
首先,合作社关闭将利用Schnorr的门槛技巧使它看起来像是从一个人到另一个人的常规交易。因此,将所有参与者的公共密钥加在一起,从而得到“阈值公共密钥”。与此阈值公用密钥相对应,所有参与者的签名(即他们的“阈值签名”)的组合使他们可以花费资金.
到目前为止还算不错,但是他们只能做的事情就是花这笔钱,就像正常交易一样—尚无类似MAST的结构。这就是其他施诺尔技巧的来源.
这次可以将所有可用于花费资金的替代方式(非合作结果)组合成不同的脚本。然后,将此脚本进行哈希处理并用于 调整 门限公钥。而不是前面的示例中使用的“公钥x 2”,而是生成“阈值公钥x脚本”。 (我们仍在简化。)当然,此“阈值公用密钥x脚本”对应于“阈值签名x脚本”。
现在,如果这笔钱是合作使用的,则所有参与者都将其签名合并为“阈值签名”,并使用脚本对其进行调整。由此产生的“阈值签名x脚本”使他们可以花钱。但是,重要的是,对于外界而言,所有这些仍然看起来像是常规的公钥和常规的签名-常规的交易.
仅当证明合作关闭是不可能的时,才可以显示阈值公用密钥的真实含义:已调整.
在这种情况下, 原版的 公开了阈值公共密钥和脚本。这证明此特定脚本已对“阈值公共密钥x脚本”进行了调整。因此,就像P2SH中的哈希一样, 调整 向全世界证明,如果满足此脚本中指定的替代条件,则这些资金应为可动用的。 (而且,就像使用P2SH一样,这些条件当然会立即得到满足,以花费资金。)
替代地,代替使用脚本来调整阈值公钥,可以使用包括用于花费资金的所有不同条件的Merkle树的Merkle根来调整阈值公钥:MAST结构。然后,要花费这笔资金,只需要显示已满足的支出条件即可.
因此,Taproot提供了MAST的所有优势,而在正常情况下,没人会知道常规交易会将如此复杂的智能合约隐藏为后备.
这是Taproot概念的概述。具体实施方式可能会有所不同。有关更多详细信息,请阅读 原始Taproot提案 通过格雷戈里·麦克斯韦(Gregory Maxwell)或观看 这个演讲 彼得·伍耶(Pieter Wuille).