撰文:金色财经0xjs
2023年10月19日,闪电网络开发商Lightning Labs宣布Taproot Assets协议上线。Taproot Assets协议支撑在比特币和闪电网络上发行财物。
什么是Taproot Assets协议?Taproot Assets协议怎样发行、搬运财物?本文带你一文读懂。
Taproot Assets协议
依据Taproot Assets协议BIP,Taproot Assets协议是一种构建在比特币上的Taproot原生财物(Taproot-native asset )层。Taproot财物能够在比特币链上表明恣意财物,而不会导致比特币网络胀大。该协议的规划使得与Taproot财物交互的买卖与惯例比特币买卖没有差异。
Taproot财物运用嵌套财物脚本树(nested asset script tree,这是一个merkle-sum Sparse Merkle Tree或MS-SMT)。其扩展了基础Taproot脚本树,该脚本树将有用见证人作为结构化元数据提交,从而能够证明财物在买卖图中的移动。Taproot财物搬运的证明能够运用密封证明(hermetic proof )进行验证,或许运用外部维护的Universe进行验证。Universe是一个索引链上财物发行+搬运的MS-SMT。
Taproot Assets支撑经过闪电网络通道(基于BOLT协议套件)进行链外单跳和多跳传输,后者运用Taproot Assets独特的嵌入式财物脚本系统来表现。一系列链上和链下Merkle证明促进了链上Taproot财物传输的轻客户端验证,能够经过将信赖关系托付给活动的Universe实例来紧缩这些证明。
理解Taproot Assets协议需求的几个概念
Taproot买卖
Taproot是BIP 341中界说的一种新买卖类型,自2021年11月起在比特币主网上线。 Taproot买卖与传统比特币买卖的主要差异在于,控制脚本包括在称为“tapScript分支”的树结构中,该结构是暗里许诺参与买卖。假如运用KeySpend途径来移动比特币,则不需求透露这些脚本。
虽然传统买卖需求揭露整个脚本,但Taproot买卖能够运用密钥来防止揭露脚本,假如密钥花费途径不可行,则仅在区块链上揭露脚本的执行部分。一切其他脚本途径都能够保持私有,或许有挑选地在链外揭露。
这使得创立更杂乱的脚本成为或许,而无需添加在keySpend途径中向区块链提交额定数据的本钱,以及对修剪后的脚本数据进行有用验证。在Taproot Assets的背景下,它答应人们将恣意数据可证明地附加到买卖中,而无需在链上走漏这些数据。
Taptweak:许诺哈希
将包括此类恣意数据的买卖称为许诺。一旦买卖被包括在区块中,咱们就现已许诺了该数据,而且不能再更改或修正它。
为了许诺数据,人们运用称为“Taptweak”的技巧来调整Taproot支出密钥的公钥。它答应人们有挑选地暴露数据而不走漏私钥,或许在不走漏许诺的情况下花费输出。
该技能在Taproot买卖中用于提交到Taproot脚本树,而且可用于提交任何恣意数据。
Q = 终究的Taproot公钥;P = 内部公钥;H(P|c) =内部公钥和许诺的哈希值
要运用咱们的私钥签署买卖,需求运用与公钥和许诺相同的哈希值 H(P|c) 来调整私钥。
Sparse Merkle Tree
Sparse Merkle Tree是一种能够证明Merkle树中不存在特定数据的数据结构。SMT是经过验证的键值存储,这意味着叶的键或方位和叶的内容相互绑定。
为了实现此特点,对叶子的内容进行哈希处理并创立默克尔树,其间叶子的方位对应于哈希摘要的位图(bitmap)。这必然需求一棵 256 层和 2^256 个叶子的树。树的生成是高效的——虽然尺度显着很大——因为绝大多数分支包括空叶子而且能够用零哈希来表明。
结构一个Sparse Merkle Tree
例如,咱们能够运用虚拟的哈希函数sha002结构一棵Sparse Merkle Tree,其成果为 0 到 3 之间的数字。咱们生成一棵具有 4 个叶子的Sparse Merkle Tree:0、1、2 和 3。只有叶子 2 是已填充,一切其他叶子都是空的。为了找到叶子 2(用二进制写为 10),咱们在第一个分支 (1) 处向右移动,然后在第二个分支 (0) 处向左移动。
识别Sparse Merkle Tree中的叶子
为了验证叶子 2,咱们现在只需求提醒该叶子的值,加上叶子 3 的哈希值和分支 0 的哈希值。
在Sparse Merkle Tree中,当以二进制方法表明时,每个叶子都能够经过映射来描绘为自身的攻略。地图就是Sparse Merkle Tree自身,攻略由在每个岔路口左转仍是右转的指示来表明。例如,2^4 大型 Sparke Merkle 树中的第 9 个叶子用二进制表明为 1001,这意味着咱们经过左转、右转、右转、最终左转来找到合适的叶子。
这个特点关于结构和重构Sparse Merkle Tree十分有用,因为它准确地描绘了咱们有必要重构Sparse Merkle Tree的哪些部分。更重要的是,现在能够经过每个叶子中的数据在树中的方位来描绘它们。
运用稀Sparse Merkle Tree,咱们能够将数据与公钥相关起来,并以一种易于验证的方法证明咱们现已删除了这些数据,而无需透露整个树。
在Sparse Merkle Tree中刺进一个item
因为每个项目都有其预订方位,因此树的根哈希不依赖于项目刺进的次序。
Merkle sum trees(默克尔和树)
Merkle sum树是Merkle树的一种,每个叶子都包括数值,每个节点还包括其下面的值的总和。Merkle 求sum树的根部是树中总值的总和。
Merkle Sum 树能够经过许诺与叶子相关的数量来有用验证守恒(非胀大)。
Taproot、tapweak、Sparse Merkle树和Merkle sum树大组合
Taproot Assets结合运用上述概念来发行比特币原生财物。Sparse Merkle树和Merkle sum树组合成Sparse Merkle sum树。
Sparse Merkle sum树的根被添加到Taproot Tapscript中,并一同创立Taproot地址。
Taproot Assets发行者没有自己的区块链,而是将Sparse Merkle sum树存储在链下,并向财物持有者发出证明。此类财物的一切者能够独立验证他们的帐户是否包括在树中,是否填充了适当的金额以及相应的Taproot买卖是否存在并在比特币区块链上得到承认。
怎样发行Taproot财物
财物ID
要发行Taproot Assets ,有必要首要创立它的标识符。财物ID巨细为32 字节,它是经过对三个元素进行哈希处理而生成的:用于铸造财物的出点(outpoint)、铸造者挑选的财物标签(例如品牌称号的哈希值)以及与财物相关的元信息,例如链接、图画或文档。
财物脚本
财物脚本能够有输入和输出,相似于比特币买卖。新创立的财物不包括任何Taproot财物输入,而财物搬运则包括。
财物脚本的输出界说了新创立的财物将发行给谁。更准确地说,这是经过Sparse Merkle sum树来完结的,其间每个账户都由一个 256位密钥标识,而且与该密钥对应的每个叶子都包括有关该账户持有金额的信息。
能够在一笔买卖中发行多个财物,但每个财物都有自己的财物脚本,并在其间包括Sparse Merkle 树。财物能够是仅有的,也能够对错仅有的。
财物叶
每个叶子都包括一个 TLV(类型、长度、值)blob,相似于闪电网络中运用的 TLV。它包括版别、财物 ID、金额等信息,以及与该财物之前传输相关的数据(例如签名)。
Commit to tree root
一旦咱们生成了Sparse Merkle sum树和财物脚本,咱们就能够调整咱们的内部公钥并获取合约的地址并完结买卖。
发布买卖
一旦咱们发布此买卖并在比特币区块链上承认,咱们就不可逆转地创立了该财物。关于观察者来说,该买卖看起来就像任何其他标准Taproot买卖相同。
财物证明
财物发行者现在能够有挑选地发表创立了哪些财物以及分配给了谁。最重要的是,发行者能够经过提醒特定的财物证明来向接收者证明财物已搬运给他们,其间包括财物脚本以及以接收者帐户为密钥的Sparse Merkle sum树的途径。
接收者能够验证部分Sparse Merkle sum树以从头创立脚本,调整发行者的公钥并验证创世买卖是否存在于区块链上,而部分 Merkle 树为他们供给了对发行给他们的财物的确保,以及已发行财物总数。
证明有没有包括在Sparse Merkle树中
怎样搬运Taproot财物
Taproot财物能够在链上搬运,也能够用于打开闪电网络通道。本文这里仅讨论链上买卖。
Taproot Assets并未规定个人账户持有人之间的详细交互方法,但能够是特定于应用程序的。发行人能够灵敏地界说其财物或计划怎样约束这些财物。
财物根许诺许诺树内持有的一切财物及其总和。asset_id是大局仅有的,因为它取决于其创世输出的标识符。总根能够包括多个asset_id,其资金保存是经过验证asset_tree_root来供给的。
Taproot财物地址
Taproot财物地址是财物ID、财物脚本哈希、Sparse Merkle sum树的内部密钥和金额的bech32m编码标识符,前缀为Taproot财物或taptb1(testnet)。
发行人或财物持有者能够运用 Taproot 财物地址中的信息来创立或修正Sparse Merkle sum树。此地址格式还可用于恳求该地址所持有金额的详细证明。
在树内移动财物
要搬运Taproot财物,接收者将其地址传达给当时持有者,当时持有者能够发起搬运。目前,账户持有人和发行人之间的确切互动尚未严厉界说。它能够由每个应用程序甚至财物发行者来指定。
资金发送者需求生成反映新余额的新Sparse Merkle sum树。这是经过削减某些叶子的余额并添加其他叶子的余额来完结的。Sparse Merkle sum树确保在此类买卖中不会创立新财物,而且之前对财物的讨取权将被完全抛弃。
识别账户
创立财物需求一次链上Taproot买卖,其间能够铸造多少财物或能够有多少帐户能够持有这些财物没有约束。如上所述,要搬运财物,需求从头组织Merkle树并发布新的链上买卖。在这笔链上买卖中反映多少内部Taproot Assets买卖是没有约束的。
运用这种方法,资金被分配给帐户持有者,以Sparse Merkle sum树中的叶子表明,但进行此类内部搬运的能力仅限于内部Taproot私钥的一切者。
Universe
Universe是一项为财物持有者供给财物信息以及证明的服务。它相似于比特币区块浏览器,展示了Taproot Assets买卖数据,该数据与Taproot Assets客户端一同存储在链下。主要差异在于,因为大多数与Taproot Assets相关的信息都是链下的,因此更简单隐藏。
Universe能够由财物发行人自己运转,也能够由发行人指定。也能够幻想,社区运营的Uniserve会汇总财物持有者提交的信息。
例如,给定一个已知的财物 ID,Universe能够供给有关其创世输出的信息,以及当时的元信息,例如文档、财物脚本或流通中的总代币。服务还或许了解多财物(Multiverse)或仅了解单个输出(Pocket Universe)。
Universe 在 Taproot 财物协议中没有任何特权。它生成针对比特币区块链进行验证的买卖数据。仇视Universe只能防止回来客户恳求的数据。Taproot Assets 买卖数据不绑定到 Universe。Universe 供给的数据可用性产品是由那些期望对其Taproot财物进行快速、廉价验证的实体所推动的。
Taproot财物的兼并或切割
如上所述,财物能够在财物的Sparse Merkle树内部搬运,或许能够发送到另一个Taproot密钥持有者。这称为财物切割。
在财物切割中,发送者首要需求更新自己的Taproot输出的Sparse Merkle sum树,调整余额并从头核算 Merkle 根。在兼并的情况下,根和也会改变。
此外,还将有第二个Sparse Merkle sum树致力于新的Taproot输出。第二个 Merkle 树是由财物的接收者核算的,其行为与上例中的发行者相似,不同之处在于这些财物不是从无到有,而是从之前的输出中分离出来,例如财物的创世输出。
财物证明
为了能够验证财物切割是否现已产生,新universe的运营者需求证明
-
财物是在买卖零 (t0) 时创立的
-
财物在 t0 时存在于原始 Merkle 树的叶子上
-
该叶子的余额在 t1 时设置为零
-
财物在 t1 时存在于新 Merkle 树的叶子上
一旦财物被切割,财物一切者就能够像发行人相同进行内部买卖。切割之前的每个证明一直需求包括发行证明以进行出处验证。
财物证明跟着每笔新的链上买卖线性增加。每笔财物买卖都需求审计回溯至其创世输出。仅当其引用的输出未在区块链上花费时,财物证明才有用。
Taproot财物的毁掉或失效
一旦财物的输出被花费而没有提交到新的Sparse Merkle sum树,财物就会被视为无效。
这关于第三方观察者来说并不显着,在某些情况下,最好将输出花费到新的空Merkle树上,以证明财物已被毁掉、失效或“焚毁”。
此时快讯
【USDT市值首次突破840亿美元,创历史新高】金色财经报道,据Coingecko最新数据显示,美元稳定币USDT市值首次突破840亿美元,本文撰写时达到84,042,852,332美元,创下历史新高。