Cointime

扫码下载App
iOS & Android

BTC生态扩容方案系列

From MetaTrust

0x0 前言

2023年12月6日,在比特币投资者们都在为铭文(Inscriptions)给比特币带来的涨幅而欢呼的时候,Bitcoin Core节点客户端的开发者Luke Dashjr浇来了一盆冷水。他认为铭文是一种“垃圾邮件”攻击,并提交了修复代码及CVE漏洞报告(CVE-2023-50428)。随后比特币社区炸开了锅,继2017年硬分叉的混乱之后,比特币社区再次陷入激烈的辩论中。

那么比特币应该更注重安全性而舍弃掉一些意料之外的feature呢,还是应该更加包容意料之外的创新而稍微容忍一点可能的安全性问题呢?我们知道,比特币的旅程不仅仅是投机和炒作,更是其生态系统和安全格局不断演化的历程。本文旨在深入探讨比特币增长的双重叙事:其生态系统内不断扩展的效用和安全措施的强化。我们将探索创新与强大的安全协议的协同作用,如何为数字资产的新时代铺平道路。

0x1 BTC生态一览及基础知识

我们知道作为加密货币革命的基石,比特币一直被人们当做黄金一样进行价值存储,在其他公链DEFI创新如火如荼之时,人们似乎都已经忘了比特币的存在。然而,恰恰是在比特币上,先驱者们最早开启了稳定币、Layer2、甚至DEFI的实验,比如现在币圈的硬通货USDT最早就是发行在比特币Omnilayer网络上,下图就是从技术实现角度对比特币生态的一个基本分类。暂时无法在飞书文档外展示此内容包括基于双向锚定的侧链、基于输出脚本(OP_RETURN)的文本解析、基于Taproot脚本的铭刻、基于BIP300更新升级的驱动链和基于状态通道的闪电网络等技术。上面可能很多术语大家还不了解,不着急,我们先熟悉以下的基础知识,然后再一一讲解这些生态的技术原理并探讨其中的安全问题。

UTXO是比特币交易的基本单位

与以太坊的账户余额体系不同,比特币的系统中并没有账户这个概念。以太坊引入了四颗棵复杂的Merkle Patricia Trie来存储和验证账户状态的变化。与之相比,比特币巧妙的利用UTXO来更加简洁的解决了这些问题。

以太坊的四棵树

  比特币的输入与输出UTXO(Unspent Transaction Outputs,未花费的交易输出),这个名字听上去特别拗口,但其实搞清楚输入、输出和交易这三个概念后,就很好理解了。

交易的输入与输出

熟悉以太坊的朋友应该知道,交易(transaction)是区块链网络中基本通信单位,一旦交易被打包出块和确认,就意味着链上状态变更的确定。而在比特币的交易中,并不是单一的地址对地址的状态操作,而是多个输入脚本和输出脚本构成。

上图是一笔非常典型的比特币2对2交易。理论上,输入的BTC数量和输出的BTC数量应该相等,实际上输出比输入少的部分的BTC就作为矿工的手续费由出块矿工赚取,等同于以太坊中的Gas Fee。我们可以看到两个输入地址在转移BTC的同时,需要在输入的脚本中做验证,证明这两个输入地址可以花费这两笔输入(也就是上一笔的未花费输出,UTXO),而输出脚本,则规定了花费两笔输出比特币的条件,也就是在下一次将这笔未花费的输出作为输入时,应满足什么条件(一般普通转账,条件就是输出地址的签名,例如上图,P2wPKH表示需要taproot地址的签名验证,P2PKH则表示需要legacy 地址私钥的签名)。具体来说,比特币交易其数据结构如下:

字段描述大小
版本这笔交易参照的规则4 字节
输入数量交易输入列表的数量1 - 9 字节
输入列表一个或多个交易输入不定
输出数量交易输出列表的数量1 - 9 字节
输出列表一个或多个交易输出不定
锁定时间锁定时间4 字节

在比特币交易中,基本结构由两个关键部分组成:输入和输出。输入部分指明了交易的发起方,而输出部分则指明了交易的接收方和找零(如果有的话)。交易费用则是输入总额与输出总额的差额。由于每一笔交易的输入都是之前某笔交易的输出,因此交易的输出成为了交易结构的核心要素。这种结构形成了一种链式连接。在比特币网络中,每一笔合法的交易都可以追溯到之前的一个或多个交易的输出。这些交易链的起点是挖矿奖励,而终点则是当前尚未被花费的交易输出。网络中所有未花费的输出统称为比特币网络的UTXO(Unspent Transaction Output)。在比特币网络中,每笔新交易的输入必须是未花费的输出。此外,每个输入还需要前一笔输出的对应私钥签名。比特币网络中的每个节点都存储着当前区块链上的所有UTXO,以此来验证新交易的合法性。通过UTXO和签名验证机制,节点能够在不追溯整个交易历史的情况下验证新交易的合法性,从而简化了网络的运行和维护过程。比特币独特的交易结构是符合其白皮书《Bitcoin: A Peer-to-Peer Electronic Cash System》设计的,比特币是一个电子现金系统,其交易结构就是在模拟现金的交易过程,一个地址上可以花费的数量取决于之前收到的现金数量,每笔交易都是要把这个地址上的所有现金都整体花费出去,而交易的输出地址通常一个是接收地址,一个是找零地址,就像在超市使用现金交易时的找零。

脚本

在比特币网络中,脚本扮演着至关重要的角色。事实上,比特币交易的每个输出实际上是指向一个脚本,而不是一个具体的地址。这些脚本就像一组规则,定义了接收方如何才能使用输出中锁定的资产。交易的合法性验证依赖于两种脚本:锁定脚本和解锁脚本。锁定脚本存在于交易的输出中,用于定义解锁该输出所需的条件。解锁脚本则与之相对应,必须遵循锁定脚本定义的规则来解锁UTXO资产,这些脚本位于交易的输入部分。这种脚本语言的灵活性使得比特币可以实现多种条件组合,展示出其作为“部分可编程货币”的特性。在比特币网络中,每个节点都运行着一个堆栈解释器,用于基于“先进先出”的规则解释这些脚本。最经典的比特币脚本主要有两种常用类型:P2PKH(Pay-to-Public-Key-Hash)和P2SH(Pay-to-Script-Hash)。P2PKH是一种简单的交易类型,其中接收方只需用相应的私钥签名即可使用资产。P2SH则更为复杂,例如在多重签名的情况下,需要多个私钥的组合签名才能使用资产,或者。这些脚本和验证机制共同构成了比特币网络的核心运作方式,确保了交易的安全性和灵活性。比如在比特币中,P2PKH的output脚本规则如下:Pubkey script: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG Input 则需要提供签名Signature script: sig而P2SH的output脚本规则如下:Pubkey script: OP_HASH160 OP_EQUAL Input需要提供多签列表Signature script: [sig] [sig...]在上述的2种脚本规则里,Pubkey script代表着锁定脚本,Signature script代表着解锁脚本。OP_开头的单词是相关的脚本命令,也是节点所能解析的指令。这些命令规则根据Pubkey script的不同来进行划分,它也决定着解锁脚本的规则。比特币中的脚本机制相对简单,只是一个基于堆栈式的,解释相关OP指令的引擎,能够解析的脚本规则并不是太多,不能实现很复杂的逻辑。但它为区块链可编程提供了一个原型,后续一些生态项目其实是基于脚本的原理发展起来的。而随着隔离见证和Taproot的更新,OP指令的类型变得更加丰富,每笔交易可包含的脚本大小得到了扩容,比特币生态迎来了爆发式的增长。

0x2 铭文技术原理与安全问题

铭文技术的火爆,离不开比特币的隔离见证和Taproot更新。技术上看,区块链的去中心化程度越高,其效率通常越低。以比特币为例,它的每个区块的大小仍然维持在1MB,与中本聪最初挖出的第一个区块大小相同。面对扩容的问题,比特币社区并没有选择简单直接地增加区块大小这一路径。相反,他们采取了一种名为“隔离见证”(Segregated Witness,简称SegWit)的方法,这是一种不需要进行硬分叉的升级方案,旨在通过优化区块中的数据结构来提高网络的处理能力和效率。

隔离见证

在比特币交易中,每笔交易的信息主要分为两个部分:基础交易数据和见证数据。基础交易数据包括了诸如账户资金结余等关键财务信息,而见证数据则用于验证用户的身份。对用户来说,他们主要关心的是与资产直接相关的信息,如账户资金结余,而身份验证的细节并不需要在交易中占用太多资源。换句话说,接收资产的一方主要关注的是资产是否可用,而不必过分关注发送方的详细信息。然而,在比特币的交易结构中,见证数据(即签名信息)占据了大量的存储空间,这导致转账效率降低和交易打包成本增加。为了解决这个问题,隔离见证(SegWit)技术被引入,它的核心思想是将见证数据从主要的交易数据中分离出来,并单独存储。这样做的结果是优化了存储空间的使用,从而提高了交易效率并减少了成本。

这样,原有的1M大小区块不变的情况下,每个区块可以容纳的交易更多,而隔离见证数据(也就是各种签名脚本)则可以占用额外的3M空间,为Taproot脚本指令的丰富奠定了存储基础。

Taproot

Taproot是比特币网络的一个重要软分叉升级,旨在提高比特币脚本的私密性、效率,以及智能合约的处理能力。这次升级被认为是自2017年SegWit升级之后的一个主要进步。这次Taproot升级包括了三个不同的比特币改进提案(BIP):Taproot(默克尔抽象语法树, MAST)、Tapscript,以及一个全新的多签友好的数字签名方案,称为“Schnorr签名”。Taproot的目的是为比特币用户提供多种好处,包括提高交易的私密性和降低交易成本。此外,它还将增强比特币在执行更复杂交易方面的能力,从而扩展其应用范围。Taproot更新直接影响了3个生态:一个是ordinals协议,它利用了Taproot的script-path spend scripts脚本来实现附加数据;另一个是闪电网络升级为Taproot Asset,从简单的点对点BTC支付进化为点对多且支持发行新的资产;还有一个就是新提出的BitVM,通过Taproot中的op_booland和op_not来把bool电路“蚀刻”到Taproot脚本里,从而实现智能合约虚拟机功能。

Ordinals

Ordinals是Casey Rodarmor在2022 年 12 月发明的协议,它为每个聪(Satoshi)赋予独特序列号,并在交易中追踪它们。任何人都可以通过 Ordinals 在UTXO的Taproot脚本中附加额外的数据,包括文本、图片、视频等。熟悉Ordinals的朋友一定知道:比特币总量是2100万个,每个比特币包含10^8个Satoshi(聪),所以比特币网络上一共有2100万*10^8个聪,Ordinals协议会将这些聪区分出来,每个聪都有一个唯一的编号。这是理论上可以做到的,但是实际上做不到。因为BTC网络出于抵御粉尘攻击的原因,转账有一个最少546聪(segwit最少294聪)的限制,也就是不可以1聪1聪的转账,根据转账的地址类型,至少要转546聪或294聪,而根据Ordinals先进先出的编号理论,至少每个区块的1号~294号聪是不可分割。所以所谓的铭刻,并不是铭刻在某个聪上的,而是铭刻在一笔交易的脚本中,而这笔交易至少要包含294聪的转账,然后由中心化的indexer(比如unisat)来追踪和识别这294聪或456聪的转移情况。

铭文在交易中的编码方式

原则上Taproot脚本的花费只能从现有的Taproot输出中进行,所以铭文理论上应该是通过一个两阶段的提交/揭示程序来进行的。首先,在提交交易中,创建一个基于script path spend的内容的Taproot输入,并在输出中指明花费/掲示的签名条件。其次,在揭示交易中,由提交交易创建的输出被花费,揭示链上的铭文内容。不过在现实的indexer场景中,并不十分关注掲示交易的作用,而是直接在输入脚本中读取由一个OP_FALSE OP_IF ... OP_ENDIF组成的脚本片段,从其中读取铭文的内容。因为OP_FALSE OP_IF的指令组合会导致该段脚本不会被执行,所以可以在其中存储任意内容的字节,而不影响原本脚本的逻辑。一个包含字符串 "Hello, world!"的文本铭文被序列化如下:OP_FALSE OP_IF OP_PUSH "ord"OP_1OP_PUSH "text/plain;charset=utf-8"OP_0OP_PUSH "Hello, world!"OP_ENDIFOrdinals协议本质上就是将这一段代码序列化到Taproot脚本里面。我们从链上找一笔交易来详细说明ordinals的编码原理:https://explorer.btc.com/btc/transaction/885d037ed114012864c031ed5ed8bbf5f95b95e1ef6469a808e9c08c4808e3ae我们可以查看这个交易的详细信息:

我们对witness字段从0063(OP_FALSE OP_IF)开始的编码进行分析,可以了解序列化的编码内容:

字段名长度内容可读内容
OP_FALSE1
OP_IF163
protocol name len13
protocol name36f7264ord
OP_111
OP_111
content type len10a10
content type24746578742f706c61696etext/plain
OP_01
inscription len10d13
inscription583832313933372e6269746d6170821937.bitmap
OP_ENDIF168

所以只要我们能把这见证脚本中的这部分的代码解码出来,就能知道铭刻的内容了。这里编码的是纯文本信息,其他数据比如html、图片、视频等也都是类似的。理论上你也可以定义自己的编码内容,甚至是只有自己知道的加密内容,只不过这些内容不能在ordinals浏览器中显示。

BRC20

2023年3 月 9 日,一位名叫 domo 的匿名Twitter 用户在推特上发布了一条推文,在 Ordinals Protocol 之上创建一个同质化代币标准,称之为BRC20标准。这个想法是可以通过Ordinals协议将 JSON字符串数据刻在Taproot脚本中,以部署、铸造和传输同质化的 BRC-20 代币。图 1:BRC-20 代币的卑微开端(domo 关于该主题的第一个帖子)

来源:Twitter(@domodata)图 2:BRC-20 代币可能的三个初始操作(p = 协议名称,op = 操作,tick = 股票代码 / 标识符,max = 最大供应量,lim = 铸造限制,amt = 数量)

来源:https://domo-2.gitbook.io/brc-20-experiment/,币安研究Token的发起方通过deploy将brc20代币部署上链,然后参与者通过mint来几乎无成本的获取Token(只有矿工费),当mint数量超过max后,mint铭文的铭刻会被indexer认为是无效的。这之后,拥有Token的地址可以通过transfer铭文来转移Token。值得注意的是,Ordinals的创始人Casey,对BRC-20 的交易占据了 Ordinals 协议的大部分比例非常不爽。他曾公开表示 BRC-20 给他创造的 Ordinals 带来了一堆垃圾。所以,Casey 团队公开发信,让币安把 ORDI 代币介绍中的 Ordinals 删掉,他不想让 Ordinals 协议和 ORDI 扯上关系。

BRC20的扩展协议

BRC20 swap

目前铭文交易最大的市场、indexer以及钱包供应商unisat针对BRC20的交易提出了BRC20 swap协议,现在已经可以允许早期用户进行试用。之前的铭文交易,只能通过一种叫做PSBT(部分签名的比特币交易)的方式来进行,和Opensea的链下签名方案类似,通过中心化的服务来“撮合”买卖双方的签名。这就导致BRC20资产只能像NFT资产那样通过挂单方式来交易,流动性和交易效率都很低。brc20 swap通过在brc20协议的json串中,引入了一种叫模块的机制,这个模块中可以部署一套类似智能合约的脚本。以swap模块为例,用户可以通过transfer将BRC20锁入模块中,也就是发起一笔给自己的转账交易,但是交易中的铭文被锁在模块中,用户在完成交易,或撤出LP后,可以发起一笔交易,再把brc20代币提取出来。目前,brc20 swap采用黑模块的扩展模式运行,黑模块是出于安全考虑,在未经共识和验证的情况下,通过模块中的资金总和来确定用户可以提取的资金,也就是任何用户不能提取超过锁入模块资产总和的资产。

当黑模块的行为被用户理解和执行,逐步变得可靠,逐渐被更多索引者接受后,产品从黑模块过渡到白模块,达成共识升级。用户也就可以自由充提资产。

此外,因为brc20协议乃至整个Ordinals生态依然处于早期,Unisat占据较大影响力和声誉,其为协议提供了完整的交易和余额查询等索引服务,有一家独大的中心化风险。其模块化运行的架构,使得更多服务商可以参与进来,从而实现索引更加去中心化。

BRC420

Brc420协议由RCSV开发。他们在原有铭文的基础上,增加了递归索引的扩展。通过递归的方式定义了更复杂的资产格式。同时,Brc420 在单个铭文的基础上建立了使用权和版税之间的约束关系。当用户mint资产时,需要给创作者支付版税,并且拥有一个铭文时可以分配其使用权并为其设定价格,此举可激励Ordinals生态更多创新。Brc420的提出为铭文生态提供了更广阔的想象空间,除了可以通过递归引用构建更复杂的元宇宙外,也可以通过代码铭文的递归引用,来构建智能合约生态。

铭文安全吗

铭文看上去只是一段“无害”的文本上链,并通过中心化的indexer来解析,似乎安全问题只是中心化服务上的安全考虑,但在链上安全方面,还是需要注意以下几点:

  • 增加节点负担:铭文会增加比特币区块的大小,这会增加节点在网络传播、存储和验证区块时所需的资源。如果铭文过多,会降低比特币网络的去中心化程度,使网络更容易受到攻击。
  • 降低安全性:铭文可以用于存储任何类型的数据,包括恶意代码。如果恶意代码被添加到比特币区块中,可能会导致网络安全漏洞。
  • 交易需要构造:铭文的交易需要进行交易的构造,并且关注ordinals的先入先出规则,以防止由于疏忽导致铭文的索引性被破坏。
  • 买卖存在风险:铭文的交易市场,不论是OTC还是PSBT,都存在资产损失风险

以下是一些具体的安全问题:

  • 孤块率和分叉率增加:铭文会增加区块的大小,这会导致孤块率和分叉率增加。孤块是指没有被其他节点承认的区块,分叉是指网络中存在多个竞争的区块链。孤块和分叉会降低网络的稳定性和安全性。
  • 攻击者篡改铭文:攻击者可以利用铭文的开放性进行篡改攻击。例如,攻击者可以将铭文中存储的信息替换为恶意代码,从而在渗透进indexer的服务器或通过木马入侵用户设备。
  • 钱包使用不当:如果钱包使用不当,钱包不能索引铭文的情况下,很可能错误的转移走铭文,导致资产损失。
  • 钓鱼或诈骗:攻击者可能通过假冒的unisat等indexer网站,来诱导用户进行铭文交易,从而窃取用户资产。
  • PSBT签名疏漏:Atomicals Market曾经因为错误的签名方法使用,而导致用户资产受损

https://metatrust.io/company/blogs/post/the-analysis-of-the-atomicals-market-user-asset-loss为了解决这些安全问题,可以采取以下措施:

  • 限制铭文的大小:可以限制铭文的大小,以减少对节点负担的影响,这一点文章开头提到的Luke已经在做了。
  • 对铭文进行加密:可以对铭文进行加密,以防止恶意代码的攻击。
  • 使用可信的铭文来源:可以使用可信的铭文来源,以防止签名问题和被钓鱼。
  • 使用支持铭文的钱包:使用支持铭文的钱包来进行转账活动。
  • 注重铭文代码及相关脚本的审核:在brc20-swap及递归铭文的新型实验中,由于代码和相关脚本的引入,需要确保这些代码及脚本的安全性。

从技术和安全的角度说,比特币铭文本质上还是一种规则绕过的漏洞,taproot脚本并不是为了存储数据而出现的,其安全性也存在一些问题。Luke对bitcoin core代码的修改从安全角度来说是正确的。Luke并未对比特币的共识层进行直接修改,而是选择调整Spam Filter(策略过滤器)模块,使得节点在接收到P2P广播消息时,能够自动过滤掉Ordinals交易。在这个策略过滤器中,有多个名为isStandard()的函数用于检查交易的各个方面是否符合标准。如果交易不符合标准,节点接收到的这笔交易将会被迅速丢弃。换言之,尽管Ordinals交易最终还是可以被加入区块链,但大多数节点不会将这类数据加入交易池,这将增加Ordinals数据被愿意将其打包上链的矿池接收的延时。然而,如果某个矿池广播了一个包含BRC-20交易的区块,其他节点仍然会对其进行认可。Luke已经在Bitcoin Knots客户端中推出了对策略过滤器(policy)的修改,并且计划在Bitcoin Core客户端中引入类似的更改。在这次修改中,他引入了一个新的参数,名为g_script_size_policy_limit,用于在多个不同的位置限制脚本的大小。这一改动意味着在处理交易时,脚本大小将受到额外的限制,影响着交易的接受和处理方式。

目前,该参数的默认值是1650Bytes,任何节点客户端都可以在启动时通过参数-maxscriptsize来设置:

不过即使代码更新,距离矿工节点全部更新为新版本还有很长的一段时间,这段时间,铭文社区的创新者们应该可以创造出更安全的协议。Metatrust Labs通过链上数据和资产追踪,在metaScore平台上已经对铭文投资风险进行了评分和监控,同时在metaScout平台上也推出比特币网络监控的规则引擎,可以帮助投资者监控比特币铭文的实时数据。

0x3 BitVM:在Taproot中蚀刻电路

上一节我们提到了用递归铭文来实现智能合约的可能性,但是因为Luke对Taproot脚本的限制,递归铭文似乎有了一些障碍,那在比特币网络上实现智能合约有没有其他的可能性呢?区块链开发商ZeroSync的联合创始人Robin Linus,在2023年10月9日发表了一篇名为“BitVM:在比特币上进行所有运算(BitVM:Compute Anything on Bitcoin)”的论文,其中提出了一个计划,旨在将智能合约引入比特币区块链。

该论文提出了一个非常有趣的思路,可以启用几乎所有的任意计算,并使用这些计算来执行在比特币链上发生的事情。而且,它完全不需要共识变更。其中的诀窍是,将所有的逻辑都放在链下,并在其他人断言了不诚实的结果时,在链上用少数几步计算来挑战这些结果。换句话说,就是将一个Verifier的逻辑放在比特币网络中,利用比特币的强共识安全,成为任何图灵完备运算层的可信第三方,再用Optimistic Rollups 的原理,来实现链外计算结果的验证。那么怎么实现将一段Verifier的逻辑放在比特币网络中呢?为了和上一节的“铭刻”相呼应,我愿称之为在比特币网络上进行电路“蚀刻”的技术。

逻辑门电路

在你的电脑或手机内部,电流通过传递一系列的1和0来实现计算机的所有功能。这是通过数以百万计的微小组件——逻辑门(logic gates)——来实现的。这些逻辑门是构成计算机芯片的基本元素。每个逻辑门都会接收一个或两个“比特(bit)”的信息,每个比特要么是1,要么是0。然后,逻辑门根据设定的规则执行一个简单的逻辑运算,如“与(AND)”、“或(OR)”或“非(NOT)”等操作。这些运算产生的结果同样是一个比特,也是1或0。完成运算后,这个结果又被传递到下一个逻辑门。这种基于简单逻辑运算的系统产生了启示:即使是最复杂的计算和功能,也都可以通过组合大量简单的逻辑运算来实现。这种逻辑门的组合和协作是现代计算机和电子设备能够执行复杂任务的基础。通过这些基本的逻辑操作,电脑能够处理复杂的算术运算、数据存储、图像渲染等功能。下图是一个非常特殊的逻辑门,叫做“与非门”(NAND gate),它可以构造任意类型逻辑门电路,当然,它不可能有其它专用类型的门那么高效,但还是能做到的。BitVM的逻辑门电路就由与非门组成。

比特币上如何蚀刻与非门

在现有的比特币脚本上构造与非门(NAND gate)可以通过结合哈希锁和两个可能不太为人所熟知的操作码:OP_BOOLAND和OP_NOT来实现。首先,哈希锁可以用来创建一个分支脚本,这个脚本可以通过两种方式中的一种来花费:要么满足哈希锁,要么满足哈希锁B。这样,路径A将1输出到堆栈,而路径B将0输出到堆栈。通过满足特定哈希锁,你可以"解锁"一个比特,这个比特作为我们要构造的NAND门的输入之一。由于你只能满足其中一个路径的要求,所以这种方法只允许用户一次提交一个比特。与非门的逻辑是接收两个比特作为输入,输出一个比特。如果两个输入比特都是1,则输出0;如果输入是其他组合,则输出1。使用两个哈希锁技巧,可以提交这两个输入,并验证输出是否正确,这就是OP_BOOLAND和OP_NOT的用途所在。OP_BOOLAND的操作与与非门相反:如果两个输入都是1,则输出1;任何其他输入组合都会产生0。OP_NOT则输出与输入相反的值。因此,通过结合使用这两个操作码,可以在脚本堆栈中取两个输入并进行反和操作。最后,可以使用OP_EQUALVERIFY以及哈希锁技巧来验证断言的输出。如果堆栈中实际的与非操作结果与用户断言的输出不一致,脚本就无法通过验证。这样,就在比特币脚本中“蚀刻”了与非门电路,实际上是通过比特币脚本来强制执行虚拟的与非门操作。

如何蚀刻大规模电路

虽然这个利用Taproot脚本实现电路蚀刻的想法很酷,但是别说像PC那种超大规模电路了,就是要实现任意一组计算,都需要成千上万的与非门电路,那在比特币有限的Taproot脚本空间里,如何覆盖复杂计算呢?BitVM提出了Taproot脚本树(Taproot Tree)的方法。为了在比特币脚本中实现复杂的计算过程,人们可以通过串联逻辑门来构建计算电路。在这个方案中,哈希锁被用来绑定各个门,从而实现顺序执行的逻辑操作。具体来说,如果一个门的脚本根据不同的哈希原像(哈希明文值)输入产生不同的输出结果C1或C2,那么下一个门会使用与之相匹配的哈希锁值作为其输入。这种方法可以实现一种惩罚机制,即如果试图谎报前一个门的结果,就只能揭晓另一个哈希锁的原像。这种机制可以用于两个用户之间的交互式计算,其中他们预先同意参与特定的计算任务,然后将计算过程分解成只由与非门组成的电路。他们需要为电路中的每个门选择合适的哈希锁,并将其编码进锁定UTXO的脚本树中。然后通过多个地址组成一个Taproot地址矩阵,再通过Taproot Tree的方式将逻辑电路蚀刻到一系列树状结构相连的UTXO交易的Taproot脚本中,最终形成一个可以处理一定计算任务的“类合约”逻辑电路。脚本树被设计成两个版本,一个用于证明者尝试证明自己的正确执行,另一个则允许验证者进行验证。接下来,双方预先签名一系列交易,以便在链上执行挑战和响应的游戏。理想情况下,整个计算过程应在链下完成并验证,然后根据计算结果在双方之间公平分配资金。但如果证明者停止合作,验证者可以在链上发起挑战。为了实现这一方案,首先需要为其注入资金。其中一个脚本路径允许证明者在一定时间后单方面提取资金。另一个脚本路径则允许验证者立即提取资金,条件是他们能揭示当前门的任一输入可能的值及其结果。如果证明者停止合作,验证者可以通过挑战证明者来在链上执行特定门的合约。整个过程涉及到多轮交互,以确保合约能够正确结算。验证者可以不断挑战证明者,直到证明者证实了每个门的正确结果,或者在证明者无法响应挑战的情况下,验证者可以在特定时间后提取资金。在理想情况下,所有操作都在链下进行,双方协作完成结算,但如果合作破裂,双方可以通过链上的挑战游戏来确保合约得到正确的解决。

落地障碍与安全性问题

这项提议涉及处理和生成的数据量极其庞大。使用的Taproot脚本树可能包含数十亿个叶子节点,而相关的预先签名交易的处理时间可能至少需要几个小时,以确保准确的结算。每个Taproot地址的预设解锁条件执行都需支付矿工费,因此地址组合越多,成本也越大。这种方案的一个主要限制在于,它只适用于两个参与者之间的交互:一个作为证明者,证明其执行的准确性;另一个作为验证者,挑战前者的声明。虽然未来的研究可能会找到方法让更多参与者加入,但目前看来还没有明确的解决方案。在合作结算的场景中,所有参与者必须在线,这对于协议的实用性和便利性构成了一定的限制。在安全性方面,主要有以下几点安全风险:1、由于成本的限制,必然大量的计算工作要放在链下进行,链下计算就存在中心化服务的一些常见安全风险。2、大量数据保存在链下,数据可用性和数据安全性也是必须要考虑的风险点3、对于所蚀刻的电路本身是否存在逻辑漏洞也是一个安全风险点,由于电路的不易读性,需要付出更多的审计成本或形式化验证成本。Metatrust曾经协助Uniswap进行了全面的形式化验证工作,并在ZK电路审计和形式化验证方面有非常丰富的经验,可以为BitVM生态的安全落地,提供保障。

0x4 Taproot Assets:升级的闪电网络

闪电网络的技术原理

闪电网络的思想和其他 Layer2 技术类似,也是将交易执行和结算分离,即把交易执行放在链外执行,以提高执行的效率;最终结算的时候,再将最终状态上链。这个原理和状态通道(支付通道)类似,而闪电网络在技术上利用了 HTLC 和 RSMC 等技术来实现了支付通道的连接,来形成了支付网络。如果将上述各种技术以迭代的关系来展开,闪电网络的技术可以有以下递进的关系:

  • 支付通道(单向):2-2 多签、时间锁
  • 支付通道(双向):在之前基础上,增加 RSMC
  • 支付网络(闪电网络):在之前基础上,增加 HTLC(哈希时间锁合约)

单向支付通道

单向支付通道的实现非常简单。只需要付款方(例如 Alice 付给 Bob)存入到一个 Alice 和 Bob 共同持有的 2-2 多签地址即可。

(来源:MIT Course: Cryptocurrency Engineering and Design)

准备退款合约

但在此之前, Bob 需要先给 Alice 签署一份退款合约(没有发布上链的交易信息),从链下传递消息给 Alice 持有(此时 Alice 未签名,即只有 Bob 的签名)。

(来源:MIT Course: Cryptocurrency Engineering and Design)这个退款合约约定了退款的日期,即此日期后,Alice 可以解锁 Alice 存在双签地址中的全部存款。这样保护了 Alice,防止 Bob 不配合后续流程而导致 Alice 资金被锁死。

存款上链

拿到 Bob 的退款合约后, Alice 此时可放心的将资金转入到双方的多签地址中,发布在比特币主网上。待主网交易确认后,即可进行下一步操作。

支付通道中付款

此时 Alice 可多次通过支付通道,以不断更新通道内双方余额的方式向 Bob 付款。具体的付款方式是,Alice 从链下将存款合约发送给 Bob(只需要 Alice 签名信息即可,因为 Bob 在需要时可自行添加自己的签名来解锁多签交易);而这个合约的输出内容,即 UTXO 的输出信息,则是 Alice 和 Bob 在该笔交易后分别的通道内余额。Alice 通过不断签署新的合约,来完成通道的内付款(状态更新)。

通道关闭/结算

整个通道是有时限的,因为 Alice 持有了一个退款合约。在到期后,Alice 可发布到主网上取走通道内的全部资金。所以,Bob 必须在 Alice 发布前将包含最新的通道状态的合约,发布上链,完成整个的结算。可以看到,支付通道只与主网发生了两笔交易,分别对应到通道的开始(存款)和关闭(结算)。中间的多次付款都不需要全局的共识和链上手续费,效率高、成本低。但是,单向通道存在一些问题:

  • 只能单向 Alice -> Bob。因为如果需要 Bob 付款,Bob 会选择性的把自己余额最大的那个合约信息广播上链,从而抵赖掉 Bob 的付款信息。
  • 总时间有限。因为退款合约的时间锁限制,到期后就得通道关闭。

双向:RSMC

双向状态通道在单向支付通道的双签基础上,需要增加使用 RSMC,即 Revocable Sequence Maturity Contract原理是:

  • 双方各自产生 Revocation Key(Alice 和 Bob 的分别记作 AliceR、BobR)
  • 双方通过不断互换合约来“刷新”状态“刷新”时,利用 Revocation Key 来“撤销”(作废)掉上一个状态将 Revocation Key 交给对方(Alice 将 AliceR 交给 Bob)双方同时需要新生成一个 Revocation KeyAliceR'BobR'
  • “刷新”时,利用 Revocation Key 来“撤销”(作废)掉上一个状态
  • 将 Revocation Key 交给对方(Alice 将 AliceR 交给 Bob)
  • 双方同时需要新生成一个 Revocation KeyAliceR'BobR'

存款前

和单向支付通道在存款前类似,Alice 也需要先持有 Bob 的“退款合约”。但在基于 RSMC 的双向通道中,这个被称为是“提交”(commit)。

(来源:MIT Course: Cryptocurrency Engineering and Design)(来源:MIT Course: Cryptocurrency Engineering and Design)

存款

Alice 和 Bob 双方互持 Revocation Key 之后,即可分别存入资金到 2-2 多签地址中,进行存款上链的交易。与退款合约类似的,Bob 对该“提交”合约也已签名;不同之处在于,输出脚本解锁条件为,Alice 在若干区块后可解锁或者 Bob 在提供了 AliceR 的信息后解锁。

交易

(来源:MIT Course: Cryptocurrency Engineering and Design)具体的过程可由付款方先发给对方 Revocation Key(收款方没有动机去撤销掉收款的交易)

  • 例如 state 1 -> state 2 是 Alice 付款给 Bob
  • 那么 Alice 先出示 AliceR
  • Bob 再出示 BobR
  • 双方可删除上一笔交易

(来源:MIT Course: Cryptocurrency Engineering and Design)

闪电网络

RSMC 解决了两方间的双向支付通道问题。但如果涉及到多人,直接从双签(2-2多签)扩展到多签的方式并不具有大规模的可扩展性。但可以基于两方的支付通道上,增加更多技术来将多个支付通道连接起来,形成可支付的闪电网络。

(来源:A Technical Introduction to The Lightning Network)最典型的实现支付通道连接的技术,是 HTLC(Hash Time Lock Contract)。

原理是在 RSMC 之上,收款人要新创建一个自己持有且待传递的 R。1.收款人 Carol 根据 R 计算出 HH = Hash(R),即 RH 的原像

(来源:MIT Course: Cryptocurrency Engineering and Design)2.收款人 Carol 将 H 交给付款人 Alice,由付款人 Alice 增加在 UTXO 的输出解锁条件中

(来源:MIT Course: Cryptocurrency Engineering and Design)合约形式的解锁条件也变为下图的形式。下图的例子中,Bob 只要向 Alice 揭示 R 即可付款(更新通道内的状态)(来源:MIT Course: Cryptocurrency Engineering and Design)3.正向的传播 H ,例如,从 Alice 和 Bob 的通道内先用 H 更新合约;然后 Bob 和 Carol 的状态通道也类似的使用 H 来更新。但是在传递过程中,需要确保前一段付款人可收回退款的时间,要晚于后一段付款人的可收回退款时间。例如,下图例子中的 Alice 给 Bob 的付款可在 17:00 后收回,而 Bob 给 Carol 的付款可在 16:00 (早于17:00)收回。

(来源:MIT Course: Cryptocurrency Engineering and Design)4.反向的消除,例如收款人 Carol 通过揭示 R 来向 Bob 收款(Bob 验证 H=Hash(R) 之后,Bob 和 Carol 即可更新双方间的通道状态)

(来源:MIT Course: Cryptocurrency Engineering and Design)因此,闪电网络实际上是通过传递 R 来实现连接多个状态通道的收付款。同时也会利用 Tor 等技术来网络信息的隐匿,即中间人不知道实际的连接起点和终点。

(来源:A Technical Introduction to The Lightning Network)

  1. BOLT

闪电网络的核心技术原理还是相对比较简单的,但是如果要真正用在实际环境中,还需要考虑各种异常情况以设计和约定好相应的处理方法。例如,上文提到的超时时间该如何设置?如何避免节点知晓全部路径以防止其与路径上的其他节点串通?中间付款失败时如何处理?以及是否有更优的技术实现来替代原像的传递等等。在基于比特币脚本等有限的可编程能力的情况下,这些规范尤为重要。BOLT 协议就是闪电网络对各种层面上通信和应用处理的一个全面的协议,用来解决上述问题。

和网络通信协议 TCP/IP 以及区块链 IBC 协议等等类似,BOLT 协议包括了各个层面上的多种子协议。包括:

  • 网络连接层
  • 消息层
  • P2P 层
  • 路由层
  • 支付层

其中的一些实现也可以替换,例如,Bolt 11 原定义的是通过 HTLC 的原像与哈希的方式来生成和传递 invoice,但也可以改用 PTLC(点时间锁合约)。

  1. 一些比较重要的改进

PTLC

PTLCs(Point Time Locked Contracts,点时间锁合约)从 2018 年左右开始讨论用于改进 HTLC。为什么?HTLC 在应用到闪电网络中具有是需要将原像传递给发送方。

HTLC 用于闪电网络可能存在的问题

这样会存在一些问题,例如支付路径上的某两个不直接连接的节点相互串通,则可能会存在绕过中间节点,占用原本属于中间的手续费。例如,下图中 Mallory 和 Mike 是两个串通好的恶意节点。Mike 在向通道支付了 1 BTC 并拿到原像后,直接交给了 Mallory;Mallory 则进一步用该原像向上游获取了 1.1 BTC(假设中间环节的所有手续费是 0.1 BTC)。至此,Mike 和 Mallory 相当于同谋用 1 BTC 的成本获取了 1.1 BTC 的收益,而他俩中间环节的节点手续费则被侵占,且通道资金处于锁定状态,要到超时后才能恢复正常。

(来源:Payment Points Part 1: Replacing HTLCs)

PTLC 原理

上述问题在于 HTLC 传递的原像在路径上唯一,因此解决的办法也可以针对性的进行设计。PTLC 采用了椭圆曲线的不可逆和可同态计算的特性,这样使得秘密在传递的每一段上都需要和前一段有关。

PTLC 流程

(来源:Payment Points Part 1: Replacing HTLCs)在 PTLC 下,以 Alice -> Bob -> Carol 的付款流为例:

  1. Carol 生成一个秘密值 $$$$ ,并把 $$z * $$ 交给 Alice。其中 $G$ 是椭圆曲线上的一个点Alice 不能通过 $z * G$ 来反推出 $z$
  2. 其中 $G$ 是椭圆曲线上的一个点
  3. Alice 不能通过 $z * G$ 来反推出 $z$
  4. Alice 生产两个随机数 $$$$ 和 $$$$
  5. Alice 生成一个付款合约给 Bob,解锁条件是 Bob 能揭示 $$(x + z) * $$ 对应的“私钥”,即$(x + z)$ 。合约里的 $$(x + z) * $$ 可通过$x * G + z * G$ 计算出来
  6. Alice 把 $$$$ 交给 Bob。
  7. Bob 生成一个付款合约给 Carol,解锁条件是 Carol 能揭示 $$(x + y + z) * $$ 的”私钥“, $(x + y + z)$。合约里的 $$(x + y+ z) * $$ 可通过 $$(x + z) * G + y * $$ 计算出来
  8. Alice 把 $$(x+y$$ 交给 Carol。即 Carol 知道$(x+y)$,但不知道 $$$$ 或 $$$$ 的具体值
  9. Carol 通过 $$(x+y)+z = (x+y+z$$ ,给 Bob 展示该值,解锁第 5 步 Bob 的付款
  10. Bob 得知了 $$(x+y+z$$ 之后,通过 $$(x+y+z) - $$ 计算出 $$(x + z$$ ,并向 Alice 展示,以解锁第 3 步的付款合约。
  11. 最后, Alice 通过计算 $$(x + z) - $$ 得到 $z$,作为自己的支付证明。

也就是,通过同态运算和在付款流程中的每一个环节中增加随机数的方式,确保了每一个环节不可被绕过。

Taproot 支持 PTLC 的实现

Taproot 升级中的 Schnorr 签名也给 PTLC 带来了可能,通过使用 Schnorr 聚合签名的部分和适配器签名(partial and adaptor signatures)来实现。

重复使用收款码:Keysend

闪电网络根据 BOLT 11 必须要 invoice。在实际应用时,闪电网络有一个“痛点”在于:收款人要先展示一个一次性的“收款码”(invoice),付款人才能付款,而且每次收付款都必须更换。这样对于商户希望能长期稳定的收款、线上用户希望能收到打赏来说太不方便了。“Keysend” 希望实现的效果类似微信长期收款码:只需知道我的公钥,就可以给我无限次支付了,而无需每次生成一个 invoice。

Keysend 原理

Keysend 的实现原理是:支付者选出原像,然后使用洋葱消息封装它,然后路由给接收者。洋葱封装后的数据沿着一条路径转播,但完整的路径对路径上任一转发该支付的节点都是不可知的。因为,数据是在沿着这个路径达到最终目的地的过程中,被路径上的一个一个节点逐步解封的。目前大多数闪电网络实现(包括 LND 和 c-lightning)都实现了 Keysend。

不只是支付

Keysend 还可以支持多种应用。Keysend 可以通过在封装支付信息的洋葱数据包中加入额外的信息,来支持聊天(例如 Sphinx Chat)和川流式支付应用(如 Podcasting 2.0Breez)等。

稳定币等其他资产:Taro

闪电网络在支付的使用上仍然有一个没能很好回答的问题:为什么要用比特币来支付?如果一个 Bitcoin 长期支持者要用闪电网络,那么 TA 可能很难真的愿意用宝贵的比特币去支付;而对于闪电网络有极大希望去“破圈”的、unbanked 人群,比特币的高波动率可能也会比较难以接受。Lightning Labs 在 2022 年 4 月宣布的 Taro 可能会解决这一问题。“bitcoinize the dollar”。Taro 计划在比特币网络上利用 Taproot 技术来支持闪电网络使用稳定币来支付。

Taro 原理

Taro 的原理是,基于 Taproot,允许在现有的 UTXO 输出中嵌入任意类型的元数据。

Sparse Merkle Sum Tree

Taro 在记录账户状态数据时,使用了稀疏 Merkle 总和树(Sparse Merkle Sum Tree)。首先看稀疏 Merkle 树(SMT)。这种二叉树结构和普通 Merkle 树的区别是将所有可能取值作为叶子节点。也就是通过这种方式,SMT 对所有可能的数据进行了“索引”,便于进行非存在性证明。例如,key 的空间范围是 256 位 bit 的,即总共可能有 $$2^{256$$ 个 key。如果用二叉树的左分支表示 0、右分支表示 1,也就是需要一个 256 层的二叉树在叶子节点上表示所有可能的 key。如果将这个树用作状态树,即叶子节点上的 key 都是所有可能的账户地址。也因为这种形式,SMT 会非常“稀疏”,毕竟对于全部账户地址集合来说,有状态的账户属于极少数。(来源:What’s a Sparse Merkle Tree?)另外,SMT 也具有插入顺序无关等特性,因为数据元素已经固定好位置。

(来源:Taro 技术文档)

使用 Taproot,连接现有闪电网络

Taro 将稀疏 Merkle 总和树的树根做 Hash 后,作为 UTXO 的 Taproot 树的一个叶子节点。因此,Taro 可以利用 Taproot 交易对 Taro 资产的状态进行更新。Taro 结构(根据 Taro 技术文档整理)而这个交易只要在闪电网络的开始和结束这两个通道内完成即可。例如下图中,只需要 Alice 和 Bob 以及 Carol 和 Dave 之间通过 Taproot 方式维护了 Taro 的状态即可。开始和结束这两段可以使用 Taro 定义稳定币(L-USD)来结算,而中间的连接部分可以对应的将稳定币转换成闪电网络中对应的 BTC。

因此,Taro 可以完全利用现有的闪电网络基础设施。其他改进

Eltoo:不需要惩罚机制,让闪电网络增强至更通用意义下的“L2”

闪电网络的整体流程是遵循着“存款(建立通道)-> 闪电网络交易(更新通道状态)->退款/结算(结束通道)” 的流程。与之对应的是闪电网络遵循的是类似 Fraud Proof 的方式,在状态更新时引入惩罚机制来保证参与者都更新正确的状态。而且为了确保能提交正确的合约,闪电网络节点必须存储大量的通道状态合约,以确保遇到欺诈情况时可以有“证据”可用。

Eltoo 及其基本原理

是否有可能改进?Eltoo(与“L2”同音)可以认为是一个对闪电网络的一个增强,允许任意一个后面的状态来替代之前的任意一个状态。这样,结算交易可以和存款交易同时签名,这样可以不需要依赖惩罚机制(不过 Eltoo 仍然可以使用惩罚机制)。

Eltoo 实现机制

Eltoo 在白皮书中是计划通过一次软分叉,引入一个新的签名哈希类型(sighash flag) SIGHASH_NOINPUT 。这个新的签名哈希类型可以允许签名来提交一个交易而无需在交易输入中指定交易 ID。这也就是允许在前一笔交易被发布在比特币主网上之前,后一笔交易可以先签名。在 2019 年, SIGHASH_ANYPREVOUTSIGHASH_ANYPREVOUTANYSCRIPT 替代了SIGHASH_NOINPUT , 并且在 2021 年 7 月被合并至了 BIP118 中。

其他效果

除了不需要惩罚机制以降低存储要求外,Eltoo 可以让闪电网络成为对节点支持更好的“L2”。比如:

  • 可以让三方或更多方建立同一个通道,也就是类似通道工厂的概念。
  • 可以对节点宕机恢复更容错,避免例如一个闪电网络节点突然从宕机等错误中恢复时,可能会收发不正确的状态信息等情况。

Wumbo:增大额度

Wumbo 可以让节点运营者接入到更大的channel中。在 Wumbo 以往只能限制到 0.1677 BTC。而 Wumbo channels 支持一些大的路由节点,可突破该限制,支持大额度的支付。

MPP:多路径支付

Submarine Swaps:从主链上实时充值

从 atomic swap 衍生而来。支持 LN 的 channel 可以自动重新从 Layer1 上充值。

Watchtowers、Multiplexer:节点不在线时替代处理:

因为闪电网络的惩罚机制和时间有效性等特性,闪电网络节点最好时刻在线以避免遭遇欺诈情况时的损失。Watchtowers 机制是第三方的节点来检测是否有恶意交易发生。这样即使当事方节点不在线,Watchtowers 也可以帮他来广播公平的交易。另外,除了解决节点不在线时的争议处理,对于节点作为收款方,BottlePay 在 4 月份也宣布了一个 Multiplexer(多路复用器)的产品,主要用来解决收款方宕机等问题。

0x5 输出脚本:最小化链上数据

OP_Return: 不铭刻,仅染色

我们看到,铭文使用了taproot输入脚本上的数据来存储特殊的内容,而Taproot Asset则利用了输入和输出的双向脚本来构建状态通道。那么有没有一种生态是只利用输出脚本技术来实现的呢?因为输出脚本的大小限制很严格,在下个版本更新前,用来在链上存储数据的OP_Return只有80bytes的大小,下个版本更新后,将更加严格控制在40Bytes大小,可以最大程度的节省区块存储空间和手续费。使用输出脚本的OP_Return来存储数据,然后通过复合层节点或者indexer来实现的生态项目,从最早的染色币开始,到USDT的首发网络OmniLayer,到RGB协议都是这类技术。值得注意的是,由于Ordinals协议的发明者Casey Rodarmor对Ordinals社区污染比特币网络的行为不满,怒而发明了Runes协议,舍弃了在输入Taproot脚本中添加内容的方案,通过输出脚本OP_Return来控制和追踪资产。我们熟知的在比特币上发行代币的协议,比如 OmniLayer,其工作原理是在比特币交易中插入元数据来「染色」,并表示该笔交易应该被理解成一笔代币转移。Omni 协议中的 USDT(Tether)可以被看作是染色币的一种形式。在 Omni 协议中,USDT 是以 Tether 代币的形式存在,它通过在比特币交易中使用 Omni 协议的特定交易类型来表示。具体来说,当用户在 Omni 协议上发起一笔 USDT 交易时,他们会在比特币交易中添加 OmniLayer 的特殊数据字段,以指示该交易涉及 USDT 代币的转移。这种方式使得比特币交易能够代表 USDT 代币的转移,并且 USDT 的持有者可以使用比特币的地址来接收、发送和存储 USDT 代币。这样的信号机制通常是用 OP_RETURN 操作码来实现的,带有该操作码的输出会被普通的比特币节点无视,但可以被能够感知这些代币协议的节点解释,这些节点会实施代币协议的验证规则。

虽然这种设计是很高效的,但它也存在一定局限:1)与代币转账相关的信息量被限制在 OP_RETURN 输出可以容纳的字节数以内,一般来说是 80 字节,这个空间对普通的交易数据编码来说足够了,但更复杂的应用场景就难以被满足。2)代币协议节点需要扫描整条区块链、在 OP_RETURN 输出中搜索可能与用户相关的代币转账,整个流程会因为比特币区块链体积的增长而更加耗费资源。3)用户的隐私性方面,所有的交易数据对所有人都是可见的。

RGB 的解决方案:链下转移

怀着优化这种设计的目的,RGB 协议提出了一种更可扩展、更加隐私、更面向未来的解决方案,其基石是 Peter Todd 在 2016 年 提出的客户端验证(client-side validation)和一次性密封(single-use-seals)的概念。RGB 协议的核心理念是,仅在必要的时候才调用比特币区块链,也就是利用工作量证明和网络的去中心化来实现重复花费保护和抗审查性。所有的代币转移的验证工作都从全局共识层中移除、放在链下,仅由接收支付的一方的客户端来验证。工作原理:在 RGB 的某个合约中,创世代币都归属于一个比特币 UTXO(无论是已经存在的,还是临时创建的),而为了转移代币,你需要花费此 UTXO。在花费这个 UTXO 的时候,比特币交易必须额外添加一个输出,该输出包含对一条消息的承诺,这条消息的内容就是 RGB 的支付信息,它定义了输入、这些代币将被发送到哪个 UTXO、资产的 id、数量、花费的交易以及其它需要附加的数据。

如果你有一笔归属于比特币交易 A 的 #1 输出的代币,要转移这些代币你就需要创建一笔 RGB 交易以及一笔花费交易 A 的 #1 输出的比特币交易,并且这笔比特币交易承诺了 RGB 交易。如你所见,RGB 交易是把代币从比特币交易 A 的 #1 输出转移到比特币交易 C 的 #2 输出(这笔交易在图中没有表现出来),而不是转移给比特币交易 B。在大部分情况下,我们可以预期交易 B 的 #0 输出就是找零地址,为的是在减去矿工手续费后将剩余资金发回给原来的所有者;同时 #1 输出是为了承诺 RGB 交易,以避免重复花费。隐私性保护:为了转移归属于一笔比特币交易的 RGB 代币,需要发起一笔比特币交易。但是,RGB 转账的输出不需要跟比特币交易的输出相同。就像我们上面这个例子,RGB 交易的输出(比特币交易 C 的 #2 输出)可以跟承诺这笔 RGB 交易的比特币交易(交易 B)没有任何关联。这就意味着,RGB 代币可以从一个 UTXO「传送」到另一个 UTXO 中,而完全不会在比特币交易图中留下任何痕迹,这极大地提高了隐私性。在这种设计中,比特币的 UTXO 的作用是装载 RGB 资产的一次性容器,要转移资产,你只需要打开新的容器、关上旧的容器。RGB 代币的具体支付信息是在链下通过专门的通信通道来传输,从支付者发往接收者的客户端并由后者来验证其没有违反 RGB 协议的规则。如此一来,区块链观察者将无法获得任何关于 RGB 用户活动的信息。验证闭环:不过,验证发来的支付信息还不足以确保发送者真的拥有要发送给你的资产,因此,为了确保发来的交易具有终局性,你还必须从支付者处接收关于这些代币的所有交易的历史,即从当前的这一笔一直追溯到其最初的发行的那一笔。验证了所有的交易历史,你就可以保证,这些资产没有被通胀、附加在资产之上的所有花费条件都得到了满足。这个设计也有益于可扩展性,因为你无需验证这种资产的所有历史,只需要验证跟你有关的部分。而且,交易不会广播到全局账本中的设计,也提高了隐私性,因为更少人知道了你的交易的存在。盲化秘密值:为了进一步提高隐私性,RGB 还支持盲化输出(blinding of outputs),意思是说,在你向支付方发送支付请求的时候,你无需公开自己用来接收代币的 UTXO,只需要求支付方把代币发给一条哈希值,这条哈希值是你用目标 UTXO 本身拼接一个随机盲化秘密值之后生成出来的。这样一来,支付方就无法知道代币会发送给哪个 UTXO,因此交易所和其它服务商也无法知道用户是否正在取款到被一些监管机构「黑名单」的 UTXO 中,也无法知道这些代币未来是如何花费的。需要注意的是,在代币被花费的时候,盲化秘密值必须向接收者公开,以便后者能验证交易历史中跟比特币交易有关的部分。这意味着,使用 RGB 的时候,你在当下拥有完全的隐私性,但未来的代币持有者将能看到自己手上的代币的转移历史中的所有 UTXO。因此,虽然在接收和持有 RGB 代币时你可以获得完美的隐私性,但用户过往金融活动的机密性会随着代币的不断转移而不断降级,最终趋向于跟我们的比特币交易历史同样的隐私性。

Runes: 从铭文到符文

9月26日,Casey Rodarmor发表文章指出:BRC-20代币具有“UTXO扩散的不良后果”,并建议将Runes作为基于UTXO的替代方案。现有的各类协议,普遍存在着协议实施复杂、用户体验差、垃圾未花费交易输出(UTXO)、操作需要原生代币等问题。对此,Casey Rodarmor表示:采用链下可互换代币协议,将要求用户将链下数据与区块链进行协调,从而造成尴尬的用户体验。Runes的转移:OP_RETURN协议消息中的第一个数据输出被解码为一个整数序列,这些整数被解释为 (ID, OUTPUT,AMOUNT)元组序列。如果解码后的整数个数不是三的倍数,则该协议消息消息无效。ID是要进行转账的Token ID、OUTPUT是要分配给的输出索引(即分配给第几个输出)、AMOUNT是要分配的运行量。处理完所有元组分配后,任何未分配的Runes Token都将分配给第一个非OP_RETURN输出,其余的可以通过将Runes协议分配给包含协议消息的OP_RETURN输出来刻录Runes Token。Runes的发行:基于UTXO的同质代币追踪如果协议消息有第二次数据推送,则为发行交易。第二次数据推送被解码为两个整数,SYMBOL,DECIMALS。如果还有其他剩余整数,则协议消息无效。SYMBOL是一个基本26位可读符号,类似于Ordinals名称中使用的符号,目前唯一有效的字符是A到Z。DECIMALS是显示发行Runes时应使用的小数点后的位数。如果SYMBOL尚未分配,则该Runes Token将被分配一个 ID 值(从 1 开始)。如果SYMBOL已经被分配,或者是BITCOIN、BTC或XBT,则不会创建新的符文。这是Runes协议的特殊之处。它没有将余额记录链接到钱包地址,而是将记录放在UTXO本身中。新的Runes Token从发行交易开始,指定供应量、符号和小数位数,并将该供应量分配给特定的UTXO。UTXO中可以包含任意数量的符文代币,无论其大小如何。UTXO仅用于跟踪余额。然后,传输函数使用该UTXO,将其分割成多个任意大小的新UTXO,包含不同数量的符文,将记录发送给其他人。相对于BRC-20,Runes减少了一层服务器共识,变得更加简单,同时不依赖链下数据,没有原生代币,非常适合比特币的原生UTXO模型。

0x6 侧链:古老而稳定

比特币最成熟也是最古老的生态扩展方案,还是要看侧链方案。侧链(Sidechain)最早在2013年12月被提出,并于2018年被Blockstream公司通过Liquid项目首次实现,但在后续的发展中,RSK(Rootstock)和Stack是这两个项目逐渐变得更加有名,在实现方案上也更加合理。

Rootstock(RSK)

Rootstock(RSK)利用合并挖矿保证了与比特币相媲美的安全性,尽管其吞吐量超过了比特币基础层的容量。合并挖矿让比特币矿工同时处理和验证 BTC 和 RSK 交易在同一个区块内。在这种模式下,矿工可以同时在父链(比特币等较大的区块链)和子链(RSK 等较小的区块链)上挖矿。合并挖矿的主要优势是为子链提供了更高的安全性。通过利用更强大父链的计算能力,较小的链获得了额外的安全性,可以防止双花和 51% 攻击。这种方式让 RSK 实现了扩展、效率和高级功能,这些功能对于比特币来说是不可能的,同时又避免了采用其他安全性较模糊的共识模式。然而,尽管取得了进展,RSK 仍然面临着挑战。RSK 难以吸引到足够多的用户,而其合并挖矿机制的复杂性和新颖性也带来了风险。

Stacks

Stacks 是一个专为比特币设计的第二层智能合约协议,旨在为比特币生态系统带来去中心化应用和智能合约功能。2023 年对于 Stacks 来说是一个具有复苏和增强功能的一年。尽管面临采用方面的挑战,但整体指标表明 Stacks 在路线图和愿景方面取得了实质性进展。特别值得一提的是,Stacks 本地 TokenSTX 在经历了一段时间的熊市后,在 2023 年表现出了强劲的复苏。STX 价格在第一季度上涨了 50% 以上,在整个年度上涨了超过 280% ,远超过了比特币和整个市场。这种逆势发展是一次显著的转折,即使在加密货币低迷期间也巩固了人们的兴趣。今年进行了几次关键的网络升级,包括 Stacks 2.1 版本,引入了去中心化挖矿和与比特币的桥接。截至第三季度末,Stacks 的开发者数量超过了 1, 100 人,比前一季度增长了 30% 。这种效率提升伴随着社区的增长,关注者增加了 20% 。生态系统的吸引力稳步增长,尽管起点不高。管理资产在美元和 STX 方面都达到了历史新高,反映了 DeFi 参与度的增加。非同质化 Token 和游戏项目也开始受到关注。BNS 注册的名称累计超过了 30 万个,显示出用户对网络的持续兴趣。然而,并非所有指标都保持增长。日活跃地址、合约调用和交易量在 2023 年初出现激增后有所回落。这可能意味着用户留存方面存在不稳定性,超越了投机行为。用户体验、费用和网络效应等瓶颈可能仍然是更广泛采用的障碍。Stacks 在安全和可扩展性方面取得了进展,为采用预期的转折点做好了准备。全球范围内推出了公共种子节点,消除了查询服务中的集中风险。项目开始接受正式审计,增加了风险审慎性。尽管采用指标的增长略有放缓,但今年的发展在多个方面都取得了谨慎的进展。这个仍然年轻的生态系统面临着启动障碍,需要鼓励用户使用尽管功能尚未完全成熟。

0x7 Drivechain:别吵了,都来侧链

大区块还是小区块?支持铭文还是不支持铭文?激光眼还是巫师帽?比特币社区围绕着扩容方案,似乎总是在争吵。而DriveChain方案的提出,似乎提供了一个平息争吵的解决方案,既能保持主链的极简,又能保证二层方案的安全性?为了解决比特币网络的安全预算问题,LayerTwo Labs将在今年夏天推出支持Drivechain的BTC分叉。Drivechain (BIP300) 是由 LayerTwo Labs 创始人兼首席执行官 Paul Sztorc 自 2013 年以来创建和开发的BTC协议的升级版。Drivechain 允许开发人员通过连接到BTC网络的 Sidechains 创建他们想要的任何区块链应用程序。通过将Sidechains视为第 2 层,将 BTC 视为Layer1,在Sidechain上,开发人员可以完全自由地制作任何山寨币、代币、智能合约、区块大小、用例、DApp、UX 和UI、功能和规则,没有任何限制。与此同时,BTC矿工将定期从每个Sidechain收取费用,而不需要额外的硬件或成本,Sidechains上的故障不会以任何方式损害 Layer1 BTC,对BTC矿工来说百利而无一害。简单来说,通过Sidechains的无尽创新应用,BTC矿工收取更多费用,从而提供了更多挖矿激励。这在一定程度上有助于增加哈希率,从而提高BTC 价格。简单来说,drivechain协议就是包括bip300和bip301两个标准。

BIP300——Hashrate Escrows 算力托管

在BIP300中,txns不通过加密密钥签名。相反,随着时间的推移,它们由hashpower“签名”。就像一个大的多重签名,13150-of-26300,其中每个块都是一个新的“签名”。BIP300强调缓慢、透明、可审计的交易,诚实的用户很容易做对,不诚实的用户很难滥用。BIP300的主要设计目标是分区——如果用户愿意(或完全忽略BIP300),他们可以安全地忽略BIP300 txns。简单来说,bip300用来实现btc从主网到侧链的价值双向流通的标准。

BIP301——BMM_盲合挖矿

盲合并挖矿(BMM)允许矿工在不运行其节点软件的情况下挖掘侧链/山寨币(即,不“看”它,因此“盲”)。取而代之的是,一个单独的侧链用户运行他们的节点并构建区块,支付自己的交易费用。然后,他使用等量的资金从传统的layer1 Sha256d矿工那里“购买”找到这个区块的权利。合并挖矿(MM)允许矿工重用他们的哈希工作来保护其他链(例如,在Namecoin中)。然而,传统MM有两个缺点:矿工必须运行其他链的完整节点。(因此,他们必须运行可能存在错误的“非比特币”软件。) 矿工在另一条链上以替代货币获得报酬。(MMNamecoin的矿工将获得NMC。)BTC 矿工将定期从每个 Sidechain 收取费用,而不需要额外的硬件或成本,Sidechains 上的故障不会以任何方式损害 Layer1 BTC,对 BTC 矿工来说百利而无一害。简单来说,通过 Sidechains 的无尽创新应用,BTC 矿工收取更多费用,从而提供了更多挖矿激励。这在一定程度上有助于增加哈希率,从而提高 BTC 价格。简单来说,bip301,让矿工可以有种正向激励,来参与侧链共识和创新。

一旦 BTC 升级到 BIP300 和 BIP301 标准(BTC 矿工必须以 95% 的共识表示支持(也称为投票)才能进行 BTC 升级,包括 BIP300 和 BIP301):任何人都可以未经许可地创建 Sidechain (Layer2),BTC (Layer1) 上的矿工将从每个 Sidechain 收取交易费用。这也就意味着每个 Sidechain 都是它自己的区块链。Sidechain 可以被编程为具有任何代币、特性、规则和共识机制,甚至是 PoS 或 DPoS。如果 BTC 升级到 BIP300 和 301,BTC 作为最去中心化的区块链,可以成为下一波创新和颠覆性应用的基础层。综合来说,drivechain技术,是btc的二层网络的一次重大创新。其包括的哲学思想,跟eth的rollup有异曲同工的效果。而drivechain技术,为了向后兼容和兼顾各方利益,有更多的开放和妥协的思维。

BIP升级的结果:创建比特币硬分叉Mainchain

为了解决比特币网络的安全预算问题,LayerTwo Labs 将在 2023 年硬分叉 BTC,并创建一个新的 PoW 区块链。这个硬分叉的 PoW 区块链将被称为 Mainchain。Mainchain (MC) 将从第一天开始预装所有 Drivechain 升级(BIP300 和 301)。LayerTwo Labs 将在 Mainchain 硬分叉期间推出七个自己开发完善的 sidechains(将它们视为“去中心化应用程序”或 DApp)。项目团队、开发人员和任何人未经许可地在 Mainchain(第 1 层)上创建 Sidechains(第 2 层),以试验他们的任何想法和概念。所有 BTC 地址都将 1:1 收到 Mainchain 代币。Mainchain 将遵循所有与 BTC 相同的规则:2100 万枚代币总供应量,每个区块 10 分钟,区块奖励每四年减半,并使用与 BTC 相同的 PoW 共识模型。现有的所有可以挖 BTC(SHA256 算法)的挖矿设备都可以挖 Mainchain。早期,由于 Mainchain 挖矿难度降低,即使是过时的设备(GPU,老式 ASIC 机器)也可以挖到 MC,并且收益不错(获得更多的 MC 区块奖励)。Mainchain 将是唯一可以通过 sidechains 支持任何概念和想法的 PoW 链。通过开发 Mainchain,使 Mainchain 上可以存在数十万个 sidechains。在这些 sidechains 中,有些应该是独角兽(人们乐于一次又一次使用的大量采用的去中心化应用程序),随着时间的推移,Mainchain 成为一个蓬勃发展的生态系统,受到 sidechain 用户的喜爱并得到大量矿工的支持(他们可能已经从 BTC 转换为 MC),在 Mainchain (MC) 价格及其 sidechain 生态系统成功的压力下,BTC 矿工可能最终投票支持 BIP300 和 BIP301 升级。

0x8 总结

到此为止,我们已经盘点完了主流的比特币生态扩容解决方案,并通过技术本质来分析其中可能存在的安全问题,希望对读者更全面的认识比特币生态有所帮助。MetaTrust是。。。。

评论

所有评论

推荐阅读

  • 5月20日早间要闻速递

    1. BTC:66,398美元、ETH:3,078美元、BNB每日行情播报

  • Cointime 5月19日要闻速递

    1.美国现货比特币ETF本周净流入9.483亿美元

  • 陈茂波:香港数码港初创累计融资超406亿元

    香港特别行政区财政司司长陈茂波今日发表司长随笔《固本浚源提质发展》,其中披露资料显示,数码港过去一年有超过 400 家企业进驻,令企业社群总数超过2000家,其中8家是独角兽;初创累计融资超过406亿元,其中金融科技、第三代互联网的企业社群优势明显,人工智能的发展正加快推进,并从技术上支援香港企业的数码转型。

  • 美国现货比特币ETF本周净流入9.483亿美元

    美国现货比特币ETF本周净流入达9.483亿美元。其中:
    5月13日周一净流入6600万美元;
    5月14日周二净流入1.005亿美元;
    5月15日周三净流入3.03亿美元;
    5月16日周四净流入2.573亿美元;
    5月17日周五净流入2.215亿美元。

  • 今年比特币生态相关融资已超90笔

    2024年迄今已有90多笔与比特币生态相关的融资交易,创下比特币历史上单年融资记录的最高数量。 Multicoin Capital执行合伙人Kyle Samani指出,随着比特币Taproot升级和Ordinals协议的出现,比特币生态正在经历 “开发者复兴” 。对于一些开发人员来说,在比特币上构建金融工具更具吸引力,因为它是最古老、最安全的区块链。 

  • 稳定币总市值突破1600亿美元

    据DefiLlama数据显示,稳定币总市值现为1611.44亿美元,周增幅为0.69%。此外,USDT市值为1111.28亿美元,市占率达68.96%。

  • 香港成为第一个中国内地以外全体本地居民均可以开通e-CNY钱包的地区

    香港金管局已于2024年5月17日公布即日起数字人民币(e-CNY)在香港的试点扩大至全香港市民,用户以香港手机号码即可注册开通,不仅可在香港使用,且可非实名在中国内地支持e-CNY的商户进行跨境支付。数字人民币目前在内地17个省市的26个地区中试点,香港成为第一个中国内地以外全体本地居民均可以开通e-CNY钱包的地区。

  • BOME最大个人持有者因#1DOL交易8小时内获利993倍

    据 Lookonchain 监测,sundayfunday。sol通过买入#1DOL在短短8小时内将13枚SOL(约合2275美元)变为226万美元,收益993倍。他是BOME预售的最大参与者,曾花费421枚SOL(约合7.2万美元)参与预售并买入BOME(峰值时为4000万美元);仍然是BOME的最大个人持有者。8小时前,他花费13枚SOL(2,275美元)买入2.42亿枚#1DOL ,目前价值226万美元。

  • Cointime 5月12日要闻速递

    1.交易员预测比特币价格将达到35万美元2.vladilena.eth从Zircult中赎回1930枚weETH,疑似卖出 3.华夏和嘉实确认正在推动构建基于加密货币现货ETF的抵押金融产品 4.加密货币总市值:22,550.18亿美元,24小时交易量为376.18亿美元 5.昨日Solana链上DEX交易量超以太坊、BSC、Arbitrum等五个链之和6.RSS3 VSL锁仓量近两日出现激增已接近2亿美元7.friend.tech平台Club Key交易量突破100万8.Lido已支付质押奖励超51.6万枚ETH,约合15.1亿美元9.Justin Sun将12万枚eETH存入Swell L2,价值3.76亿美元10.过去7天有1707.36枚BTC从Binance流出

  • Cointime 5月4日要闻速递

    1. Base链上Gas总消耗量突破1万枚ETH