长推:为什么说BRC20是一种落后的技术
如果你是一位开发者,请考虑开发识别 BRC20 交易输出的过滤器,帮助我们将这些打新输出和转移输出从我们的 UTXO 集中删掉。
原文作者:@AurtrianAjian
原文来源:Twitter
注:原文来自@AurtrianAjian发布长推。
我听过离谱的事情,但不知道你们可以这么离谱。
请停止参与 “BRC20” 打新,并且,抵制它。
你不应该再参加,因为从技术上来说这种落后的东西必定会被淘汰。你应该抵制它,因为它会造成 UTXO 集的膨胀,其应用的实际后果已近乎粉尘攻击。
之前我已经写过,像 BRC20 这样的东西压根不能被称为 “协议”,因为它根本无法保护使用它的用户。但当时我没有深入了解,我不知道它其实比我想象的还要离谱。
从表面上看,BRC20 定义了同质化代币的两种操作:“铸造(Mint)” 和 “转移(Transfer)” ……
在每一种操作的每一步中,都需要发起比特币交易并在交易输入中写入铭文(Inscription,通过输入的见证脚本在区块中写入数据)。但是,在 BRC20 中,这些写入铭文的交易所形成的交易输出几乎没有任何意义。这就是问题所在。 仔细看上面那份文档你会发现,其说法是:
“BRC20 的余额状态可通过聚合所有这些函数的活动得出”;但是,所有这些函数的活动都是通过铭文表现出来的,没有任何一个函数的有效性要求花费特定的 UTXO(乃至特定的聪)。不论是你通过铸造还是转移获得了一些 token,在你后续需要转移这些 token 的时候,都不需要花费这笔让你获得这些 token 的交易也即这些 token 实际上并不附身于比特币 UTXO,它们的状态完全由已经写入区块的铭文(以及这些铭文的顺序)决定;改变这些 token 的状态不需要你拥有解锁某个 UTXO 的能力。
(唯一需要 UTXO 关联的是转移操作的两步,详见下文)
这种设计对协议的安全性、经济性(可扩展性)和去中心化都有重大影响。首先,因为它不附身于 UTXO,自然也就无法依赖于 UTXO 本身的抗重复花费机制。BRC20 整个建立在基于区块交易排序的 “先到先得” 原则上,没有这种 “先到先得” 作为最终的后盾,它就根本无法防止负余额这种重复花费形式。
但是,基于区块而不是 UTXO 的验证机制,也使得它不可能创造出一种轻量的验证机制。不论如何,你都需要全量的区块数据,来找出一个账户的状态。(但 RGB 和 Taro 这样基于 UTXO 的协议就不需要。它们只需要区块头)这也使得,能够负担余额计算、索引的节点,相比之下会更少,也即去中心化的特性更差。
关于【长推:为什么说BRC20是一种落后的技术】的延伸阅读
走近BTC:理解BitVM所需的背景知识(1)
Delphi Digital发布了比特币二层技术研报,介绍了比特币Rollup和四大采用BitVM的项目。BitVM利用MATT思想,将复杂程序和数据存储在链下的Merkle树中,只发布Merkle Root到链上,实现比特币原生的验证欺诈证明。比特币脚本和Taproot以及预签名是实现这一方案的重要技术。P2SH交易类型中可以添加Script,比特币节点会验证公钥和公钥hash是否匹配,以及数字签名是否正确。隔离见证/SegWit升级解决了交易延展性问题,P2WSH功能与P2SH相似。Taproot可精简脚本内容,BitVM基于此构建复杂方案。下一篇文章将详细介绍Taproot、预签名等技术。
币安研报:比特币的未来——代币篇
比特币进入新时代,符文协议为比特币带来可替代的代币,与BRC-20竞争。符文可以铭刻任意内容,创造比特币原生数字工件。符文的动机是为比特币创造一个专用的、可替代的代币标准,避免继承序数的复杂性,并应对加密世界中的投机行为。符文与BRC-20相比具有更高的效率和兼容性,可以通过比特币交易转移。符文的成功对比特币的未来意义重大,我们将继续密切关注。
也许是为了降低计算最新状态(识别假币)的负担,BRC20 定义了一种奇怪的转移机制:不论你如何得到了一些 token,你的转移都必须分成两步:第一步,将一些 token 转化为 “可转移” 状态(并指定接收人);第二步,将这些 token 实际转移出去,并由此将第一步的 “转移铭文” 作废。你的下家也一样。
这样的机制当然也影响了用户体验和经济性。不论你可以从铭文机制中得到多少的折扣,多发一笔交易都足以把你得到的好处再吃回去。此外,这种奇怪的、不利用 UTXO 的机制,也使得这样的 token 在使用基于比特币 UTXO 的智能合约(闪电通道、DLC,等)的时候,先天增加了障碍,落后于最新一代的协议。
所以我说,BRC20 是一种落后的技术。当新一代的代币发行协议能够实现轻量的客户端、经济代价更小而且更容易接入现有的比特币生态的时候,BRC20 还停留在通过消耗区块空间来获得可编程性的程度。你可以想象,当 RGB 和 Taro 这样的协议的生态涌现的时候,等待 BRC20 的结局是什么!
吊诡的是,虽然 BRC20 的铸造和转移明明不需要 UTXO 上的关联,它却为铸造设计了一种 “限额” 机制 —— 在铸造代币的时候,单个 UTXO 所能铸造的代币数量,是可以指定上限的。你应该能猜到这是为了干什么。 没错,这是为了适应 “打新” 这个场景中的公平性要求。
它不能让一个人用一个输出把所有的 token 都 mint 出来,所以设计了这样的限制。但试想,需要用 UTXO 来占位的时候,这些 UTXO 就必定是小额的 UTXO —— 你把资金切得越碎,能够得到的新 token 就越多。结果就是 UTXO 集的膨胀。
这些用来打新的 UTXO,被明确地规划成 546 聪(P2PKH 输出)/330 聪(P2TR 输出),也即仅仅持平于 bitcoin core 的粉尘输出限额。花费它们本身是不经济的, 后续的转移操作也不要求花费它们,那么,它们很可能会永远留在 UTXO 集中,造成 UTXO 集的不可逆的膨胀。
转移操作同样会留下 UTXO。虽然理论上不需要这些 UTXO 是小额的,但在当前的工程实现中,使用的依然是小额的 UTXO。并且,因为 BRC20 不要求 UTXO 连贯花费的特性,被永远留在了 UTXO 集中。
图表显示,自 2023 年 4 月 23 号(BRC20 开启交易的时候)以来,比特币的 UTXO 集已经从 5 GB 膨胀到了 6.8 GB。我尚无法证明所有的膨胀都跟 BRC20 有关,但这段时间的增长曲线已经比原来的增长曲线陡得多。需要引起注意。 https://statoshi.info/d/000000009/unspent-transaction-output-set?orgId=1&from=now-5y&to=now&refresh=10m
抵制它。如果你是一个节点,你可以在节点的配置文件中增加这样一行:dustrelayfee=0.00005,这会让粉尘输出的门槛提高 5 倍(该值的默认值是 0.00001,你可以酌情加减)。如果从前你的节点会转发带有粉尘输出的 BRC20 交易,那么现在,你的节点将不再转发输出低于 2730 聪/1650 聪 的交易。
但是,如果这些交易能够进入区块,你的节点依然会保存这些交易以及它们的输出。 如果你是一位开发者,请考虑开发识别 BRC20 交易输出的过滤器,帮助我们将这些打新输出和转移输出从我们的 UTXO 集中删掉。我个人就会选择运行这样的过滤器。 行动起来,保护比特币网络。
免责声明:本文仅代表作者个人观点,不代表链观CHAINLOOK立场,不承担法律责任。文章及观点也不构成投资意见。请用户理性看待市场风险,以及遵守所在国家和地区的相关法律法规。
图文来源:@AurtrianAjian,如有侵权请联系删除。转载或引用请注明文章出处!