SUS:RGB/RGB 协议的基石
一次性密封(Single-Use-Seals, SUS)是 RGB/RGB 协议的核心,它扩展了比特币的功能。那么,到底什么是 SUS?如何在区块链上实现它?你知道在 RGB 协议提出之前,CKB 的技术架构中就已经存在一次性密封了吗?
今天,就来详细介绍一些基于一次性密封理念的 CKB 脚本设计。
推广币安交易所
新用户注册充值交易,享空投奖励 首次交易比特币享7天价格保护 立即下载APP 扫描二维码下载官方应用,开启交易之旅 全球领先交易平台 安全可信赖 500 交易对 99.9% 稳定性 投资需谨慎 | 广告什么是 SUS?
Peter Todd 曾提出,为了实现一次性密封,矿工需要证明一系列关于键值对集的真值表达式的内容。键是表达式,值是声明,它们与见证(witness)一起构成了表达式的参数。一旦一个表达式被加入封条集,与其关联的值就不能被改变。
下图来自 Peter Todd 的 SUS 实用例子,它生动地描述了 SUS:就像现实生活中的封条一样,一旦封上就不能再打开,并且每个都有唯一标识。
想象一下,在数字世界,你可以拥有独一无二且不可摧毁的封条来封印任何数据,而任何人都无法伪造这些印章,这就是 SUS。
简单理解 SUS
Peter Todd 认为,当我们花费一笔输出时,目标是让花费的资金流向另一组输出上,通过将这组输出的分配提交到这些一次性密封上的方式。
在区块链世界中,UTXO(Unspent Transaction Outputs)是用户存储资产的地方。用户通过交易转移资产的过程,基本上就是消耗 UTXO,并为其他人创建新的 UTXO。
SUS 和 UTXO 的天然一致性,使得一次性密封在 UTXO 模型上的设计上直接而又简单。我们可以将 TXO(Transaction Outputs)视为封条,而在区块链上提交的每笔交易都可以被视为将其数据封入所有的输入 TXO。这样,我们就完成了 UTXO 模型上的一次性密封设计:交易的输出满足我们对一次性密封的所有要求:
被封上的封条不能被毁坏,因为我们需要花费 TXO 来封上封条,而一笔钱不能被花费两次。
封条是独特的,而且不能被伪造,因为所有的 TXO 都是独特的。
在将数据封入前我们就可以拥有封条,因为创造和花费 TXO 是分开的过程。
封条链和 Type ID
Type ID 描述了一种通过使用特殊的 type script 来创造单例类型的方式――即在这个 Type 下只有一个 Live Cell。
我们可以通过在关闭一个封条时将新封条连接到其上,从而创建封条链。这种方法简化了验证过程,因为验证者只需要在初始封条上达成共识,就可以通过封条链来获取最新的封条。尽管,这也意味着验证者必须检索整个封条链来验证最新的数据。
得益于 CKB 的图灵完备虚拟机和它的扩展 UTXO 模型―― Cell 模型,我们可以在封条中包含更多信息。CKB 上的 Cell 与 BTC 上的 UTXO 的不同之处在于,Cell 可以存储任意数据,这些数据的转换受到 “Type” Script 的限制。
在 CKB 的 Type ID 方案中,我们要求封条链上的每个封条都必须包含第一个封条的 ID 作为起始信息。Type ID 意味着 Type Script 赋予了 Cell 唯一的 ID,并限制其在封条链的开始到结束的过程中 ID 都不能被更改。这个 ID 允许验证者仅通过 CKB 上的通用索引器就可以检索最新的封条。
更多 CKB 上的 SUS
Single Use Lock:这种 Lock 需要消耗指定的 Live Cell 才能解锁。正如我们先前所言,一个封条只能被封上一次。因此,Single Use Lock 只能被解锁一次。
Type Proxy Lock:这种 Lock 需要使用带有特定 Type Script 的 Cell 进行解锁。在这种 Type Script 是 Type ID 的情况下,只有拥有更新封条链全限的人才能进行解锁。
资产发行权限控制是这两种 Script 的一个实际应用场景。在 CKB 的 xUDT 协议中,发行者可以在证明他们能够解锁 Owner lock 时铸造新代币。仅使用简单的基于签名的 Lock,我们无法确定发行者是否仍然拥有他们的私钥,这意味着他们总是可以铸造新代币,使得每种资产都可以无限增发。
在这里,Single Use Lock 为我们提供了解决方案。消耗指定 Cell 后,由于没有人能够解锁 Owner lock 来铸造新代币,我们可以相信代币供应量确实有上限。
作为一种更灵活的解决方案,代币发行者可以使用 Type Proxy Lock 将铸造权限绑定到 Type ID Cell。它就像一把无法被伪造的钥匙,可以交给其他人,或是被销毁。