RGB 协议如何保护隐私

每一笔比特币交易都是公开的,任何人都可以打开区块浏览器,查看每笔支付的金额和地址。相比之下,比特币上的 RGB 协议遵循另一种逻辑:资产转移的细节只保留在参与转移的各方手中,这正是 RGB 隐私的核心。因此,本文将通过四位观察者的视角来追踪同一笔转移,并说明这一模型的局限。
RGB 隐私简要概览
- 在比特币上,外部观察者只能看到一笔普通交易,最多再加一个哈希值:没有合约,没有资产名称,也没有金额。
- 由于使用了盲化 UTXO,发送方无法得知接收方的哪一个 UTXO 持有该资产。
- 接收方会收到资产的历史记录,因为验证依赖于完整的历史。
- 同一笔比特币交易中另一份合约的用户,只会收到自己合约的证明。
- 不过,RGB 隐私也有明确的局限:资产的下一位持有者会得知上一位持有者的 UTXO,并能读到此前的历史。
为什么比特币在设计上是透明的?
比特币是一本公开账本。事实上,每个节点都会验证每一笔交易,并保存一份数据副本。正如 RGB 文档所说,“交易金额和接收地址对所有人可见,尽管是伪匿名的”。
对一个货币网络来说,公开验证无疑是一种优势。然而,对稳定币或收藏品这类资产而言,同样的透明度会把余额和支付习惯暴露给全世界。
RGB 把资产数据存放在哪里?
RGB 通过客户端验证来解决这个问题。换句话说,每一方只在自己的设备上验证与自身资产相关的那部分历史。因此,比特币只收到一个承诺:一段简短的数据哈希值,放在一笔普通交易之中。
哈希是单向的:从数据出发,任何人都能算出哈希值;反过来,从哈希值出发,没有人能还原出数据。原始数据无法从承诺中重建,这意味着它只对参与转移的各方保持私密。
举个例子,可以想象公共登记簿上的一枚指纹:指纹能够确定无疑地识别一个人,而登记簿对这个人的生活却只字不提。
RGB 隐私:四位观察者,四种视角
我们可以把同一个例子套用到四位不同的观察者身上。在这个例子中,Alice 向 Bob 发送 100 个单位的稳定币,该稳定币发行在 RGB 上。这种稳定币有数百万个单位在流通,由许多不同的持有者持有。
- 外部观察者:任何观察比特币区块链的人。
- 发送方:Alice,这 100 个单位当前的持有者。
- 接收方:Bob,这 100 个单位的新持有者。
- 另一份合约的用户:持有另一种资产(例如收藏品)的人,其转移与 Alice 的付款被承诺在同一笔比特币交易中。
下图总结了每位观察者的视角,接下来的四个小节也按同样的顺序展开。

1. 外部观察者在比特币上能看到什么?
首先,外部观察者看到的是一笔普通的比特币交易:输入、输出和比特币金额,与其他任何支付没有区别。这笔稳定币转移被压缩成一个 32 字节的哈希值,协议提供了两种把哈希值放进交易的方式:
- Opret:哈希值由交易的第一个
OP_RETURN输出携带。因此,哈希值在链上是可见的,表现为一小段数据,总共 34 字节。 - Tapret:哈希值隐藏在 Taproot 输出的脚本结构之内,与普通交易相比没有额外的链上占用。事实上,文档将 Tapret 描述为“在链上占用和合约操作隐私方面”的一项改进。
使用 Opret 时,观察者可以读到哈希值;而使用 Tapret 时,哈希值本身不会显露出来。无论哪种情况,区块链都不会透露任何关于稳定币、100 个单位的金额或新持有者的信息。
2. 发送方对接收方了解多少?
在 RGB 协议中,由接收方先行一步。首先,Bob 创建一张发票并发送给 Alice。发票告诉 Alice 这 100 个单位的去向:一个由 Bob 控制的比特币 UTXO。
通常情况下,Bob 不必披露这个 UTXO 本身。他的钱包会加入一个随机数,称为盲化因子,然后对结果进行哈希运算。于是,Alice 收到的是一个盲化 UTXO:一段既能充当收款目的地、又能隐藏真实输出的代码。根据 RGB v0.11.1 文档,这种隐藏形式“使 Alice 无法得知 Bob 实际持有的 UTXO”。
因此,Alice 知道是哪种稳定币以及金额,因为这笔转移是由她构建的。然而,她在此之后无法在区块链上追踪这 100 个单位。
3. 接收方从寄售包中能了解到什么?
随后,Alice 向 Bob 发送一个数据包,称为寄售包(consignment)。这个数据包包含新的转移,以及这 100 个单位的完整历史:从稳定币合约的创建(Genesis)一直到 Bob。接着,Bob 的钱包会对照比特币上的承诺逐步核查。没有完整的历史,Bob 就无法证明这 100 个单位的有效性。
因此,Bob 看到的比外部观察者更多,因为他所持单位的历史会显示此前的每一笔转移及其金额。文档把这类数据称为私有的归属状态(Owned State),并用一句话概括:“有人拥有,无人知晓”;文档还补充说,这些数据“只有在出于验证目的、属于历史的一部分时才会被披露”。
即便如此,Bob 的视野仍然只覆盖合约的一小部分。事实上,同一种稳定币在其他持有者之间的转移,只要不属于他这 100 个单位的历史,就永远不会到达他的钱包。
同样的规则也适用于单笔比特币交易内部。例如,Alice 可以同时向 Bob 和另外两个人付款:RGB 会把这三笔转移归入一个状态转换捆绑包(transition bundle)。每位接收方只会收到属于自己那笔转移的细节:这些细节可以有选择地向不同的接收方披露。捆绑包中仍然带有一份清单,列出这三笔转移所花费的全部单位,因此任何被隐藏的转移都无法把同样的单位花费两次。
4. 同一笔交易中,另一份合约的用户能看到什么?
通过一种称为多协议承诺(Multi Protocol Commitment,MPC)的结构,一笔比特币交易可以同时承载多份合约的承诺。例如,锚定 Alice 这笔转移的交易,也可以同时锚定另外两个人之间另一种资产(比如收藏品)的转移。
第四位观察者就是这两个人中的一位。为了验证自己的转移,他们只会收到针对自己合约的证明。因此,结构的其余部分,包括稳定币合约的承诺,都不在他们的视野之内。文档指出,这样的设计“提供了高度的隐私”。
RGB 隐私的局限在哪里?
RGB 隐私保护资产数据不被公众看到。但在资产的前后两位持有者之间,这种保护要弱一些。具体来说,这一模型有三个主要局限。
- 历史会随资产一路传递。每一位新持有者都会收到该资产此前的转移记录及其金额。例如,Carol 可以在她所持单位的历史中读到 Alice 向 Bob 的那笔转移。Bob 的 UTXO 盲化也遵循同样的规则:文档指出,盲化对接收方的保护“至少持续到该分配日后再次被花费为止”。当 Bob 把这些稳定币单位发送给 Carol 时,Carol 的钱包需要 Bob 真实的 UTXO 来完成验证,因此 Carol 会知道 Bob 的盲化 UTXO 背后的那个输出。
- 比特币交易始终是公开的。RGB 隐藏了资产数据,但用于锚定的交易仍然是一笔普通的比特币交易:输入和输出是公开且伪匿名的,与其他任何支付一样。这种可见性来自比特币区块链本身的设计,与 RGB 无关。
- 寄售包需要私密的传输渠道。寄售包包含这些单位的完整历史,因此任何拿到副本的人都能读到与 Bob 相同的历史。在文档所描述的理想情况下,只有 Alice 和 Bob 持有寄售包。因此,寄售包应当通过只有双方能够访问的渠道传送。
总的来说,形容 RGB 最准确的词是“私密”:资产数据不出现在公开账本上,而每一位持有者都可以审计所收到资产的完整历史。
RGB 隐私:常见问题
比特币上的 RGB 协议是匿名的吗?
RGB 是私密的,而不是匿名的。资产数据不上链,因此公众无法读到某项资产的余额、金额或持有者。不过,锚定每笔转移的比特币交易是公开且伪匿名的,而且资产的每一位新持有者都能读到它此前的历史。
转移之后,发送方还能追踪我的资产吗?
使用盲化 UTXO 时,发送方永远不会知道是哪个输出持有你的资产。这种保护至少会持续到该资产的下一次转移。
谁能看到一笔转移的金额?
发送方、接收方,以及历史中包含这笔转移的后续持有者。相反,没有人能在区块链上找到这个金额。
Opret 和 Tapret,哪种承诺方式能为 RGB 隐私提供更好的保护?
文档将 Tapret 视为在链上占用和隐私方面的一项改进,因为承诺隐藏在 Taproot 输出之内。而 Opret 则把哈希值放在一个可见的 OP_RETURN 输出中。
