效率性的意思是,比特币交易的手续费是根据交易的体积来计算的,更多条件的脚本会占用更大的空间(以字节数计),交易费也会更高。 隐私性的考量是,脚本曝光会使其他人知道某些公钥之间是有身份关联的,更容易分析出公钥主人的真实身份。 在当前,比特币的合约体现为 P2SH 「地址」(实际上就是一条哈希值)。其特点是,在生成合约时,脚本可以不公开,有需要的直接给脚本的哈希值支付;但是,这些资金在花费时,与这个哈希值对应的脚本就要完全公开出来放到交易中(否则无以验证这个脚本的哈希值正是这个哈希值)。以多签名合约为例,其他人可以直接给这个多签名合约脚本的哈希值支付,但是,当多签名合约的参与者要使用这些资金时,就必须把整个脚本公开 3。 此外,在 SegWit 升级以前,单签名的个人钱包与合约钱包是泾渭分明的,前者是 P2PKH 地址,后者是 P2SH 地址,仅从地址上就可以看出来,这又是一个对隐私不利的因素。在 SegWit 升级之后,支持隔离见证的个人钱包也可采取 P2SH 的形式,但原生隔离见证地址(P2WPKH)和合约地址(P2WSH)仍然是泾渭分明的 4。 了解了这些以后,让我们来看看 Taproot 升级的三大部分(MAST、Schnorr 签名、Taproot)如何做得更好。 默克尔抽象语法树(MAST)默克尔化抽象语法树(Merklized Abstract Syntax Trees, MAST) 5 的含义是,在比特币的脚本验证中支持验证默克尔证据。 默克尔树是将多个数据元素哈希成一个哈希值的密码学方法。其结构和哈希函数的特点决定了,可以提供一些证据(哈希值)来证明,某个数据元素参与生成了这个哈希值。如下图所示:我们将(相邻的)数据元素两两不断哈希,最终生成一个默克尔根。 同理,如下图,当我要证明红色数据 「Banana」 参与生成了紫色的哈希值(默克尔根)时,我只需提供红色数据和三个绿色的哈希值就可以了,无需曝光实际上共同生成了默克尔根的其余 7 个元素。这就是默克尔树和默克尔证据的作用。 Inpidual Merkle proofs for Banana, Peach and Kumquat 聪明的读者一定想到了,有了这个功能,合约的编写者就可以把多个条件划为不同的数据元素,哈希出一个默克尔根值来;在需要以某个条件来解锁比特币时,只需证明这个条件在这棵默克尔树上即可,无需公开所有其他条件。 没错,这正是 MAST 的妙用。如下图所示,这笔资金的解锁条件有两个,而编写者把它们分割了开来,用默克尔树抽象成了一个哈希值,在以任一个条件解锁使用时,都不需要公开另一个。 MAST 在 P2SH 的基础上迈出了一大步,其提升效果首先体现在隐私性上:原本在 P2SH 中,合约在使用时就一定要公开全部的脚本内容,不论那些内容用到没用到,都必须公开;现在,有了 MAST,用户就只需要公开需要用到的解锁条件,无需公开全部内容了;同时,别人也根本不知道你还有多少个条件。 (责任编辑:admin) |