什么是Taproot升级,为什么Taproot对比特币很重要?

 2023-09-26 09:10:40发布

Taproot是比特币网络的一次升级,于2021年11月14日上线。Taproot 通过使多重签名交易和时间锁定交易等复杂交易看起来像正常的比特币交易一样,增强了比特币的隐私性。

比特币网络的局限性

虽然是首款问世且普及度最广的加密货币,比特币网络仍在某些方面存在不足之处。

交易速度缓慢

创建之初,比特币每秒处理7笔交易,但随着网络受欢迎程度和用户增加,交易速度和费用也随之增长。比特币价格飙升以后,比特币网络的平均交易费用在2021年创下历史新高,达到60美元左右。

有人认为,费用高昂且交易速度缓慢将阻碍比特币网络的发展。为提升交易能力,开发人员于2017年上线隔离见证(SegWit)升级,使单个区块可容纳更多交易。然而,高昂费用仍普遍存在。

私密性

尽管比特币在其白皮书概述中指出其交易具有私密属性,但比特币网络的所有交易详情均公开可见。也就是说,根据比特币地址即可获取个人所有的购买历史记录。

为突破这些局限性,比特币已多次实施网络升级。然而,由于比特币的去中心化性质,网络修改极具挑战性。是否实施更改并非一人拍板即可,而要由社区达成共识方可决策。

什么是Taproot升级

Taproot是一次优化比特币脚本的软分叉,提升私密性、效率以及网络处理智能合约的能力。这是自2017年SegWit升级之后,公认的比特币重大升级。

Taproot本身是主根系植物的意思,Taproot提出者Gregory Maxwell解释道,他希望比特币交易支付的过程中,能够像主根系植物一样,关注大大的主根,而隐藏那些不必要的细小分支。

Taproot

Taproot主根系植物图解

Taproot升级由3项不同的比特币改进提案(BIP)组成,其中包括:Taproot、Tapscript及其核心,即名为“Schnorr签名”的全新数字签名方案。

Taproot旨在为比特币用户带来诸多好处,例如提升交易私密性和降低交易费用。还将让比特币执行更多复杂的交易,从而拓宽用例,与以太坊一较高下,尤其是智能合约功能和网络对去中心化金融(DeFi)和非同质化代币(NFT)的支持。

Taproot提案最初由Bitcoin Core开发者Greg Maxwell在2018年1月提出。2020年10月,Pieter Wuille创建代码拉取请求,将Taproot并入Bitcoin Core代码库。

为了全面部署升级,节点运行者须采用Taproot的全新共识规则。该提案最终得到90%的矿工支持,并于2021年11月14日在区块709,632中正式激活。

Taproot如何运作

Taproot升级由3项比特币改进提案(BIP)共同协作实现,各项提案以不同的方式相辅相成。

Schnorr签名(BIP340)

Schnorr签名提高了比特币网络验证交易的速度和安全性。该签名由密码学签名方案组成,开发者是德国数学家兼密码学家Claus Schnorr。

多年来,Schnorr的算法始终受专利保护,但该专利于2008年正式过期。Schnorr签名优点众多,尤其在短签名生成方面,以简洁高效著称。

比特币创始人中本聪采用的签名方案称为“椭圆曲线数字签名算法(ECDSA)”。选择ECDSA而非Schnorr签名算法是因为前者使用广泛、易于理解、安全稳定、轻量并且开源。

然而,Schnorr数字签名计划(SDSS)的推进可能是比特币与其他区块链网络应用新一代签名技术的起点。

Schnorr签名的一大核心优势是可以在复杂的比特币交易中提取多组密钥,生成独一无二的签名。因此,交易中各方的签名可整合为单一的Schnorr签名,这个过程称为“签名聚合”。

实际上,Taproot可以让人完全看不出来比特币脚本在运行。

例如,采用Taproot后,无论是闪电网络通道交易、点对点交易还是通过复杂的智能合约交易,不同比特币支付方式看起来毫无差别。这些交易的监控者看到的只有点对点交易。

然而,值得注意的是,这并未改变发送者与最终接收者的钱包信息暴露于外的事实。

Taproot (BIP341)

Taproot因Taproot升级而得名,其创建基础是2017年的SegWit升级,并使用默克尔化替代脚本树(MAST)来扩展比特币区块链中的交易数据量。

比特币网络中的交易由公钥和私钥保护。如需支付钱包中的数字资产,用户需先提供签名证明自己的真实所有者身份,才能转移代币。除了单一签名交易,比特币网络中的交易还可通过释放时间锁、要求多重签名(multisig)等功能来提升复杂度。

然而,复杂的多重签名交易需要多次输入和签名验证,会给区块链增加巨大数据量,拖慢交易速度。并且,交易信息在区块链中自动显示,会暴露地址所有者的敏感数据。

MAST集成后,单个MAST交易即可代表多个脚本,从而可减少所需脚本和验证的数量。复杂比特币交易发送到MAST后,并不需要默克尔树来处理交易。

MAST仅允许将交易的执行条件提交到区块链,而不是发送所有的细节。这将大幅降低网络所需存储的数据量。这不仅提高了比特币区块链的可扩展性和效率,还让比特币用户享有更高的私密性。

Tapscript (BIP342)

Tapscript是升级到比特币脚本的编程语言,为另外2项比特币改进提案(BIP)提供便利。它是一系列操作码的集合,是用于指定如何执行交易的指令。区块的可用空间变多,新功能会更加灵活,可促进比特币网络在未来支持和创建智能合约。

Taproot如何让比特币受益

Taproot升级包括三项重要的技术变化,旨在增强比特币的可扩展性、隐私性和灵活性。

  • P2SH
  • MAST
  • Schnorr签名

以下将从技术层面讨论这三个概念,看看 Taproot 升级将如何使比特币用户受益。

P2SH(付款至 ScriptHash)

比特币地址是一串字母和数字。用户可以与其他人分享,以便从他们那里接收 BTC。

比特币交易有两个主要标准:pay-to-PubkeyHash(P2PKH) 和 pay-to-scripthash(P2SH)。

在讨论 P2SH(Pay To Script Hash)和 P2PKH(pay-to-Pubkey Hash)的概念之前,让我们先了解一下比特币的背景知识:

在比特币网络中,比特币以UTXO的形式存在。例如,假设你的比特币钱包中有 10 BTC,并且你想向朋友转账 5 BTC。比特币区块链的处理方式有所不同。它花费 10 BTC(全部余额),将 5 BTC 转入你朋友的钱包,并将 5 BTC(10 BTC-5 BTC = 5 BTC)转入你自己的钱包。所以你和你的朋友各有 5 个 BTC,但他们没有花掉。

比特币使用脚本(几行代码)来规定 BTC/UTXO 的使用条件,脚本用作锁定机制,BTC 被锁定在脚本中。当脚本返回成功(即满足条件)时,BTC就被解锁。

任何人都可以将 BTC 发送到任何比特币地址。只有满足脚本中定义的某些条件,才能使用锁定的 BTC。该脚本确定接收者如何花费收到的 BTC。

为了启动交易,发送者在交易中放置一个称为“PubKey Script”的脚本。接收者(稍后付费)需要生成一个“签名脚本(又名解锁脚本)”,它是满足 PubKey 脚本的数据参数的集合。签名脚本在代码中也称为“scriptSig”。

在上面的示例中,当你向朋友发送 5 BTC 时,锁定脚本也包含在交易中。如果你的朋友想要花费这些BTC,他必须生成一个满足锁定脚本中指定条件的解锁脚本。

付费公钥哈希 (P2PKH)

Pay-to-pubkeyhash 是一种传统的比特币地址格式。地址以数字 1 开头。

只有 P2PKH 地址的所有者才能解锁 PubKey 脚本并花费通过提供公钥哈希和私钥签名收到的 BTC。私钥用于证明公钥哈希值的所有权。

正如我们上面所讨论的,脚本定义了在什么条件下可以在特定地址使用 BTC。当满足指定条件并通过网络认证时,该地址的BTC将被解锁并用于支出。

接收者首先生成公钥脚本并将其与发送者共享。发送方在发送 BTC 时将 PubKey 脚本添加到交易中。

当接收 BTC 时,如果接收者想要解锁这些 BTC UTXO,它会提供公钥哈希和私钥签名,并满足 PubKey 脚本中提到的条件。

付费公钥哈希 (P2PKH)图解

付费公钥哈希 (P2PKH)图解

例如,这些条件可以是:

  • 解锁BTC至少需要两个签名。
  • 提供密码(password)来解锁。
  • BTC需要等待一段时间才能解锁。

这些条件可用于解锁 BTC。

要发送比特币,发送者需要将其包含在交易中。公钥脚本。结果,这增加了交易量,产生的交易费用比正常交易高出约五倍。

在此,寄件人必须承担额外费用。Pay-to scripthash 可以帮助发件人避免这种额外费用。

付费脚本哈希 (P2SH)

Pay To Script Hash(P2SH)可以帮助发送者避免额外的成本,并将这个责任(额外的成本)转移给真正需要使用锁定脚本中指定的条件的接收者。Pay-to scripthash 比特币地址以数字 3 开头。

在这个交易标准下,发送者不需要将长的PubKey脚本放入他们的交易中。此处,锁定脚本被替换为兑换脚本哈希。兑换脚本哈希值是根据兑换脚本计算得出的。

兑换脚本类似于 PubKey 脚本,因为它包含接收者在输出支出之前必须满足的条件。发送者只需在交易中指明兑换脚本的哈希值即可。

赎回脚本哈希值可以转换为标准比特币地址,发送者可以将 BTC 发送到该地址,而无需执行任何特殊操作或支付额外费用。

当接收者想要解锁这个P2SH地址上的BTC时,需要生成具有相同哈希值的赎回脚本并将其包含在交易中。结果,接收者用于解锁 UTXO 的交易大小增加,执行交易的成本也增加。

例如,Alice 想发送 10 BTC 给 Bob。Alice 必须在交易中包含兑换脚本哈希。

首先,Bob先生形成一个赎回脚本,然后将赎回脚本的哈希值发送给Alice,以便Alice将哈希值添加到交易中并发起交易。如果Bob想要花费UTXO,他必须生成具有相同哈希值的解锁脚本并满足脚本中提到的条件。

请记住,Alice 只将兑换脚本的哈希值添加到交易中,而不是整个脚本。因此,Alice 不会产生额外费用。

Pay-to-ScriptHash的优势

  • 使用散列代替冗长的脚本。
  • 发送者可以将任意数量的兑换脚本哈希放入交易中,而无需知道脚本中指定的成本条件。
  • 减轻了发送方的交易费用负担。

MAST(默克尔抽象语法树)

MAST 代表 Merklized Abstract Syntax Tree。

如果你想在P2SH地址中花费BTC,则必须生成具有相同哈希值的兑换脚本并将其包含在交易中。如果脚本中指定的成本条件太高,交易量就会变得非常大。MAST 是解决这个问题的好方法。

Merkle抽象语法树是Merkle树和抽象语法树的组合。

正如 Pay To Script Hash (P2SH) 为具有 xyz 哈希值的脚本付费一样,MAST 使用 xyz 哈希值为 merkelroot 支付费用。MAST 是一种哈希树(merkle 树),它组合了来自大量条件的元素。Merkle 树的根值是所有条件的哈希值。

Merkle根和哈希树如何生成

首先,分别对所有脚本(条件)进行哈希处理。然后将计算出的哈希值与相邻的哈希值组合进行哈希计算,生成一组新的哈希值。重复二乘二的哈希计算,直到计算出最后一个哈希值。这个哈希值就是默克尔根。

假设有四组条件。首先,分别计算这四组条件的哈希值。然后将这四个哈希值配对,并计算两个哈希值;最后,将两个哈希值组合起来产生最终的哈希值。最后一个哈希是默克尔恩。

Merkle 根和哈希树是如何生成

Merkle 根和哈希树是如何生成

这个 Merkelroot 可以翻译成可以接收付款的有效比特币地址,即 Merklized Bitcoin Address。

Merkle 比特币地址有很多优点,但主要优点是可以在不知道所有脚本单元的情况下验证某个脚本是否在 Merkle 树上。该技术称为 Merkle Proof,可用于轻松验证比特币 UTXO 是否包含某些解锁条件。

在 MAST 中,BTC 绑定到 Merkle 树。这棵 Merkle 树指定了无需成本即可解锁 BTC 的所有复杂条件。每片叶子代表一个条件。要了解锁定 BTC,你必须生成一个满足 Merkle 树分支所代表的条件的脚本。

单独使用 Merkle 根,你可以验证条件是否属于原始条件集(即验证叶子节点是否位于 Merkle 树上)。一旦比特币区块链网络发现某个脚本(及其代表的条件)属于默克尔根,网络就知道该脚本是这些比特币的锁定条件,并开始验证解锁脚本。

因此,我们可以使用 MAST 锁定的 BTC,而无需生成完整的脚本并将其包含在交易中。这有助于减少 BTC 交易量。

Schnorr签名

要执行交易,你需要使用私钥对交易进行签名,以证明你是公钥背后的 BTC 所有者。但是,要执行多重签名交易,你必须提供多个签名。这些签名占用额外的空间。

以 12/20 交易为例。12/20意味着至少需要20个签名中的12个签名才能执行交易。当交易被签名时,签名也会存储在区块中。

假设1个签名大小为5字节,12个签名占用60字节内存(5*12=60),100个签名占用500字节内存。这会增加内存使用量。

Schnorr 签名解决了这个问题。假设需要 100 个签名,每个签名大小为 5 个字节,Schnorr 签名方案可以将这 100 个签名组合成一个 64 字节大小的 Schnorr 签名,节省的436字节内存(5*100-64=436)可用于存储更多交易。

推荐阅读