RGB 交易作为 Bitcoin 的扩展交易,需要依赖一个 P2P 网络进行传播。用户之间在进行转账交易时,也需要进行交互式操作,接收方需要提供收条。这些都依赖一个独立于 Bitcoin 网络的 P2P 网络。
虚拟机与合约语言
RGB 协议的虚拟机目前主要是采用了 AluVM,作为新的虚拟机,目前缺乏完善的开发工具和实践代码。
无主合约问题
RGB 协议目前尚无完善的无主合约(公共合约)的交互方案。这导致多方交互难以实现。
RGB++ 同构绑定
RGB++ 通过同构绑定技术解决了 RGB 协议遇到的问题,并赋予了 RGB 更多的可能性。在 RGB 协议中,最重要的两个组件是用来做所有权认定的 UTXO 和用来做状态管理与一次性密封的 commitment。RGB++ 的同构绑定将其中的 Bitcoin UTXO 一一映射到 CKB 的 Cell 上、使用 bitcoin lock 来实现所有权同步,并使用 cell 的 data 和 type 来实现状态的维护。
区块链增强客户端验证
所有的 RGB++ 交易都会在 BTC 和 CKB 链上同步各出现一笔交易。前者与 RGB 协议的交易兼容,后者则取代了客户端验证的流程,用户只需要检查 CKB 上的相关交易即可验证这笔 RGB++ 交易的状态计算是否正确。但用户也可以不使用 CKB 链上的交易作为验证依据,利用 UTXO 的局部历史交易信息,用户可以脱离 CKB 链独立地对 RGB++ 交易进行验证(交易折叠等部分功能仍然需要依赖 CKB 的块头哈希做防双花验证)。
RGB++ 交易流程
作为中介。用户将自己希望执行的动作确定性地写入 Intent Cell,后者则可以通过第三方聚合器的协作与全局状态 Cell 交互,批量将多方的 intent 进行计算,并将交互结果合并到标准的 shadow cell 上。
非交互式转账
原始 RGB 协议的一个问题是收款方需要提供一个自己的 live utxo 作为 invoice 才能实施转账,这种方式要求收款方必须在线才能完成一笔普通的交易,增加了用户理解难度和产品复杂度。RGB++ 可以利用图灵完备环境的优势,将交互行为放置在 ckb 环境里面,采用发送-领取两步操作来实现非交互式转账逻辑。
发送
用户 A 向用户 B 发送资产时,只需要获知 B 的地址,并在 RGB++ 交易中向该地址转账,而不需要收款人提供 utxo 或 invoice。
领取
CKB 的 lock 合约有能力验证 btc 地址对应的数字签名,因此接收方可以在 CKB 上构造 Tx C 来解锁对应的 CKB Cell,并将资产转移到自己的 utxo#2 上。从而完成了非交互式收款。
Coins
RGB++ 上的 fungible 资产发行需要对应的数据结构标准和一致性验证标准。我们可以使用 CKB 的 xudt 标准作为它的同构绑定协议。
发行
RGB++ coins 的发行有很多种方式,包括并不限于中心化分发、空投、认购等方式。代币的总量也可以选择不设上限和预设上限两种。对于预设上限的代币,可以使用状态共享方案在每次发行时验证已发行总量小于等于预设上限。
转移
RGB++ coins 的转移非常简单,只需要将收款方和找零 utxo 分别对应到 ckb 的 shadow cell 即可。coins 的转移也可以通过交易折叠的方式只发生在 CKB 上,多笔交易后再将最后结果 commit 到 BTC 上。
应用举例
Airdrop
给定一个地址列表和金额列表,我们可以使用 RGB++ 实现完整的 airdrop 应用。我们假设待领空投数据和已领地址列表均以 SMT 的信息保存在 cell data 中。用户即可通过自己的地址领取空投。
DEX & AMM
RGB++ 利用 UTXO 结构可以直接支持基于 UTXO 的资产交换协议,无须引入中介方。同时利用网格订单簿设计可以实现自动化做市商模式,有别于 Uniswap 的价格曲线做市商模式,网格做市商模式可定制化更强,更适合 UTXO 结构的资产交易。
上面的例子是卖家挂单 RGB++ xudt,买家使用 Bitcoin 购买。交易结构为买家提供包含了足够数量 Bitcoin 的 buyer’s utxo 并提供 PBST 签名,买家则构造 CKB 上的交易来符合卖家的要求,最终买家将构造好的 CKB 交易发送给卖家,卖家将 BTC 交易和 CKB 交易先后上链完成交易。
总结
RGB++ 继承了 RGB 协议的核心思想,采用了不同的虚拟机和验证方案,用户无须独立的 RGB++ 客户端,只需要访问 Bitcoin 和 CKB 轻节点即可独立完成所有的验证。RGB++ 为 Bitcoin 带来了图灵完备合约扩展和数十倍的性能扩展。它没有使用任何跨链桥,而是使用了原生的客户端验证方案,确保了安全性和抗审查性。