观点:请停止参与落后的BRC-20打新并抵制它。 Translation: Opinion: Please stop participating in the outdated BRC-20 initial coin offering (ICO) and resist it.

观点:请停止参与落后的BRC-20打新并抵制它。 Translation: Opinion: Stop participating in and resist the outdated BRC-20 ICO.

BRC 20:过时的技术还需抵制

来源:Twitter,作者:@AurtrianAjian from BTCStudy

我听过离谱的事情,但不知道你们可以这么离谱。请停止参与“BRC 20”打新,并且,抵制它。你不应该再参加,因为从技术上来说这种落后的东西必定会被淘汰。你应该抵制它,因为它会造成 UTXO 集的膨胀,其应用的实际后果已近乎粉尘攻击。

之前我已经写过,像 BRC 20 这样的东西压根不能被称为“协议”,因为它根本无法保护使用它的用户。但当时我没有深入了解,我不知道它其实比我想象的还要离谱。

BRC 20的技术落后

从表面上看,BRC 20 定义了同质化代币的两种操作:“铸造(Mint)”和“转移(Transfer)”。在每一种操作的每一步中,都需要发起比特币交易并在交易输入中写入铭文(Inscription,通过输入的见证脚本在区块中写入数据)。但是,在 BRC 20 中,这些写入铭文的交易所形成的交易输出几乎没有任何意义。这就是问题所在。

仔细看上面那份文档你会发现,其说法是:“BRC 20 的余额状态可通过聚合所有这些函数的活动得出”;但是,所有这些函数的活动都是通过铭文表现出来的,没有任何一个函数的有效性要求花费特定的 UTXO(乃至特定的聪)。不论是你通过铸造还是转移获得了一些 token,在你后续需要转移这些 token 的时候,都不需要花费这笔让你获得这些 token 的交易。

也即这些 token 实际上并不附身于比特币 UTXO,它们的状态完全由已经写入区块的铭文(以及这些铭文的顺序)决定;改变这些 token 的状态不需要你拥有解锁某个 UTXO 的能力。(唯一需要 UTXO 关联的是转移操作的两步,详见下文)

这种设计对协议的安全性、经济性(可扩展性)和去中心化都有重大影响。首先,因为它不附身于 UTXO,自然也就无法依赖于 UTXO 本身的抗重复花费机制。BRC 20 整个建立在基于区块交易排序的“先到先得”原则上,没有这种“先到先得”作为最终的后盾,它就根本无法防止负余额这种重复花费形式。

但是,基于区块而不是 UTXO 的验证机制,也使得它不可能创造出一种轻量的验证机制。不论如何,你都需要全量的区块数据,来找出一个账户的状态。(但 RGB 和 Taro 这样基于 UTXO 的协议就不需要。它们只需要区块头)这也使得,能够负担余额计算、索引的节点,相比之下会更少,也即去中心化的特性更差。

也许是为了降低计算最新状态(识别假币)的负担,BRC 20 定义了一种奇怪的转移机制:不论你如何得到了一些 token,你的转移都必须分成两步:第一步,将一些 token 转化为“可转移”状态(并指定接收人);第二步,将这些 token 实际转移出去,并由此将第一步的“转移铭文”作废。你的下家也一样。

这样的机制当然也影响了用户体验和经济性。不论你可以从铭文机制中得到多少的折扣,多发一笔交易都足以把你得到的好处再吃回去。此外,这种奇怪的、不利用 UTXO 的机制,也使得这样的 token 在使用基于比特币 UTXO 的智能合约(闪电通道、DLC,等)的时候,先天增加了障碍,落后于最新一代的协议。

所以我说,BRC 20 是一种落后的技术。当新一代的代币发行协议能够实现轻量的客户端、经济代价更小而且更容易接入现有的比特币生态的时候,BRC 20 还停留在通过消耗区块空间来获得可编程性的程度。你可以想象,当 RGB 和 Taro 这样的协议的生态涌现的时候,等待 BRC 20 的结局是什么!

BRC 20的限额机制与UTXO集膨胀

吊诡的是,虽然 BRC 20 的铸造和转移明明不需要 UTXO 上的关联,它却为铸造设计了一种“限额”机制 —— 在铸造代币的时候,单个 UTXO 所能铸造的代币数量,是可以指定上限的。你应该能猜到这是为了干什么。

没错,这是为了适应“打新”这个场景中的公平性要求。

它不能让一个人用一个输出把所有的 token 都 mint 出来,所以设计了这样的限制。但试想,需要用 UTXO 来占位的时候,这些 UTXO 就必定是小额的 UTXO —— 你把资金切得越碎,能够得到的新 token 就越多。结果就是 UTXO 集的膨胀。

这些用来打新的 UTXO,被明确地规划成 546 聪(P2P KH 输出)/330 聪(P 2 TR 输出),也即仅仅持平于 bitcoin core 的粉尘输出限额。花费它们本身是不经济的, 后续的转移操作也不要求花费它们,那么,它们很可能会永远留在 UTXO 集中,造成 UTXO 集的不可逆的膨胀。

转移操作同样会留下 UTXO。虽然理论上不需要这些 UTXO 是小额的,但在当前的工程实现中,使用的依然是小额的 UTXO。并且,因为 BRC 20 不要求 UTXO 连贯花费的特性,被永远留在了 UTXO 集中。

图表显示,自 2023 年 4 月 23 号(BRC 20 开启交易的时候)以来,比特币的 UTXO 集已经从 5 GB 膨胀到了 6.8 GB。我尚无法证明所有的膨胀都跟 BRC 20 有关,但这段时间的增长曲线已经比原来的增长曲线陡得多。需要引起注意。

图表链接

抵制措施和行动

抵制它。如果你是一个节点,你可以在节点的配置文件中增加这样一行:dustrelayfee= 0.00005,这会让粉尘输出的门槛提高 5 倍(该值的默认值是 0.00001,你可以酌情加减)。如果从前你的节点会转发带有粉尘输出的 BRC 20 交易,那么现在,你的节点将不再转发输出低于 2730 聪/1650 聪 的交易。

但是,如果这些交易能够进入区块,你的节点依然会保存这些交易以及它们的输出。

如果你是一位开发者,请考虑开发识别 BRC 20 交易输出的过滤器,帮助我们将这些打新输出和转移输出从我们的 UTXO 集中删掉。我个人就会选择运行这样的过滤器。

行动起来,保护比特币网络。