bitcoin core 开发者是最介意区块体积扩大的团体吗?
注:本文来自@AurtrianAjian 推特,MarsBit整理如下:
自 2017 年(或更早)以来,中文世界里流传着一种关于比特币的阴谋论:bitcoin core 开发者控制着整个比特币网络,随心所欲地审查他们不喜欢的行为;他们最明显的指向是反对区块体积扩大。
真是如此吗?
显然这种说法跟 “区块体积战争” 和 “隔离见证” 有关。但如果你真的了解隔离见证,你不会这么认为
先解决一个小问题:bitcoin core 开发者反对一切导致(实然上的)区块体积扩大的 技术/活动 吗?
另一个相关的问题是:bitcoin core 开发者是最介意区块体积扩大的团体吗?
答案都是否定的。
有关隔离见证技术的辩护理由,最全面的资料当属这一份:<https://btcstudy.org/2022/10/07/segregated-witness-benefits/…>。下文完全依据这份资料
事实 1:如果你使用的是支持隔离见证(segwit)的节点,那么隔离见证软分叉之后,你收到的 “完整区块(区块 + 见证数据)” 体积几乎都是大于 1MB(比特币原有的区块体积的上限)的。这是因为 segwit 改变了区块体积的计量方式,将 segwit 输入的脚本签名数据(witness)体积计量为实际字节数的四分之一
而前隔离见证的交易(包含了脚本签名数据)和隔离见证交易的实际含义部分(输入、输入等元信息)则依然按字节数计算。因此,在不支持隔离见证升级的节点那里,1MB 的区块体积上限得到了保留(这也是为什么 segwit 是一次软分叉);但在支持隔离见证的节点那里,区块的实际字节数会超过这个 1MB 的限制
超出多少,会跟 witness 数据的占比有关;当区块完全由 witness 数据构成时,它最大可以达到 4 MB。
你从上面那份资料可以看出,开发者非常清楚这样的机制会让 “完整区块” 的体积变大(这个机制本身是为了给使用隔离见证输出提供一些经济激励)。并且预测了实际的区块体积会在 1.6 MB 到 2 MB 之间。
这就是为什么你可以看到有些人的推特名字挂着 “NO SegWit 2x” 的后缀 —— 他们反对隔离见证把区块变大了。
也就是在这些人看来,隔离见证支持者捍卫小区块还不够彻底。
事实 2:隔离见证改变了 sighash(为交易签名时候的哈希操作)的工作方式,使签名验证时候的哈希计算量不会呈平方级增长。
如无这个改动,假定交易的体积翻倍,那么签名的数量可能会翻倍,而哈希运算的次数会变成 4 倍(而不是两倍)。
这个改动的好处是什么?
资料写的很直白:“让区块的体积可以安全地提高。扩大区块而不限制交易的体积。”
从上面两个事实中,你找不到任何一个迹象表明隔离见证的支持者(包括被阴谋论的 bitcoin core 开发者)反对一切扩大区块的操作。隔离见证明明白白就是扩大了区块。
你可以认为,他们只是反对不经过技术上的改进、不考虑资源开销的平衡就直接提高区块体积限制的方案。
比如,假设你直接将区块体积从 1MB 提高到 2MB,而不设任何技术上的改进,那么上述的 sighash 计算量呈平方级增长的事实就会让你陷入窘境。在隔离见证以前,已经有人利用它构造出了需要 3 分钟才能验证完的一笔交易。(三分钟!)
可笑(且可悲)的是,近期出现的通过 witness 字段向区块塞入大体积数据的操作(例如 Ordinals 使用者塞入了大体积图片)正是因为隔离见证才成为可能的,一些人却还在臆想 bitcoin core 开发者会出来表示反对
如果你们还要编造关于 bitcoin core 开发者的阴谋论,请学学外网,把 隔离见证/taproot 说成垃圾,说成是粗心的工程师缺乏敬畏之心的表现。
但是,不好意思,我要指出的是,上面那份关于隔离见证的资料表明,这种理解同样是无稽之谈。比特币开发者们很清楚自己在做什么。
事实 3:上面那份资料的最后一部分是 “通往综合的区块限制”,大意是说,比特币的共识给区块和交易的资源开销做了各种各样不规整的限制,比如单个区块内的签名验证的次数是有上限的(好像单次脚本执行也有)。这些限制是制约人们利用比特币可编程性的因素(因为开发者将不得不了解这些奇怪的限制)
而隔离见证,是向综合性的(也就是单一的)资源开销限制迈出的一步。我相信,正是出于这种目的,taproot(隔离见证 v1)进一步解除了这些不规整的限制。
在隔离见证升级中,单个输入的 witness 的大小是有单独的限制的;但是在 taproot 升级中,这个限制被取消了,从而允许人们编程更大体积的脚本
前一段时间,有人利用这一点,构造了一个使用 999 个公钥的多签名合约,在验证时也成功通过了。
Ordinals 使用者之所以能一次性塞入大体积的数据,也是因为 taproot 解除了这个限制。
但其实,利用隔离见证,不连续地在 witness 中塞入大体积数据,跟利用 taproot 一次性塞入,在经济性上没有太大差别
所以,取消对 witness 体积的单独限制,不是粗心大意,也不是缺乏敬畏之心,而是自隔离见证 v0 起,开发者希望进一步释放比特币可编程性的结果。
至于通过 witness 塞入大体积数据所导致的区块体积膨胀,可以指出的是:1. 没有证据表明这样的区块对隔离见证节点来说验证起来更难(只有硬盘存储开销变大了);2. 实际上没有很好的技术手段来阻止人们这样做(你不让人们这样做,他们就会选择负面效果更大的技术方案)。
总之,请多了解一些技术,少相信一些阴谋论。比特币有开放的社区和尊崇理性的开发者文化,如果你抱有怀疑,不妨多找点资料看看。例如关注 http://btcstudy.org 和 https://bitcoinops.org/zh/newsletters/
最重要的是,你的比特币节点掌控在你手里,你想升级就升级,不想升级就不升级,甚至于你还可以回退版本。没有任何人可以用技术手段(比如硬分叉)将你踢出这个网络。这是比特币网络之所以健壮、之所以能容纳不同观点(比如上面说的 no 2x)的技术基础。
哦,差点忘了说,比特币有很多种开发者:有些人为 bitcoin core 客户端贡献代码,有些人为别的客户端贡献代码,有些人不贡献代码但开发相关的技术,有些人很少贡献代码但参与各种各样的讨论。他们都是具体的人,为自己的比特币理想而奋斗,在一个基于说服而非强制的文化中,追求来自 自由人 的认同。