RGB++协议这几天好事连连,接连宣布好几件重大的消息。首先是在3月31号宣布测试网上线,昨天晚上又宣布了主网上线,同时开启RGB++协议上第一个测试性资产Seal 的铸造。紧接着今天早上又宣布推出模块化 比特币Layer2 一键发链平台 UTXO Stack,一起宣布的还有种子轮融资成功的消息!
Nervos CKB 团队的技术能力超强是众所周知的,不过这行动力也不是一般的强啊!
是时间好好来学习一下RGB++和 Nervos CKB这个项目了。因为RGB++是新推出的协议,而且也是当前这个时点的最热协议,我们就从RGB++入手吧。
不过RGB++理解起来还是有一定复杂度,由于它是基于RGB的思想推出的一个协议,所以我们需要先把RGB的原理,优缺点和它存在的问题弄清楚,才能理解RGB++的想法来源,以及它要解决的问题是什么,然后才是解决和实现的原理。
要把这些问题都解读清楚需要不少文字,我们慢慢更新。好,进入正题!
一、简单介绍RGB++协议
1. RGB++是什么
RGB++是一个在比特币一层发行资产和管理资产流转过程的协议,由 NervosNetwork 联创 @crypcipher 提出。
它通过一种巧妙的方式实现了RGB协议中最复杂和困难的部分,让RGB协议开发了很多年都难以实现的的想法提前落地。
它的作用是用同构绑定的方案实现了对比特币一层能力的扩展。
既然RGB++是基于RGB的设计原理并落地应用,那我们需要先弄清楚RGB是什么。
2. RGB是什么?
1)RGB协议介绍
RGB是一个比特币的扩容方案,也是一个在比特币一层发行和管理资产的协议。过去很多年被公认是比特币最优雅的扩展方案之一。
它的设计思路是通过把链外的RGB交易与比特币交易的UTXO进行绑定,并把RGB资产所有权密封在比特币的UTXO里面,这种设计想要实现的结果是让RGB的资产所有权以及合约状态可以且必须通过比特币的UTXO来进行操作和控制,从而实现通过比特币UTXO来保证RGB交易和资产的安全性,即防止了双花的可能性。
我们知道比特币的结构中并没有智能合约的能力,UTXO只能验证和控制BTC自身的资产,对非BTC的资产它无法实现操控的功能,而RGB的设计提供了这样的解决方案。
2)RGB的实现原理
(1)RGB交易的声明密封在比特币链上,并把资产所有权与比特币UTXO进行绑定
首先需要弄明白的是,RGB的交易不是在比特币链上发生,而是RGB协议的网络中。也就是说RGB交易和比特币交易是两个概念,当然也是两笔交易,而且发生在不同的环境或者说是不同的链上。
RGB的设计思路就是把RGB网络中发生的交易的声明或者承诺记录到比特币交易的UTXO里面,同时把RGB网络中的每一个UTXO绑定到比特币的一个UTXO上面。这样设计的目的是想让比特币的 UTXO 对应着 RGB 某一笔资产的所有权,实现通过操作比特币的UTXO 来控制 RGB 资产的所有权,或者状态变更。
它的实现原理是
第一、把RGB的每一笔交易都绑定在一笔比特币交易上
也就是说一笔RGB交易就一定能够找到一笔对应并绑定的比特币交易。
绑定的方式是把RGB网络里发生的每一笔交易,计算出哈希值,然后分别写入并保存到比特币某一个UTXO的OP_RETURN字段里面。这个哈希值就是RGB交易的声明或者承诺,即把RGB网络发生了一笔交易的声明保存在比特币链上。
由于这个声明是一笔交易的哈希值,具有唯一性,而记录到比特币链上又让它具有了不可篡改性。这样就保证了RGB网络中的这笔交易,即使数据没有保存在比特币链上也不能被修改。
第二、把RGB交易的每一个UTXO都绑定在一个比特币的UTXO上
在理解绑定之前我们需要先理解比特币的交易和UTXO,只有弄清楚了两个基本概念,才能理解RGB所说的绑定是怎么回事。可以参考这篇文章《RGB++科普:通俗理解UTXO和比特币交易》
第一步:绑定交易输出的UTXO
有一个要了解的前提是RGB也是基于比特币的记账模型,也就是也采用UTXO作为所记录资金的存储单元。是的,UTXO本质上是一个存储资金数据的单元,就像上面那篇文章里面解释的,你可以理解成一个比如存钱罐一样的容器。这是这个容器里面保存的内容是对一笔资金有效性整个逻辑的代码,数据,状态等数据。
现在开始绑定的操作:
首先在RGB网络发起一笔交易,然后需要创建交易输出的UTXO,其实创建交易的第一步是选择输入的UTXO,即Input UTXO,也就是UTXO的来源,把 Input UTXO 需要的信息都填好之后才构建输出的UTXO,即Output UTXO。这样一笔交易里面的输入和输出两个部分的UTXO就会不一样。
但是我想用同一个UTXO来进行解释,所以先说输出部分的UTXO。
在交易输出UTXO,即Output UTXO里面需要设定一个锁定脚本,锁定脚本的作用是规定这个UTXO所包含资产的花费条件。然后在这个位置写入一个比特币交易的UTXO。锁定脚本的作用是规定花费资产的条件,那么在这里写入一个比特币的UTXO,意思是只有这个UTXO才能花费这笔RGB资产。所以下一次等这笔RGB资产要花费出去的时候,就需要创建一笔比特币交易并用这个UTXO来解锁。
图中绿色部分就是一个RGB Output 的 UTXO,锁定脚本是最后一行,写了btc的3号utxo。意思是以后要花费这笔RGB资产必须要用指定比特币交易的3号UTXO才花费得了。这样交易输出的UTXO就绑定好了。
第二步:绑定交易输入的UTXO
交易输入Input 表明的是这笔交易所要花费资金的来源,即包裹这笔资金的UTXO是从哪里来的。我们还是用刚才创建的那个Output UTXO来讲,也就是说我们把刚刚创建的那个RGB UTXO当作本次交易的来源。我们已经在它的锁定脚本里面输入了一个指定的比特币交易的UTXO,既即3#utxo,现在要花费这个UTXO里面的RGB资产。
所以我们需要创建一笔比特币交易,在构建输入Input部分时,就要在Input UTXO的解锁脚本里面输入指定的比特币交易的3号UTXO。因为只有这个UTXO才符合前一笔交易输出在锁定脚本中设定的条件,也只有这个UTXO才能花费这笔 RGB 资产。
再次说明一下,一个交易的创建,输入部分通常是前一笔交易的UTXO,而输出部分则是新生成要转移出去的UTXO,所以输入和输出不会是同一个UTXO,我们是为了便于理解用了同一个UTXO的生成和花费这个过程来进行说明。
以上就是RGB交易,及其UTXO与比特币交易极其 UTXO 绑定的原理。
这种绑定想要实现什么样的目的?
前面的绑定过程已经看明白了,一个RGB的交易就一定会对应一个比特币的交易,同理一个RGB的UTXO也也一定会对应一个比特币的UTXO,而且RGB网络中的每一个UTXO都必须由一个比特币的UTXO来花费。花费的方式就是在比特币链上发起一笔交易,并把这个比特币UTXO作为花费来源,即Input UTXO。
因为UTXO具有防双花的性能,即一个UTXO被花费了,就不能花费第二次,这是由比特币的设计机制保证的,因此这个比特币的UTXO一旦被花费就失效了,或者可以理解为消失了,那么它绑定的RGB资产也就被花掉了,那么RGB资产也不可能再被花费一次。
那谁能花费这个比特币的UTXO呢?谁持有这个UTXO谁就能花费。
我们知道比特币的转账本质上是UTXO所有权,也是资产所有权的转移。转账完成后,Input里面的UTXO会失效,同时会生成新的一个或者几个UTXO来取代失效的老的UTXO,而新生成的UTXO就会被转移到收款方手里,从而完成了UTXO和资产所有权的转移。
基于这个逻辑,就实现了通过操作和控制比特币的UTXO来实现操控RGB资产所有权的目的。这种关系可以理解成比特币的UTXO是RGB交易的触发器,只要被绑定的比特币UTXO被花费,就会触发这笔RGB交易的发生,同时RGB资产所有权会被转移。
这就是RGB协议中第一个重要的理论基础:一次性封条或者一次性密封。
意思是RGB的资产所有权被密封在只能使用一次的比特币UTXO里面,随着比特币UTXO的使用RGB的资产会被花费,资产的所有权也随之转移。
(2)交易的验证在客户端进行
因为比特币的矿工只会打包比特币自身的交易,节点也只会验证BTC的交易,而RGB资产的交易不属于BTC交易,因此不可能真正做到让比特币的矿工和节点来打包和验证RGB的交易。所以即使RGB的交易和资产可以通过比特币的UTXO来进行操控,这些交易和资产状态的变更也并不会经过比特币矿工和节点的验证,那么RGB交易的有效性和资产状态的变更正确性是如何实现的?
RGB很巧妙地选择了另一个方向:不用区块链,把一个链要做的工作交给交易的参与方去完成。
所以RGB的交易只需要在参与方之间进行,即记录,验证,资产转移以及数据存储都在双方,当然也可能是几方之间进行,就是交易验证在客户端进行,而不是让节点或者矿工来执行和验证交易。
这就是RGB协议中第二个非常重要的理论基础:客户端验证。
以上是对RGB协议的简单介绍。等把RGB++协议梳理清楚以后,有时间再对RGB协议进行更加详细的解读。