干货:比特币升级提案 Taproot 技术解读

本文将评论比特币晋级提案Taproot,该提案将引进许多全新功用。本文将从各个技能层面分析 Taproot、介绍本次晋级中触及的技能以及这些技能会给比特币用户带来哪些优点。

什么是 Taproot?

Taproot 由 Bitcoin Core 贡献者Gregory Maxwell于 2018 年初次提出。该实现目前尚在开发中。假如没有 Taproot,这些杂乱的买卖(时刻锁、多签)需求多个事务来完结,因而很容易失利。

Taproot 能够让杂乱买卖(多签、时刻锁)像单个比特币买卖那样履行,然后增强比特币的隐私性。

Taproot 晋级包括三个重要的技能改变(概念),用来增强比特币的可扩展性、隐私性和灵活性。

P2SH(译者注:P2SH 并非 Taproot 晋级的内容,但能够协助大家了解 Taproot 的晋级用意何在)

MAST

Schnorr 签名

咱们将从技能层面评论这三个概念,然后了解 Taproot 晋级会给比特币用户带来哪些优点。

P2SH(Pay-to-ScriptHash)

比特币地址是一个包括字母和数字的字符串。用户能够将其分享给其他人,以便从后者那里接收 BTC。比特币买卖首要有两大规范:Pay-to-PubKeyHash (P2PKH) 和 Pay-to-ScriptHash (P2SH)。

在评论 P2SH (Pay To Script Hash) 和 P2PKH (Pay-To-PubKey Hash) 这两个概念之前,咱们首要熟悉一下关于比特币的布景知识:

在比特币网络中,比特币的形式是 UTXO。UTXO 是Unspent Transaction (TX) Output(未花费买卖输出)的缩写,即,比特币买卖履行后构成的面额不定的单元。例如,你的比特币钱包里有 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,有必要生成满意确定脚本中规则条件的解锁脚本。

Pay-to-PubKeyHash (P2PKH)

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

只有 P2PKH 地址的一切者才干经过供给公钥哈希值和私钥签名来解锁 PubKey 脚本并花费收到的 BTC。私钥是用来证明公钥哈希值的一切权的。

正如咱们上文评论过的那样,脚本界说了特定地址上的 BTC 在什么条件下能够花费。当规则条件得到满意且经过网络验证时,该地址上的 BTC 就会被解锁以供花费。

这一流程是怎么运作的?—— 接收方首要生成 PubKey 脚本并将其分享给发送方。发送方在发送 BTC 时将该 PubKey 脚本 添加到买卖中。收到 BTC 时,假如接收方想要解锁这些 BTC UTXO,就要供给公钥哈希和私钥签名,并满意 PubKey 脚本中说到的条件。

干货:比特币升级提案 Taproot 技术解读

例如,这些条件能够是:

解锁 BTC 至少需求两个签名。

供给口令(password)才干解锁。

BTC 需求等候一段时刻才干解锁。

上述这类状况能够作为解锁 BTC 的条件。

发送比特币时,发送方需求在买卖中包括PubKey 脚本。因而,这会添加买卖的体积,产生的买卖费比一般买卖高出 5 倍左右。

这里,发送方有必要承当额定的本钱。Pay-to-ScriptHash 能够协助发送方免除这一额定本钱。

Pay-to-ScriptHash (P2SH)

Pay To Script Hash (P2SH) 能够协助发送方免除额定的本钱,并将这一职责(额定本钱)转移到真实需求运用确定脚本中规则条件的接收方身上。Pay-to-ScriptHash 比特币地址是以数字 3 开头的。

在这个买卖规范下,发送方不需求将很长的 PubKey 脚本放到他们的买卖中。这里,确定脚本被替换成了换回脚本(redeem script)哈希值。换回脚本哈希值由换回脚本核算而来。换回脚本与 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(默克尔笼统语法树)的缩写。

为什么要运用 MAST?假如你想花费 P2SH 地址里的 BTC,你有必要生成具有相同哈希值的换回脚本并将其包括到买卖中。假如脚本中规则的花费条件太多,买卖体积会变得格外庞大。MAST 能够很好的处理这一问题。

默克尔笼统语法树是默克尔树和笼统语法树的结合体。

就像 Pay To Script Hash (P2SH) 是给哈希值为某某的脚本付款那样,MAST 是给哈希值为某某的默克尔根付款。MAST 是把一个大的条件调集中的各个条件组装成一棵哈希树(所谓的默克尔树),而默克尔树的根值是一个哈希值,由一切条件哈希而成。

默克尔根和哈希树是怎么生成的?

首要别离对一切脚本(条件)做哈希核算;然后将核算得到的哈希值与相邻哈希值组合起来进行哈希核算,生成一组新的哈希值。不断重复这个两两哈希核算的进程,直到核算出最终一个哈希值为止。这个哈希值便是默克尔根。

假定共有四组条件。首要,别离核算出这四组条件的哈希值;再将这四个哈希值两两配对,核算出两个哈希值;最终,把这两个哈希值组合起来做哈希核算,生成最终的哈希值。最终这个哈希值便是默克尔根。

干货:比特币升级提案 Taproot 技术解读

这个默克尔根能够翻译成一个能够接收付款的有效比特币地址,即,默克尔比特币地址(Merklized Bitcoin address)。默克尔比特币地址有许多优点,最首要的优点是无需知晓一切脚本单元就能验证某个脚本是否坐落这棵默克尔树上。这个技能叫作默克尔证明(Merkle Proof),能够用来轻松验证一个比特币 UTXO 是否包括某些解锁条件。

在 MAST 中,BTC 与一棵默克尔树绑定。这棵默克尔树指定了能够解锁未花费 BTC 的一切杂乱条件。每个叶节点都代表着一个条件。为了解锁 BTC,你有必要生成一个满意默克尔树上某个分支所代表的条件的脚本。仅运用默克尔根即可验证这个条件是否归于原始条件调集(即验证某个叶节点是否在这棵默克尔树上)。一旦比特币区块链网络发现某个脚本(及其所代表的条件)归于这个默克尔根,网络就会知道这个脚本是这些比特币的确定条件并开始验证解锁脚本。因而,咱们无需生成完整的脚本并将其包括到买卖内,即可花费以 MAST 确定的 BTC。这有助于削减 BTC 买卖的体积。

Schnorr 签名

在密码学中,Schnorr 签名是由Claus Schnorr提出的 Schnorr 签名算法生成的数字签名。Schnorr 签名算法是一种以简略出名的数字签名方案,经过将多个签名聚合成单个签名以优化验证和认证进程。该方案适用于多签买卖。

若想履行买卖,你需求运用私钥签名该买卖,以证明你是某个公钥背面的 BTC 的一切者。可是,若想履行多签买卖,你有必要供给多个签名。这些签名会占据额定的空间。

以 12/20 多签买卖为例。12/20 指的是履行该买卖至少需求供给 20 个签名中的恣意 12 个。签署买卖时,签名也会存储在区块内。假定 1 个签名的巨细是 5 字节,12 个签名需求占用区块 60 字节(5*12 = 60)的内存,100 个签名需求占用 500 字节的内存。这会添加内存用量。Schnorr 签名刚好能够处理这一问题。

为了了解 Schnorr 签名,咱们来看两个例子:

(……)

另一种状况是多签买卖。假定你需求 100 个签名且每个签名的巨细是 5 字节,Schnorr 签名方案能够将这 100 个签名兼并成一个巨细为 64 字节的 Schnorr 签名。省下 436 字节(5*100-64=436)的内存能够用来存储更多买卖。(注:现在的椭圆曲线签名可不止 5 字节)

比特币晋级—— Taproot 方案将上述概念引进比特币区块链,增强其可扩展性、隐私性和灵活性。

比特币 Taproot:总结

本文首要围绕以下几个关键介绍了 Taproot:

Taproot 是 Bitcoin Core 贡献者 Gregory Maxwell 在 2018 年提出的比特币晋级提案。

Taproot 让杂乱的买卖如多签名买卖、时刻锁买卖看起来好像一般的比特币买卖,增强了比特币的隐私性。

Taproot 晋级首要包括 3 个技能概念 —— P2SH、MAST 和 Schnorr 签名。

比特币运用脚本注明花费 BTC/UTXO(未花费买卖输出)的条件。

Pay To Script Hash (P2SH) 能够协助发送方免除额定的买卖费,并将这一职责(额定的买卖费)转移到真实需求运用确定脚本中规则条件的接收方身上。

运用 MAST,比特币可用默克尔树笼统语法树来确定。(与默克尔根对应的)默克尔树决定了能够解锁未花费 BTC 的一切杂乱条件。默克尔笼统语法树(Merklized Abstract Syntax Trees,MAST)被提议引进比特币区块链,以削减 BTC 买卖的体积,使得接收方无需在买卖中附加冗长的脚本。仅运用默克尔根即可验证接收方生成的脚本是否归于原始条件调集。

Schnorr 签名能够将多个签名兼并成单个签名。

原文链接:

https://b10c.me/blog/004-the-incomplete-history-of-bitcoin-development/

作者:0xB10C

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注