如何理解RGB 转账
在这样一个最基本的场景。Alice给Bob发送 RGBT这个token。这个token是合约叫做C。
最开始Alice是拥有合约信息和密封当前状态的UTXO。Bob没有合约信息。
BoB需要首先导入共识内容,也就是合约C(Contract Consignment)。因为他需要知道合约C是怎么运作的,并且要确认是不是他想要的那个合约。(核对合约id)
因为链上存储的都是TX执行完毕后的结果。而且Bob没办法操控Alice的所拥有的状态并且Alice也不懂Bob用于密封新状态的UTXO是什么。所以需要告诉A把怎样的一个结果发到链上。这个就是Invoice了。这个invoice里面包含 指示 Bob创建一个遵循合约规则的新状态,并以隐藏的形式嵌入一个新的 密封 定义,指向他的一个 UTXO。通过这种方式,Alice 为 Bob 分配了新状态的一些所有权:例如,一定数量的代币的所有权。
之后,Alice 使用一些 PSBT 钱包工具准备了一笔交易,该交易花费了由先前的 密封之前状态的UTXO 。在这个btc tx中,Alice 在一个输出中嵌入了对新状态数据的承诺,该数据使用 Opret 或 Tapret 规则,具体取决于所选的方法。简而言之A接受到这个Invoice然后执行。
A执行完将结果(Transfer Consignment)发送给B让他确认下对不对B确认之后A就可以把执行结果发送到链上了(实际上A可以不管不顾直接把执行结果发送到链上)。等待链上确认完毕RGB的tx也就完毕了。
这个Transfer Consignment包含除了新状态之外,它还包含 Alice 已经拥有的客户端数据的有组织stash。
Bob在accept的时候是做了下面内容:
<p align="center"> <img src="https://raw.githubusercontent.com/EthanShang8989/rgb-learning-doc/master/%E8%BD%AC%E8%B4%A6%E6%B5%81%E7%A8%8B.png"/> </p>
在RGB合约内部还有一个类似UTXO的结构 Assignments 来记录RGB合约的交易信息。
Assignments 是负责 Seal Definition 操作和该 Seal Definition 绑定到的相关 Owned State 的核心结构。它们是将数字资产(在拥有状态中描述的)合法转让给由拥有特定比特币 UTXO 确定的新所有者的核心部分。Assignment 可以比作 Bitcoin Transaction Output,但可能嵌入更多的表现力和潜力。
每个 Assignment 都由以下组件组成:
AssignmentType
,它是存储在 Assignment 中的数字资产的标识符(例如,用于在令牌传输中声明传输函数的 assetOwner
声明)。
Seal 定义
,它是包含对 UTXO 的引用的子结构。
Owned State
,指定如何修改与 AssignmentType
关联的属性。
RGB 的独特特性在于,Seal Definition 和 Owned State 都可以以显示(Revealed)或隐藏(Concealed)形式呈现。这对于在状态转换的构建以及后续由合约涉及的各方进行验证时,选择性地保持高隐私性和可扩展性特别有用。显示形式的结构可用于验证在先前状态转换中输入的相同数据,这些数据的哈希摘要表示该结构的隐藏形式。
Seal Definition 和 Owned State 的所有四种显示/隐藏形式组合如下图所示:
<p align="center"> <img src="https://raw.githubusercontent.com/EthanShang8989/rgb-learning-doc/master/assignment.png"/> </p>
Assignment 结构的第一个主要组件是 Seal Definition,其显示形式本身是由四个字段组成的结构:
Assignment 的第二个组件是 Owned State,负责定义和存储由 Seal Definition 分配的数据。在介绍 Owned States 的特性之前,有必要简单讨论一下该结构的 Conceal/Reveal 特性。与 Global State 不同,Owned States 有两种形式:
在 RGB 中,Owned State 只能定义为以下四种 StateTypes 中的一种:Declarative、Fungible、Structured、Attachments,它们都有各自的显示和隐藏形式:
SHA-256(SHA-256(tag_data) || SHA-256(tag_data) || blob)
,其中 tag_data = urn:lnp-bp:rgb:state-data#2024-02-12
。SHA-256 file_hash
、MIME media type
和提供附加隐私的 salt factor
。隐藏形式是这三个字段的 SHA-256 标记哈希:SHA-256(SHA-256(tag_attachment) || SHA-256(tag_attachment) || file_hash || media_type || salt)
,其中 tag_attachment = urn:rgb:state-attach#2024-02-12
。此外,下表还总结了每种 StateType 的技术特性:项目 | Declarative 声明 | Fungible 可替代 | Structured 结构 | Attachments 附件 |
---|---|---|---|---|
数据 | 没有 | 64 位有符号/无符号整数 | 任何 strict 数据类型 | 任何文件 |
类型信息 | 没有 | 已签名/未签名 | 严格类型 | MIME 类型 |
保密性 | 不需要 | Pedersen 承诺 | 使用盲法进行哈希处理 | 哈希文件 ID |
大小限制 | 不适用 | 256 字节 | 高达 64 KB | 高达 ~500 GB |
Structured就是类似用ordinary在btc上面上传图片。可以传但是不多。
Attachments就是类似NFT中放个URL(通常是cid)指向一个任意大小的文件
RGB协议的一个重要通用特性是,能够将属于同一合约的不同状态转换(即具有相同的 ContractId)捆绑在一起。在最简单的情况下,如上面提到的 Alice 和 Bob 之间的情况,Transition Bundle 包含一个单独的状态转换。
然而,RGB 在其设计中嵌入了对多支付方操作(Multi-payer operations)的支持,例如 Coinjoins 和闪电网络通道的开启,在这些操作中,多个支付方(除了 Alice)拥有相同的资产。通过 Transition Bundles,每个参与方可以异步和私密地构建一个状态交易,将合约的所有权转移给一个(即 Bob)或多个对手方(多对多关系)。然后,相关方可以决定将这些状态转换分组到 Transition Bundle 中,并按照 RGB 对 MPC 和 DBC 的规则,构建一个单独的见证交易,关闭 Bundle 中状态转换所引用的所有 Seal Definition。
下图展示了与 RGB 合约相关的所有三种合约操作及其在相关于 RGB 合约的有向无环图(DAG)中的位置,按照它们在比特币区块链中的锚点进行排序:绿色为 Genesis,红色为状态转换,蓝色为状态扩展。
<p align="center"> <img src="https://raw.githubusercontent.com/EthanShang8989/rgb-learning-doc/master/bundleld.png"/> </p>
橙色部分表示比特币区块链中的区块,其中的承诺通过锚点链接到客户端数据。需要注意的是,普通状态转换与两种状态生成操作之间的主要区别在于缺乏 Seal 的关闭部分。因此,为了出现在区块链历史中,Genesis 和状态扩展都需要一个状态转换来关闭由它们构建的特定 Seal Definition。
另一个显而易见但关键的方面是,活动状态是从 Genesis 开始,在比特币区块链中按顺序提交并自我引用的合约操作的 DAG 末尾的最后状态。与已花费 UTXOs 相关的所有其他状态不再有效,但对于验证过程至关重要。
https://www.btcstudy.org/2023/09/12/the-potential-of-RGB-protocol/
群
仓库
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!