Hashkey Capital 播客 Hash Out 42 解码看门人迷思:开发者与比特币“生态” (上)
播出时间:2023-12-21 14:46:06 CST
整理:ChainCatcher
旁白 00:03
您现在收听的是由 HashKey Capital 制作的播客节目 Hash Out 42。在《银河系漫游指南》里,超级电脑“深思”经过长达 750 万年的运算与验证之后,得出生命、宇宙、万物的最终答案是42。这档节目里,我们希望与来自 Web3宇宙的创业者、投资人、开发者、社群参与者、监管机构一起分享关于加密及区块链产业的最终猜想。
阿剑 00:34
“这些开发者,实际上他们没有这么大的这个权力能够影响到你在这个比特币的区块链上能做什么,不能做什么。”
Jeffrey Hu 00:40
“Luke,他想要去做的事情,可能不是在共识规则这个层面去进行一些修改,而更多的还是在本地的客户端或者全节点这个层面上。”
阿剑 00:51
“这个保守的意义在于,他始终把安全性放在最重要的这个层面,所以它不会去随便尝试任何东西。但是你可以认为它是不保守的,因为发现了一种好的解决方案的话,其实大家会很积极地去拥抱它。”
Jeffrey Hu 01:08
hello,大家好,欢迎收听由 HashKey Capital 制作的播客节目 Hash out 42 的第三期。我是胡智威,HashKey Capital 的技术总监。今天非常荣幸邀请到了比特币研究者 BTC Study 贡献者阿剑老师来和我们一起探讨比特币生态的一些迷思。那阿剑老师要不跟我们听众朋友打个招呼吧?
阿剑 01:28
听众朋友们大家好,我是阿剑,我是一个比特币的研究者。非常荣幸收到 Hash out 42 的邀请,来跟 Jeffrey 一起录制这一期播客。
Jeffrey Hu 01:39
OK,好的,我们这期播客的名字其实叫做解码看门人迷思,我们想讨论比特币,包括比特币生态的,大家常见的一些误解。对,所以我想要不我们先邀请一下阿剑老师来说一下这个最近的一些迷思,因为就像标题一样,那我估计可能最近大家会有一个我们观察到的一个误解,也是我们在做这期播客节目之前去讨论到的一些东西。就是说,某一些开发者是看门人,就基本上可以做什么,或者不能做什么都是由他们说了算的。在这一点,这个第一个可能大家比较关注的迷思上,阿剑老师有哪些可能想要评论的?
阿剑 02:19
这个是中文世界长期以来,嗯,你可以说是根深蒂固,甚至说是最根源的一种迷思,或者说一种想象。它对于比特币的开发者,尤其是所谓的 Bitcoin Core 的客户端的开发者,认为他们看门人就是能做什么,不能做什么,都是得由他们说了算的。实际上,这种想法其实几乎就没有什么真实性可言了,因为大量的事情就是,不管是被某一个还是某一些,还是被许许多多的 Bitcoin Core 的开发者,或者是其他的客户端的开发者不喜欢的这个事情,直到今日,直到我们录播客的今天,其实还在比特币的区块链上仍然在发生。举个例子,就大家可能最近都听说过有一位开发者,他叫Luke,那Luke他有一个特别鲜明的立场,就是他反对在比特币的区块链里面乱塞入数据。当然这个具体来怎么定义,什么是跟比特币有关的数据,什么是跟比特币无关的数据,不应该写入的数据,他自己没有明确表达过。但是我后来仔细想一下,其实它的这个核心的意思,我自己的总结,不,我不能代表它,但是我自己的总结,我认为是一种可以接受的信念是,比特币的区块链上只应该写入跟比特币的密码学安全有关的数据。
阿剑 03:36
什么是跟比特币的密码学安全有关的数据?比如说我们每一笔比特币它都是一个输出,那它的脚本当中,会需要注明公钥来确认说,这笔钱只能被哪个公钥的所有者(就哪一个私钥所花费),以及当它被实际上被花费的时候,会需要在链上去记录一个由这个公钥背后的私钥计算出来的这个签名,由这个签名来证明这笔花费是有效的。
阿剑 04:02
那这些东西的话,可以总结为他们是跟比特币的密码学安全有关的数据,但是相应的其他的一些,比如说任意的这些数据,类似于额外的信息,或者今天发生的什么,有一些人想在上面写一个生日祝福之类的,这些都是跟比特币的密码学安全无关的信息,那它们就不应该被写上去,这是我自己个人的总结,但是Luke的他的想法可能会跟这个想法接近,或者是更严苛一点都好,我想指出的事实是可能Luke他不喜欢这样,包括可能不止他一个人不喜欢这样,但是很多人都会发现这些事情其实到今天它依然在发生,而且你这样做的就是说记录了这些额外信息的,跟比特币的密码学安全无关的这些信息的这些区块依然是有效的这个区块。包括也有很多开发者认为其实这些事情是根本没有办法阻止,就是说你其实是技术,不存在一种有效这个技术手段能够成功地分离开什么是有意义的,对比特币的这个安全性有意义的这个数据,什么是没有意义的这个数据,因此也就是在根本上注定了这些事情,就是说你最多你只能玩一个打地鼠的游戏,或者说猫抓老鼠的游戏,出现一只老鼠,你抓一只老鼠,但是不存在一种一劳永逸的 办法。
阿剑 05:19
那总而言之,我想表达的意思是,首先不管大家怎么去理解,有一部分或者说一些比特币的开发者明确表现出来的个人立场,这些开发者,实际上他们没有这么大的这个权利能够影响到你在比特币的区块链上能做什么、不能做什么。尤其是有一个非常重要的这个事情,就是如果大家能理解这个事情的话,就应该能够理解到,其实不管是开发者还是矿工,其实他们的这个权利其实都是在一定的制衡的结构当中,就是比特币的网络当中选择什么样的这个共识规则,就是说允许什么样的这个区块成为一个有效区块的这个共识规则是由每个节点自己选择的,就是你作为一个节点,你可以选择你认为自己认为有效的这个共识规则。当然你的这个共识规则不能选择跟其他人不相兼容的,但是只要是这个兼容的这个规则当中,你可以自己选择一套。
阿剑 06:09
举个例子,大家都现在都听说 2021 年实施的这个 Taproot 的升级,但是事实上如果你运行一个 Taproot 升级以前的这个 Bitcoin Core 或者是其他的客户端的这个版本,你的节点不会离开网络,你的节点依然在网络当中继续担当它作为一个全节点的这个验证功能,只是它无法验证所谓的这个 Taproot 的输出的相关的这个交易,再往前推一点, 2017 年的时候,比特币网络激活了隔离见证分叉,那么如果你是使用的一个在隔离见证以前发布的这个 Bitcoin Core或者是其他的 Bitcoin 客户端的这个版本,你到今天你依然能够运行在比特币的网络上,也就是说你只是不运行 2017 年以后的新增的这些比特币共识规则相关的这些交易,使用 2017 年以前的这些共识规则的这个交易,你一样是能够验证的。
阿剑 06:58
这就说明一点是什么呢?说明了所谓的比特币网络当中,它到底是用哪一些规则来限制我们能在比特币的区块链上做什么?这些事情实际上是由一个比特币的全节点网络分散式的决定出来的,并不是由某一个人或者某一群人决定出来的, 不管这一群人,到底是比如说某一群矿工或者是某一群开发者,这种想法其实都是偏离事实的,最接近事实的真相是什么?是这件事情是由比特币的网络,一个由全节点组成的网络,现在全网有公开,有 15000 个节点, 16000 个,甚至那不公开的这个节点有更多,由这些节点的这些运营者使用一种完全平等的这种方式来决定出来,他到底去验证一个区块的哪一部分,哪些区块在他看来是可以接受的,基本上是这样的一个过程。
阿剑 07:52
所以不存在说某一个人、某一个开发者或者某一群开发者他能够成为整个网络的这个看门人的这种角色,如果存在这样的角色的话,其实比特币就失败了,因为比特币它想要做的是一种抗审查的货币,或者说它想要的正是一个没有单点故障的系统,如果存在这样的人,他有这么大的这个权利的话,他就变成了一个单点故障。
Jeffrey Hu 08:18
一个延续的一个话题,其实就是经常可能会有一种误解,就是好像这个某一个网络里面,它是由某一群人去说了算的,那么可能是刚才是提到开发者,也有可能是一些矿工等等,他们是可能会决定这个整个网络的走向或者命运。那么其实这个是我觉得可能大家会常见的一种误解,那么其实可能比特币更像刚才阿剑老师说到的,是一种比较分散的网络,比较去中心化的网络,所以每个人的运行全节点他还是有他自己的一些意义在这块。那除此之外,最近其实也看到一些新闻报道,就是就顺着刚才说那个开发者那个话题来说,就经常有一些新闻报道里面会提到一个词叫做核心开发者。那我先说点我自己的感觉,就是我每当看到这几个字的时候,我自己血压会稍微升高一点,因为感觉大家可能没有理解刚才阿健老师说的这个开发者背后的一些概念,因为也有可能是翻译上的一个错误,就是大家可能不太会注意到大小写,就会把这个Bitcoin Core Dev,就是大写的 C 的 Core Dev 可能理解成了小写的 core Dev,就是比特币的核心开发,但实际上如果我们要去做一个分词的话,其实应该是把前两个单词Bitcoin Core分成一个词,作为比特币的其中一种,我们刚才说的全节点的一种实现的开发者,而不是比特币的 core dev ,不是比特币的核心开发者,不是说整个比特币的网络都是由这些核心开发者去说了算的,那么其他一些网络可能会大家会看到,比如说像以太坊的核心开发者可能会在经常会有一些他们的像,比如 ACD call 或者是这种meeting,他们会决定,比如说明年 1 月份可能就要有一些硬分叉的升级或者怎么样?但比特币好像没有这么一个比较集中的一个核心开发者群体去做这种对于网络硬分叉的升级的讨论。
Jeffrey Hu 10:11
那当然其实也会,比如说对 Bitcoin Core 可能会有一些自己的,比如说提 PR (Pull Request) 的话,可能会有一些 PR Review Club 这种会议,可能会去讨论一些这个升级,或者是一些 PR 的这个拉取的一个提案是不是合理,或者是有没有其他一些影响,但是没有一个这种核心开发者的会去决定整个网络的一个走向,这个可能是一个大家比较常见,也可能会经常会遇到的一种,我认为是一种误解吧。那当然这块就额外再提一句,就是就说明这个大小写也很重要,就是我自己作为一个稍微有点强迫症的人就会看到这种从 Core 的这种 c 如果大写看成小写的话就会有问题。那同样的,对于 HashKey 其实也类似,就是我们的这个 HashKey 的 k 经常会小写,那其实 h 和 k 都是大写的,我不知道对于这个有核心开发者这块,阿剑老师没有什么要补充的。
阿剑 11:00
对,其实我的反应跟 Jeffrey 的反应有点像,就是血压会稍微升高一些,甚至我想提一个比较刺激一点的提议,就是说如果我们听众朋友们听到,再有人跟你提比特币核心开发者就是用中文字写出来的话,你应该合理地怀疑一下跟你沟通的这个人的对于比特币世界的这个理解。我讲这话非常不客气,因为其实是这里面有两方面的原因,一方面是它是一种沿袭已久的误会,我自己个人的怀疑是肯定在 2017 年以前这种误会已经形成了,就是说大写的Bitcoin,就大写的 B 跟大写的 C 开头的一个 Bitcoin Core ,它本身,这个Bitcoin Core,我先说一下 Bitcoin Core 的这个来历是什么呢?没错,它就是大家所熟知的中本聪自己写的那个软件 Bitcoin,这个软件的后继者。就是说在中本聪离开之后,然后一些开发者准备把整个的代码库迁移到我们现在的 GitHub 的网站上的时候,他们决定还是使用一个新的名字,就是使用了这个 Bitcoin Core,就是 B 也是大写的,这个 C 也是大写的,你说这个 Core 它一定有很大的含义吗?其实也没,我感觉也没有。
阿剑 12:15
顺便再讲一下,就是大家可能认为 Bitcoin Core,它就以为比特币世界里面只有一种客户端,其实也不是。因为 Bitcoin C ore 它虽然它占据的这个使用量是最大的,就是Bitcoin Core的这种客户端,但是其实也存在有其他语言开发的这个客户端。比如说有一种客户端叫 btcd,它是一个闪电网络实现的这个团队 LND 就是 Lightning Labs 他们开发的一个Bitcoin的一个客户端,它使用的是 Go 语言编写的,还有一些人他们会使用 Java 语言编写的这个 Bitcoin 客户端,我猜现在应该也有人会尝试使用 Python 或者是 rust 语言去写一个比特币的这个客户端。对,这些都是很常见的事情,而且大家还要考虑到另外一点,就是什么呢? 我前面已经讲过了,你在比特币的这个网络当中,大家不是非得使用同一个版本的软件,也不是非得使用同一套共识规则。这意味着其实如果你在比特币网络当中,你可能看到,虽然大家都在使用 Bitcoin Core 的客户端,但是有些人使用的是 22.0 的版本,有些人使用的是 0.21 版本,有些人使用的是 0.17 版本。本质上来说,虽然他们都是使用的比如说 Call 的这个客户端,他们的软件在一定程度上它是有差别的,严格一点来说你不应该把它当成完全相同的这个软件。
阿剑 13:34
那撇开这一些,我们再继续回来。那 Bitcoin Core 这个名字,可能一开始中文世界的人在理解比特币的时候,就直接把它翻成了比特币核心,然后比特币核心开发者,这样的一种,你可以认为它是一种翻译上的误会,但是我想说的是它可能还受到第二点因素的影响,就是它是一种文化上的误会。这种文化上的误会是什么呢?在于我不确定是否这是否受到了后来的一些密码货币项目,比如说以太坊的这个影响,因为以太坊,它虽然有一些以太坊的这个开发者,或者是支持者认为自己使用了跟比特币相同的治理结构,或者说 关于整个网络的这个应该如何升级、应该如何协调这个升级、如何确定升级内容,他们认为自己使用了相似乃至于相同的结构,但是我要说这并不是真相。
阿剑 14:24
以太坊的开发会比比特币的这个软件的这个开发实际上它中心化的多。关键的一点就是像 Jeffrey 说的,以太坊这个世界里面是没有一款客户端叫做以太坊核心的。以太坊的世界里面没有一款客户端叫做 Ethereum Core ,对吧?实际上你现在能找到是 Geth 客户端,以前有 Parity 客户端,现在 Parity 客户端我不确定它还在不在维护,那现在可能有一些其他的一些客户端,然后以太坊的世界里,比如说它会有一个所谓的 all core developer meeting,大概是每两个周的星期五晚上就举行一次,然后就会说,需要讨论某一些事项的时候,你就会邀请有一些人去参加这个会议,当然其他人可以旁听,其他人旁听不一定能表达意见,就是或者说能不能表达意见,这并不由你说了算,对吧?而是由会议本身有一个组织者,那他可以,他可以去设置这个议程。
阿剑 15:19
然后还有一个很重要的地方在于以太坊使用的是所谓的这种硬分岔的这种升级模式。硬分岔意味着什么呢?硬分叉就是如果你的节点不升级,而大部分人升级的话,那么你就没有办法再加入这个网络了,你会因为技术上的理由直接被踢出这个网络,就是如果你不同意这个升级,或者是你不想升级你自己的软件,你的节点就没有办法在以太坊的这个网络当中继续存在下去,这是一个关键性的这个差别,这意味着谁掌握了这个定义我们要升级什么、我们要更新以太坊协议所谓共识规则的这个权利的话,它实际上掌握了一种非常大的这个权力,可以使得一些人出于一个他自己并不自愿的一个理由,会被踢出这个网络。 这种权利实际上就构成了很多人理解的所谓的核心开发者的权力的来源。
阿剑 16:08
而且这种想象在一定程度上在以太坊上是真实的,只是它在比特币上并不这样而已。因为比特币选择了完全不同的这个开发的方式,并且整个的社区文化也跟以太坊的完全不同,所以我在想就是说,一方面是沿袭已久的翻译上的这种误会,另外一方面是一种文化上的这种想象,这种文化上的想象可能跟你自己的这个实际的这个生活经验有关,也有可能跟一些其他一些密码货币的项目的这种开发的这个方式有关。
阿剑 16:39
但是这一些在比特币上这种文化想象是极大程度上是错位的,因为比特币里面并不存在这样的一种能够掌握一种这么大的权力的这个机制,实际上也不存在某一种像你自己的这个亲身经历一样,有人能掌握这么大的这个权利,相反,我建议你自己去尝试运行一下 Bitcoin Core 或者是其他任何的比特币的这个客户端。
阿剑 17:02
我知道我有 ,我身边有一些朋友是他就选择不运行 Bitcoin Core,就他明确表示他不运行Bitcoin Core ,他喜欢运行 btcd,对吧?这都完全没问题。只要你自己运行一下这些客户端,包括你可以,甚至你可以挑一些很老的这个版本的 Bitcoin Core,或者其他的这个比特币的软件的客户端尝试运行一下,然后你就会知道这是怎么回事。
旁白 17:29
本节目由 HashKey Capital 倾情制作,欢迎大家在Spotify、 Apple Podcast、 Google Podcast 等播客平台关注收听。
Jeffrey Hu 17:41
其实我觉得阿剑老师刚才的回答,其实可能也回答了另外一种大家最近常见的一种误解,就是说 Luke 他可能要新改一客户端,那么跟现在的很多 Bitcoin Core 的实现不一样,所以他可能要去分叉了,或者是Luke,那他建议那个 Bitcoin Core 在新版本里加一些功能,那可能会导致整个网络的分叉,那实际上这个也是一个比较常见的误解,就是目前从我们看的公开的信息来说,整个 Luke 他所想要去做的事情,可能不是在我们提到的共识规则这个层面上面去进行一些修改,而是更多的还是在本地的这个自己的所谓客户端或者全节点这个层面上面做了一定的修改或者过滤,或者是一个转发策略上进行了一些修改,所以就目前来看其实跟分叉其实是完全没有关系的。然后刚才其实也说到了分叉这块,就是还有一个大家会经常提到的一种误解,就是比特币开发文化其实可能会是比较保守的,因为每次都是软分叉,阿剑老师对这块是怎么看?
阿剑 18:41
我给大家一些数字,可能会让大家更具体的理解这一点。或者我给 Jeffrey 提一个问题。第一个问题是,你认为 Bitcoin 网络是否运行过硬分叉?第二个问题是如果有的话,你认为是几次?
阿剑 19:10
现在被大家明确认定的比特币网络的这个共识规则更改的次数,总共包括 Taproot 升级是 21 次,但是这里面统计的方式,或者说定义方式是会有一些分歧。比如说我很喜欢的一位比特币的工作者,就是应该是称作工作者,因为他并不是一个开发者,他是 Jameson Lopp,他自己认为因为一些意外的原因构成了比特币区块链出现分裂的这个情形,在他看来也不一定被算为硬分叉,那么在他看来比特币网络上的硬分叉只有一次,我记得没错的话,应该是 2013 年。
阿剑 19:49
为了什么事情呢?为了向比特币的脚本当中添加一种特殊的操作码,就是 NOP,就是遇到这个操作码的时候,你的脚本应该是不做任何的事情,就遇到这个操作码,你可以认为它只是一个占位符,对,遇到这个操作你就不做任何事情,那这个不做任何事情的这种操作就完全多余的。那它是为了做什么呢?它是为了给日后的这个软分叉升级提供帮助。
阿剑 20:16
就是说旧节点,一旦这一次升级之后,是能够理解 NOP 操作码的语法的一个节点,那么你遇到这个节点的时候,你就不做任何事情。但是那些使用了新的共识规则的节点,遇到了一个 NOP 操作码,它可能会明确地认定它是有一定的语义的,然后来去执行它的这个语义,然后从而完成这个所谓的共识规则的软分叉升级,所以很有趣,对吧?你发生了 21 次共识规则变更,只有一次是硬分叉,而且这一次硬分叉还是为后面的软分叉 升级提供帮助。所以可以认为,比特币网络这么多的升级当中,都是在做软分叉的升级。
阿剑 20:58
那么我们再回到一个问题,就是说这种软分叉升级的这个文化,我们先不管它是怎么来的,那它客观上对比特币网络的这个影响是什么?它会不会导致比特币的开发者更加的保守?我觉得这里面是有两个方面的,一个方面是比特币的开发者不是因为软分叉而保守,或者说你可以认为大家对比特币的这个网络的理解就是对于这个网络来说有一个东西是不能牺牲的,就是安全性,各方各面的安全性包括在于比如说我们说节点你能不能抵抗这个拒绝服务式攻击, DOS 攻击,对吧?以及个人用户你使用公钥的时候,或者说你使用脚本的时候安不安全?又或者是说整个网络的共识你在执行的时候是否安全?这些安全性是比特币网络最重要的一个东西。
阿剑 21:48
给定这个最重要的这个优先项的话,其实你自然而然会发现比特币的开发者不会去尝试任意可能尝试的开发方向,而他们最主要的开发方向一定是说我要强化比特币的安全性,这是一方面。所以如果一些人认为比特币网络上好像不是什么事情都能做,或者是说好像增加新的这个特性也特别慢,认为这是一种保守的一个表现的话,他们的第一印象是对的。但是至于说这件事情本身,说你是不是应该把它理解为一个保守,那我自己会觉得是保留意见。因为我接下来讲的事情是在比特币的,比如说 2021 年的这个 Taproot 升级当中,它使用了这个施诺尔签名,就是这件事情很有趣,有趣的地方在哪里?我们知道比特币是最早出现的密码货币项目在内,在它刚刚出现的时候,它选择了使用 ECDSA 这个这种电子签名的这种算法,而且他选择的椭圆曲线是中本聪精心挑选的,他避开了更多人使用的那一条,他选择了一个更少人使用的那一条。
阿剑 22:51
然后的话我们会发现后来很多密码学货币项目都继承了这一点,就包括后来的出现以太坊也好,或者其他项目也好,他们继续使用了 ECDSA 签名。但是也有一些后来的这个项目,他们会使用施诺尔签名的一些变种,比如说 Ed25519,就是如果了解密码学的这个朋友会知道这个 Ed25519,比如说后来的 Polkadot,他就使用 Ed25519。可能还有一些其他项目也会使用这种算法,其实这种签名的话,它也是施诺尔签名的一种变种,所以会很有趣,就是当时这些比特币的这个继承者,他们继续选择 ECDSA 签名,而且并且沿用到今天,甚至还准备继续沿用下去,或者说至少不会特别积极的想使用新的一种签名算法的时候,比特币为了一些链上的效率,就是说节约链上空间也好,或者说为了让这个链上交易更加紧凑,或者说因为使用了施诺尔签名,因为 Taproot 的话,它也使用了施诺尔签名来达成了一种非常有趣的用法,就是单一地址既可以既包括密钥的这个花费方法,又包括这个脚本的花费方法,可以实现这样的东西。
阿剑 24:01
因为各种各样的理由,比特币就选择了去支持施诺尔签名。这件事情难道它保守吗?就是说它难道不是本身就是很大胆的一种事情吗?它在我能够想象到的任何的意义上,它都是一个创新,一种非常大胆的创新。就是在 Taproot 升级之前的话,你在比特币网络上,你可以明确区分什么是单公钥的输出,就是也就一般来说是个人保存自己资金的这个形式,以及脚本输出,就是通常来说可能是个人的钱包,也有可能是更复杂的这种合约式协议所使用的输出形式。
阿剑 24:38
在 Taproot 的以前,这两种输出你是能够在链上区分出来的。而在 Taproot 升级之后,这两种这个输出的形式被合二为一,这本身就是一个非常大胆的这个事情。按照我的说法,我觉得这是一个非常非常精彩的事情,在任何意义上都当得起创新这个词。所以你可以说它既是保守的,但它又是不保守的。这个保守的意义在于,它始终把安全性放在最重要的层面,所以它不会去随便尝试任何东西。但是你可以认为他是不保守的,因为当他发现了一种好的解决方案的话,其实大家会很积极地去拥抱它 。
Jeffrey Hu 25:14
没错,特别同意这个就是对施诺尔签名的这个升级,因为现在我们知道,刚才提到的很多其他的区块链的项目,其实他可能会至少在本身原生地址的这个层面上,如果要再新加一种签名的这种方式,或者是改变原来的这种椭圆曲线的话,其实还是会阻力很大,就也有可能是因为技术架构原因,也有可能是因为整个文化或者是社区讨论的一个原因,我们会看到其实会非常慢,那可能会采用一些其他的方式,比如说再加到智能合约里面做一种兼容或者怎么样的方式来做。但不是像比特币这种,基本上你可以认为是原生的方式去增加了一种签名的这种方式,这点我其实是挺同意的。
Jeffrey Hu 25:56
那我们再说回到刚才 Luke 的那个客户端的那个事,就是刚才因为这是说分叉这块去额外去聊到的一个话题,那其实分叉这个词我个人不是特别喜欢,我不知道阿剑老师怎么样,我觉得分叉这个词就经常会让人感觉到有些误解,就比如说刚才说到的那个,可能因为一些算力或者 bug 的原因,导致网络的分区,其实可能有时候也会被一些人认为是一种硬分叉或者怎么样,那实际上我自己理解的通常意义上的软分叉或者硬分叉,那可以用另外一种技术名词来进行代替。软分叉其实就是兼容升级,硬分叉其实就是非兼容的升级,就是你加了更多的新的功能,那可能就自己的这个节点,就是要么你认为是原来那些运行老软件的这个节点不能在新的网络里面来出现了,那如果是在比特币网络里面,其实我觉得可以把这个视角倒过来去看,就如果说一个节点如果要做一些硬分叉升级的话,那其实是自己把自己分叉出去了,那么这也是一种相对的这种概念嘛,因为它不是不再遵守整个网络的一个共识的规则了。
Jeffrey Hu 27:01
那么再多说一点,就这次 Luke 做这个可能他自己想修改节点的这么一个事情,但其实他更多的发生还不是在我们讨论的这种软分叉或者硬分叉的这个层面上面,还没有涉及到整个网络区块共识的这个层面上面,就有时候在网络上争得面红耳赤,但实际上更多的讨论的是还是觉得这个节点其实可能会再直接去分叉出去,但实际上他做节点的这个事情还没有到那个层面,就如果我们去直观的理解一下,就是 Luke,其实做的层面是在整个的交易内存池,或者在交易池就 mempool 的这个层面,它只是做了一些节点的一些交易的过滤或者转发策略上的一些修改。
Jeffrey Hu 27:41
那么怎么具体理解呢?这块我可以再稍微展开一点,就是就因为大家可能原来用 Metamask 或者其他钱包可能会更多一点,所以我们可以看到就如果要发一笔交易,基本上只要去点上几下按钮,交易就发出去了。那实际上在比特币上面交易,从你去试图去写一笔,到最后再确认,基本上我自己理解可以分成三步,就第一步是对于你自己需要签名这个交易的一个信息,这是第一步,就已经产生了一个已经签名的一个信息。那第二步是要把这个签名好的信息去放到整个的交易的内存池里面。那第三步才是打包到区块里面,这个就是签完名的这个信息,其实过程也是非常重要的。
Jeffrey Hu 28:21
第一步,比如说闪电网络里面,双方其实是可以互持闪电网络里面的通道,双方可以去互持对方去签名过的一个一部分的交易的信息,那如果对方作恶的话,就可以用这个以对方签名的信息,我再补上我自己签名信息,就可以广播出去惩罚做恶的对方了。所以这是就闪电网络里面去用签名信息的一步,其实也就对应到交易发出的第一步,那么第二步其实才是说我如果要发一笔交易,我才把我签名信息去广播到网络里面,然后我再让其他的这个节点可以去进行处理,那么节点也会收到之后做一些合法性的校验,然后再去转发。
Jeffrey Hu 28:59
那么 Luke 这次做的事情其实主要是在第二步,就是我的整个节点在接收到之后是不是要进行一些这个怎么样的一种过滤,或者是一个处理?因为他认为可能有一些交易可能会像 BRC 20的一些交易,可能会对网络的负担太重,所以那就不希望在这个层面上,在 mempool 库这个层面上再进行转发了。
Jeffrey Hu 29:18
那么到此为止其实都还没有涉及到就是整个网络的共识这个层面,那最终其实如果要整个交易,在有些挖矿的一些节点,在根据整个现在 mempool 里面的信息,包括上一个区块的一些信息,整个去计算出哈希值之后,才会再把整个现在交易打包到区块里面,这才是了整个网络共识这个层面上面。
Jeffrey Hu 29:42
那所以其实可以看到就 Luke 这次的只是一个在 mempool 层面上进行修改,其实跟分叉就没有什么太大的一些关系。对,然后我其实之前还想了一个例子,怎么去更生动形象地去解释这个事情,我想的一个例子是什么?就是我不知道阿剑老师觉得是不是合适。我可以说一下我这个想法,以前可能会多一些,就是有些人会拿着很多的自己的零钱到银行的网点去,我要去存钱,比如说我拿了 100 万的一毛钱的一个钞票,想要到银行网点去存钱,那么这时候银行网点可能就自然而然会有两种想法,就是这个可能没办法,那你既然来了,那我肯定要处理,对吧?你拿的钞票也都是真实的钞票,那我也肯定要处理,这是按照整个央行的规定,我是要去进行处理的,那可能我就需要花一个很长的(时间),我可能要派一个专门的一个人去花很长的时间去处理,一毛钱一毛钱的放到验钞机里面去数,然后处理完成之后再把你的钱存到银行里面。那这是一种,那我这银行网点对用户非常负责。那还有一种银行网点就会被这种恶意搞乱的客户搞烦了,就说啊,这种客户你不要来我的银行网点了,你要去其他银行网点吧,我不接受这种太小额钞票的这个客户了,你要不去其他的银行网点,那么这时候的客户可能就会有一个想法,就说,诶,你这个银行网点怎么不遵循央行的规定啊,怎么是不接受我这个客户的存钱的一个规定了?其实这银行网点可能也会有些冤枉,对吧?就是我并不是说想跟央行对着干,只不过是我的银行网点,我实在没有更多的人力去服务这种小额钞票的一个客户了,所以我可能会我颁布我自己的一些规定,比如说 100 块钱以下的这种钞票我就不处理了,可能我只处理 100 块钱的整票的存取,其他的你要自己去找其他网点,或者你干脆自己去办一个银行网点,自己去处理吧。
Jeffrey Hu 31:37
所以这个其实就类似于,就是就如果我们再带回到这个例子里面,如果认为 Luke 可能是要硬分叉的话,其实可能会有点冤枉它本来的意思,他也并不是像银行网点想要去另起一个央行去处理整个的钞票的查验真伪,或者是怎么样去记账的规则,他只是觉得这个自己的节点可能不应该花更多资源去处理这种像 BRC 20 或者 Inscription 的交易。
阿剑 32:00
Jeffrey 的那个比喻真的非常非常好,非常生动。我稍微补充一点,就是大部分人说他没有经常关注这些技术信息的话,他可能不太能分清说什么是共识规则,什么是节点愿意接受一笔交易进入自己的交易池,并且转发给其他的节点,就自己的这个跟自己有连接的其他节点的这部分规则,上面的一种规则,我们叫做共识规则,另一种规则我们叫做交易池规则,或者说交易池验证规则,它们是不同的。
阿剑 32:34
为什么?因为一个共识规则你可以认为它是一个,在一定程度上来说,你可以认为它是一个更宽松的东西,为什么呢?因为说它只是决定说一个区块,我到底这个区块是否有效,而每个节点自己定义的这个所谓的这个交易池规则只是决定我要不要接受一笔交易,并且转发这笔交易,那它可能会使用比共识规则更加严格的规则。
阿剑 32:56
为什么呢?因为共识规则当它规定一个区块的有效性的时候的话,那么节点可以很自然地就把过滤掉无效交易的这部分工作分相当于你委托一部分工作给矿工。为什么?因为旷工自己必须保证自己的区块是有效的,否则当你的区块,当你的交易被拒绝的话,那么你是完全得不到任何收益的。
阿剑 33:16
所以你可以合理假设他会收集到的都是有效的这个交易,然后因为他已经付出了大量的这个工作量证明,所以我再花一点时间来去验证它的这个区块,是一个对我来说是一个完全能够负担而且没有什么太多坏处的事情。但是如果一笔交易它凭空飞来的,它在网络当中遵循不确定的这个路径传播到我这里的时候,你不知道它是一笔有效的交易还是一笔无效的交易。
阿剑 33:43
如果你收到的每一笔交易你都要完完全全的执行验证的话,其实这个事情本身是非常耗费时间的,要耗费资源的,那么所以节点的这个做法一定是说我优先确认这一笔交易的某一些验证起来很简单的一些特征,然后由这些特征来去决定我到底要不要继续进一步验证这笔交易,还是说当它已经不符合这个特征了,我就干脆我就不验证了,我就干脆等看看是不是看矿工还愿意打包这笔交易,如果他愿意打包了,我再验证他,对吧?是这样的一个过程,大部分我们的这个听众或者是其他的一些朋友没有办法,或者说不太能够想到这一点,是因为大家原来经常使用的那些网络当中是没有这一层的,这是一种基本上专属于 UTXO 或者交易输出,就是用交易输出的这个形式来表达一笔资金以及它的花费条件的时候,才会有需要去考虑这个问题。
阿剑 34:40
为什么呢?给大家举个例子,你在以太坊里面,它的这个所谓的所有的智能合约都是一种账户,包括你自己的拥有的这个用私钥控制的,但也是一个账户,以太坊的这个设计就是说它的所有的核心的目的,就是说所有的这个处理的这个复杂性都要放在合约里面,由合约这个代码本身来自己鉴别。
阿剑 35:00
什么交易能处理,什么交易不能处理?所有的以太榜的这个交易都是由某一个外部账户发起,对吧?某一个外部账户用某一个它的这个流水号被我们称为 Nonce 值,可能会有一些歧义,但是你把它称为流水号就对了,因为每一个账户它都有这个流水号,后面的这个流水号要后处理,那么每一个账户用一个还没有使用的这个流水号发起一笔交易,然后当他被这个区块确认的时候,他在进入确定的这个以太坊的最新的这个状态当中得到处理,然后给你一个结果,对吧?所以在以太坊的这种模式当中,所有的复杂性全部都被放在智能合约账户里面,而它的这个节点是尽量不管你的这个交易携带的这个指令最后的执行的结果是什么。
阿剑 35:42
也就是说你的每一笔交易,它实际上它只是某一个账户发起了一笔交易,然后在交易里面携带一些指令,就是这些指令到底执行起来会产生什么结果,节点完全不管它,只管你是否付了一定数量的这个交易费。所以对于以太坊这样的这个网络来说,它的这个节点的交易池规则是实际上是非常简单的,就相对来说会更简单,因为它只需要验证,首先你这个账户是不是有足够多的钱来付你的这个 gas fee, 对吧?然后你的这个流水号以之前有没有被用过,如果是用过,那就是一笔无效的交易。或者说我应该通过一个比较这个 gas fee 这个高低费率的这个高低来选择一笔在我的这个交易池里面保存下来。
阿剑 36:23
至于他的这个交易的这个里面的这个附带的这些信息,附带的这些指令是什么含义?他不管,他完全不管,那所以他的这个节点的这个交易池的这个规则就特别简单。但是在基于交易的输出,比如像比特币这样 UTXO 这样的这个模式下来说的话,你的交易池的这个验证就必须更加复杂。
阿剑 36:43
为什么?因为你会担心比如说他的花费到底是不是一笔有效的花费,那一笔无效的花费是不能进入区块的,这是比特币的这个特点,那么所以的话,你自然而然就产生了一系列要节约它的这个资源的这些我们称为你可以认为是一种启发式的方法也好,或者说一些提前早于签名验证的一些先行的验证措施、验证规则来去尽可能保护这个节点不被 DOS 攻击。
阿剑 37:11
给大家再举一个很有趣的例子是大家不知道有没有听说过 Nervos Network, Nervos Network 他们的那个交易、资金也是基于交易的输出的,只不过他们的那种形式叫Cell,对吧?它其实结构上跟 UTXO 很相似,那他们在 Nervos Network 里面也会产生一些,就是先于矿工去聚合一些网络当中已经广播出来的一些交易,去给他们先做一些聚合,然后再交由矿工去做一个完整的这个打包,会加入一个中间的这个聚合层,这个聚合层的出现实际上也是因为这个 UTXO 的这个特性,因为 UTXO 这个特性它就意味着很多你的交易本身,它携带的这个指令会更明确,而且也会更复杂。
阿剑 37:55
那所以在此基础之上就要产生一些所谓的这个交易池的这个验证规则,来去帮助这个节点确定自己要不要允许一笔交易进入自己的交易池。因为他进入你的交易池,等于是你要去保存这笔交易,而且你还会转发他,对吧?它是需要消耗资源的事情,所以大概就是这么一回事吧。