一 一份一直在改的白皮书
研究这一段历史,第一件要处理的事情有点出人意料:那份被所有人称作二〇一三年白皮书的文件,并不是一个从发布之日起就固定不变的文本。
Vitalik Buterin 在 2013年末已经向一个小范围的网络传阅过一份 Ethereum 提案。2015年他本人又专门发帖,指向一份标着 2013年12月的白皮书。
而今天 ethereum.org 上所称的原始白皮书,明确标注为 2014年发布。
ethereum.org 项目后来自己对版本史做过考证,结论是这样的:2013年12月确实存在较早的草稿;而目前那份被当作定本的 GitHub 版本,是 2014年2月16日由 Stephan Tual 提交的;此后 Buterin 还继续修改,团队认为 2014年12月10日的版本最接近他最后一次亲自介入的定稿。
也就是说,把现行官网上的每一句话逐字倒推成 2013年底的原文,史料上并不严谨。
这件事本身也是这个域的一个特点。链上的每一个区块从写下的那一刻起就动不了了,而描述这条链的那些文字一直在被人修订。前者是设计出来的不可篡改,后者是正常的文档维护,两样都没有错。
而人们记住的通常是后者。
因为链上那些区块没有人会去逐个读,而白皮书是写给人看的。一个东西被理解成什么样子,取决于哪一份材料被读得最多,而不取决于哪一份材料最不会变。
这个版本问题不是一个学究气的开场白。它直接影响后面三个数字,而那三个数字流传得非常广。
其一,2013年的白皮书原文是不是提出了世界计算机这个说法。
其二,现行白皮书上写的 60,102,216 ETH,是不是创世生成脚本算出来的实际数。
其三,后来常说的团队和基金会预挖约 1,200 万枚,和生成器按销售量乘以 19.8% 得出的数,是不是同一个数。
三个都不是。后面几节逐个处理。
而拆掉它们不是为了纠错。是因为这三个数字各自被记住的那个版本,恰好都比真实的版本更整齐:一个更早,一个更圆,一个更大。整齐的数字传得更远,这件事在这个系列里已经出现过好几次。
第一篇里那个 41 美元是这样,第四篇里那个 12 亿美元也是这样。
而这里要写的构,是这个系列里第一个通用的构。
前四篇里的尺子各量一样东西:第二篇量算力,第三篇量托管余额,第四篇量佣金比例。
这一次要量的东西不一样。
它要量的是执行本身。
前面那些尺子量的都是已经存在的东西:算力在那里,余额在那里,一笔交易的金额在那里。而执行是一件正在发生的事,它有没有尽头,在它开始之前谁也不知道。
给这样一件事定价,是接下来几节真正的内容。
二 缺少状态
白皮书面对的首要问题,并不是比特币不能编程。
是比特币可以编程,而当时那套脚本的表达能力和状态模型,不足以成为一个通用的链上应用平台。
它把限制直接列成了四条:缺少图灵完备性,价值盲,缺少状态,区块链盲。
这四个短语各有所指。
比特币脚本故意缺少一般性的循环机制。它难以直接控制可转移价值的任意细分方式。而未花费输出这个东西本身只能表现已花费或者未花费,不是一个程序可以在一连串调用之间持续修改的内部变量。脚本能取得的链上上下文也受到限制。
白皮书并不是说那套脚本一无所能。它的判断是:要在这些约束下实现取款限额,去中心化交易所,金融合约或者一个持续存在的组织状态,需要大量特制的协议。
在它之前,至少有三条直接相关的路线,而它们各自撞在什么地方,决定了这一次要换什么。
Mastercoin 的方案在 2012年已经以在比特币链上做第二代协议为名,试图利用比特币交易作为载体,在其上解释新的货币,资产和交易规则。矿工确认底层交易,而更高层的语义由理解这套规则的软件重新解释。
它的麻烦是:每增加一种复杂功能,就要继续扩充这个元协议本身。
Colored Coins 的思路是把某些未花费输出着色,让它们代表股票,商品,票据这些链外资产。Buterin 在形成以太坊之前也参与过相关讨论。
它很好地证明了同一条链可以承载货币以外的资产语义,而这种语义依赖能够追踪颜色的客户端,并且继续继承那套输出模型与脚本的表达边界。它提供的是资产标记和追踪协议,不是一个具有任意持久内部状态的共同执行环境。
Nick Szabo 早在 1990年代中期就已经使用智能合约这个词,并给出过定义。他 1994年和 1997年的文章讨论了数字现金,密码学协议,自动履约,抵押和机器可执行的交易关系。
这是直接的思想前史。而 Gavin Wood 后来在黄皮书里回顾这条线索时也明确区别:那些工作提出了智能合约和密码法的思想,并没有给出一个像这样由开放共识网络共同执行任意合约的具体系统。
所以从原始材料看,当时强调的差异不是第一次想到智能合约。
是把先前散落在这几条路线里的用途,统一到一条具有通用代码执行和持续状态的链上。
三条路线撞的其实是同一堵墙。Mastercoin 每加一种功能就要扩一次元协议,Colored Coins 只能在既有的输出模型里做标记,Szabo 那一路有完整的思想而没有一台共同执行它的机器。
它们缺的不是想法,是一个可以放任意规则进去的地方。
而做出这个地方要付的代价,正是下一节的内容。
这里要顺手校正世界计算机这个说法的出处。
可以稳定核验的一手材料里,是 2015年4月 Buterin 才写道,Gavin Wood 已经开始用这个词来描述理想的平台。
从思想内容看,2013年到 2014年的构想已经是一台通用的全球共享状态机。而从确切的词源看,把这四个字直接放进 2013年底白皮书原话的引号里,不稳妥。
技术上的替换,可以压成一句话。
比特币的基本状态单位是一笔尚未花费的交易输出;花钱的方式是引用并完全消费旧的输出,再创造新的输出。这里的基本状态单位是一个地址对应的账户对象;花钱直接改变账户余额,发送方的序号加一。
而最关键的设计变化,不是把输出换成一个类似银行数据库的余额栏。
是使合约本身成为一个有身份,有余额,并且能够跨交易保存内部状态的对象。
有身份这三个字要留意。一个合约有自己的地址,可以收钱,可以被别人调用,可以调用别人,而它背后没有一个人。
第三篇里那句话在这里换了个方向:那条链验的是签名对不对,不验按下签名的是不是这把钥匙的主人。而到这里,有一类账户根本没有钥匙,也没有主人,只有代码。
这正是那四条限制里缺少状态所要解决的地方。
三 买多少跑多少
要看清 gas 是什么,先要看清 EVM 是什么。
它是一台所有验证节点都必须得到相同结果的确定性执行机。合约代码编译成字节码;区块里的一笔交易触发代码之后,所有验证这个区块的节点都必须重演同一次执行,并且从同一个旧状态得到同一个新状态。
所以世界计算机不是一台把大型计算任务分给全球闲置处理器的云计算机。
它首先是一台高度复制的共识状态机。同一项与共识相关的计算,会被许多验证者各自重复执行一遍。
而这立刻带出一个问题。
如果语言是图灵完备的,程序可以写成无限循环。即使没有显式的无限循环,也可以构造出极其昂贵的递归,存储和调用。
而节点没有办法在执行之前一般性地判断这个程序什么时候停下来。
这就是停机问题。它不是一个工程上的困难,是一个已经被证明不可判定的数学结论。没有任何办法能写出一个通用的程序,去判断另一个程序会不会停。
而这里的解决办法,不是取消图灵完备性。
是给每一个执行步骤计价,并且预先限定可以购买的执行量。
这一句要停一下。
一个在逻辑上不可判定的问题,被一个可以结算的机制绕过去了。
你算不出它什么时候停,那就让它买多少跑多少。
构在这里做的事情,前四篇都没有出现过。
它不解决那个问题。它给那个问题定价。
而这一次的分寸和那两次都不同:它没有把问题藏起来,也没有假装问题不存在。它把无解这件事当成了给定条件,然后在这个给定条件上建了一套收费系统。
这个动作在经济系列里出现过它的远亲。第五篇里那本自证的账,靠的是不问几个栏目就能闭合;第十篇里那门学科把答不出的问题划到门外。
而这一次不同:它不回避,也不划界。它承认这个问题无解,然后在无解的前提下,给它装一个计价器。
具体的机制是这样的:不同的操作码,存储操作和数据处理消耗不同数量的 gas;发交易的人给出一个最大的 gas 数量,和自己愿意支付的 gas 价格;执行过程中逐步扣减,如果扣光了,调用失败并且回滚相应的状态变化,而已经为消耗掉的那部分计算付出的费用不退。
于是一个无限循环不再意味着全网节点无限执行。
它意味着这个循环最多执行到这笔交易买到的 gas 用完为止。
三个经常被混在一起的量要分开。
操作码的 gas 成本,是协议对某一种计算或者存储操作规定的相对资源价格。
gas 价格,是发交易的人愿意用多少 ETH 去买一单位 gas。
gas 上限,是允许一笔交易或者一个区块最多消耗多少 gas。
第一个把不同的资源折算成共同的计量单位。第二个形成发交易的人和出块的人之间的费用市场。第三个给一次执行以及一个区块的最坏工作量设一条硬边界。
到这里为止,这套设计非常漂亮。
而余项立刻就出现了,而且出现在最要紧的位置上。
2016年,这条网络遭遇了一轮拒绝服务攻击,基金会随后发布公告并做了协议级的调整,重新给一批操作码定价。
这件事说明的是:gas 解决的是资源必须有价格,执行必须有界这个结构问题;它不意味着每一种操作码的具体价格从一开始就定得正确。
定价可以让一个不可判定的问题变得可操作。
而定价本身对不对,没有办法在链上被验证。
链能验证的是这一笔交易花了多少 gas,以及付了多少钱。它没有办法验证这一步计算是不是真的该值这么多。那是一张由人定的表,而人定错过。
余项因此在这里有了一个很清楚的位置。它不在被执行的那些代码里,那些代码跑得分毫不差;它在那张价目表上。链能验证执行的结果,验证不了那张价目表定得对不对,因为对不对这件事没有一个链上的判据。
图灵完备性带来的那笔交换,可以准确地表述成这样:它得到了循环,任意分支和持续的状态,因此基础协议不必预先知道未来会有什么应用;代价是不能静态保证任意程序会停止,所有验证节点还要重演共识计算,而处理器,存储和带宽必须由一张足够准确的 gas 表来定价。
四 六千二百九十枚
预售这件事,必须把销售的法律条款,宣传的博客,实际的预售算法和创世生成器分成四层看。
因为几个今天最常见的数字,正是在这四层之间发生了偏差。
正式条款规定的销售窗口是 2014年7月22日 22:00 GMT 到 9月2日 21:59:59 GMT,一共 42 天。基金会博客按当地时间写为 9月2日 23:59 结束。
价格曲线是这样的:前 14 天,1 BTC 换 2,000 ETH;第 15 天到第 36 天,每天再降 30,从 1,970,1,940 一路下去;最后 6 天约 1,337,而生成器里用的是整数 1337。
所以宣传材料里说的线性下降,在实际实现上更接近按日的阶梯式下降。
募集额以 BTC 计,通常按链上汇总为约 31,529 BTC。按当时的市值折算,常见的说法是 1,800 万美元上下。
这里 BTC 的数量才是原始的结算口径。美元值取决于用哪一天,哪一种价格,不应该反过来被当成精确的募集额。
而卖出的 ETH 有两个互相冲突的数字。
今天 ethereum.org 的白皮书上仍然写着 60,102,216 ETH。
而把官方的创世生成脚本实际跑在销售数据上,得到的是 60,108,506.26 ETH。
差 6,290 枚上下。
后一个数字是对的,因为它与实际的创世总供应量能够严格相加闭合。
这一句值得停一下。
一条以不可篡改著称的链,它创世那一刻的分配数字,在描述它的那份文件上写着另一个数。
而链是改不了的,文件是可以改的,而且改过。
要说清楚,这不是有人在造假。生成器的输出和创世供应严格闭合,谁都可以自己跑一遍去验;而白皮书上那个数是早期的一个版本留下来的,后来没有跟着改。
它只是说明一件很朴素的事:一个数字被写在哪里,决定了它有多容易被改,也决定了它有多容易被人记住。而这两件事常常是反着的。
正式的销售文件规定了三个概念性的池:购买者所得记为 X;早期贡献者池为 0.099X;基金会的长期储备也是 0.099X。
所以两个非销售池合计不是销售量的两成整,是 19.8%。
把生成器得到的 60,108,506.26 代进去,创世结构是这样的:预售购买者 60,108,506.26 枚,占实际创世供应的 83.472454%;早期贡献者池和基金会池各 5,950,742.11974 枚,各占 8.263773%;两池合计 11,901,484.23948 枚,占 16.527546%;实际创世总供应 72,009,990.49948 枚。
而这里有一个法律分池和链上分池的差别,值得单独看。
条款把早期贡献者和基金会说成两个各 9.9% 的池。
而实际的创世生成脚本,并没有在创世状态里把它们做成两个带有不同规则的锁仓合约。它是把购买总量乘以 198 再除以 1000,一次性计入一个基金会地址。
所以那两个 9.9%,是组织和会计意义上的用途划分,不是创世协议层面上的两个独立时间锁。
这也关系到解锁安排。
购买者在预售时拿到加密的钱包文件,而 ETH 在创世之前不能使用也不能转移;创世之后才成为可支配的主网余额。
至于那两个池,条款用的是创世时分配这个结构,没有规定一个链上的 vesting 合约。后来有二手研究说早期贡献者据称被要求至少持有一年,而同一份研究也承认,贡献者的具体发放安排和许多个人地址无法由链上确定。
就目前能核到的公开销售条款和创世代码而言,不能从一手材料证明存在一个链上的一年锁仓。
如果另有个人贡献者协议,它不是这套公开预售文件的一部分。
参与人数也需要同样的口径纪律。创世数据里能看到的是预售产生的账户,后来解析大约得到 8,890 个,其他数据方取整为约 8,800。
而这不能转化为 8,890 个自然人。一个人可以生成多个账户,一个账户也可能代表多个人。销售本身没有公开的身份名册。
现在把两头追一遍。
项目方这一头拿到的是:约 31,529 BTC 的营运资金,以及占创世供应 16.53% 的两个池。
买家那一头承担的是:项目做不成的风险,拿到的东西在创世之前完全不能动,以及一条按天下降的价格曲线所带来的时间选择。
而这个安排在文件里写得清清楚楚,谁都可以读。
第二篇里那三条在这里的状态是:可算,价格曲线和分配比例都公开;可选,42 天里买不买,什么时候买都由自己决定;可退出,不参加就是了。
而有一样和前几篇不同。
第二篇里买矿机的人,买的至少是一台会被造出来的机器。这里买的,是一条还没有第一个区块的链上的计算权。
买的时候,那台机器还只是一份文档和一批代码;而买下的那样东西,要等到创世那一刻才第一次存在。
关于那两个池,白皮书本身给过一个论证,而它值得原样摆出来。
那个论证不是团队应该无条件拿一笔币。它做的是一个反事实比较:如果没有 ETH 的储备,组织可以通过多卖一些 ETH,持有更多 BTC 得到经济上相近的融资;区别在于,持有 ETH 的组织会与这条网络的价值具有直接的利益关联。
批评那一侧的材料也要摆。有数据方汇总称,大约 100 个预售账户取得了众筹 ETH 的约 40%。
而这仍然是账户集中度,不是能够证明的 100 个自然人持有 40%。一个购买者可以拆分地址,多个地址也可能归一个主体。
两段都摆在这里。不加评论。
五 一场董事会斗殴
今天通常列出的八位联合创始人是 Vitalik Buterin,Mihai Alisie,Anthony Di Iorio,Amir Chetrit,Charles Hoskinson,Gavin Wood,Jeffrey Wilcke 和 Joseph Lubin。
Di Iorio 后来的回忆把形成过程进一步区分:Buterin,Di Iorio,Hoskinson,Alisie,Chetrit 是 2013年末最初的五个人;Wood,Wilcke,Lubin 在 2014年初加入。
而联合创始人这个身份本身,有一部分是项目形成之后才固定下来的称谓,不是第一天就有一张签字生效的名单。
最关键的组织冲突发生在 2014年6月的瑞士聚会。
多个当事人后来回忆的核心分歧是一致的:一条路线希望建立有股权,有融资能力,有更明确公司治理的营利企业;另一条路线希望核心协议由非营利组织支持,代码开源,并且避免创始人以公司股东的身份拥有协议。
Buterin 最终选择了后一条。
他在 2022年回看这段争执的时候,把自己看到的分野说得相当直接:最大的分歧肯定是,这些人里有很多人在意赚钱。
Hoskinson 的回忆则强调治理和融资模式。他主张更正规的公司结构,风险资本和明确的决策机制。谈到那次冲突,他后来用过一句话:那是一场董事会斗殴。
这两句都要标一个证据状态:它们是多年之后的回忆,不是 2014年那次会议的逐字记录。
Hoskinson 在 2014年6月离开核心项目。
Chetrit 也在这个阶段离开。而这里的材料比前者薄弱得多。后来的叙事把两人都列为当时被要求退出的联合创始人,而另一些回忆材料又特别强调 Chetrit 当时的参与度已经下降。所以不能仅凭后来的叙事,把两个人的离开动机完全视为相同。
公开可核的材料里,也没有找到 Chetrit 本人留下的,与 Hoskinson 类似的详细同期说明。
Di Iorio 没有在同一意义上被要求退出,他后来把主要注意力转回加拿大和自己的项目。Lubin 在 2014年建立 ConsenSys,转而从生态公司的层面建设这条链。
而 Gavin Wood 继续担任基金会的技术负责人,参与写成黄皮书和客户端实现。他本人后来描述自己是在担任这个职务大约两年之后离开基金会的,随后建立了当时名为 Ethcore 的公司。
所以 Wood 的离开属于 2016年前后的另一个阶段,不是 2014年那次公司与基金会的分裂。
而 2014年7月形成的实际法律结构,比一句最后决定成立非营利基金会要复杂。
预售的合同卖方是 Ethereum Switzerland GmbH,一家依据瑞士法,位于 Zug 的实体。它不是把所有销售的法律行为直接放进基金会。
与此同时,创世分配又给基金会留出了 9.9% 的长期基金。
所以当时实际上是一个双实体的安排:一家瑞士商业实体处理销售等操作,一家瑞士非营利基金会作为协议的长期支持组织。
那次分歧最后落成的,不是一个纯粹的非营利结构,是一个把营利性操作和非营利支持分开放的结构。争论的结果通常都是这个样子:不是一方赢了,是两边各拿到一部分,写进了不同的文件里。
法律包装本身也做得非常刻意。
2014年的预售文件在文字上把 ETH 定义成运行这个平台所需的计算燃料和软件产品,而不是公司股票,利润分成或者治理权。条款描述 ETH 用于支付每一个计算步骤和存储,并列举购买的理由为开发或者运行应用,支付应用服务,使用平台上的其他代币,以及支持这个平台。
条款同时明确,持有 ETH 本身不附带对以太坊组织的所有权或者治理权,也不可以要求退款。
其中一句关键的措辞是:这不是一次投资邀约。
同期的基金会博客说得更直白:以太是一件产品,不是证券,也不是投资邀约。博客还说它不赋予投票权,也不保证未来的价值。
而项目方自己在合同里的声明,不是监管机构作出的证券法裁定。
这句话在这个系列后面会一直有用。一份文件怎么描述自己,和它在法律上是什么,是两件由不同的人来决定的事。而在这个域里,前者常常被当成后者引用,因为前者写得漂亮,而且随时可以查到。
六 撇开最初的筹资
后来的美国监管轨迹,也不宜简化成一句 SEC 已经认定 ETH 不是证券。
可核的时间线是这样的。
2014年7月,项目方自称燃料和软件产品,出售主体是瑞士实体。这是私人的法律定位。
2018年6月14日,SEC 公司融资部主任 William Hinman 发表演讲,基于当时网络的去中心化状态表示,当前对以太的要约和销售不是证券交易。
而这段话有两个限定语,而它们通常被略掉。
第一,他在说这句话之前,主动把伴随以太创建的那次筹资撇开在判断之外。
第二,SEC 的页面明确注明,那次演讲表达的是作者本人的观点,不是委员会的正式规则。
所以不能用这段话倒推 2014年的众筹已经被追认没有证券法问题。
Gensler 任内,SEC 没有发布一个等价于以太永久是证券或者永久不是证券的委员会规则;围绕权益证明,质押和投资合同适用范围的争论重新出现。
2024年5月23日,委员会批准了交易所上市现货以太产品的规则变更。核心的分析是现货市场与受 CFTC 监管的期货市场高度相关,市场监察安排足以满足要求。
而那份批准没有用一条总括性的规则,宣布所有 ETH 交易永远不属于证券交易。
后续的交易所文件把这类产品放进了商品型信托份额的框架。
2024年7月10日,CFTC 主席在国会作证时明确说,联邦地区法院的判决再次确认比特币和以太都是商品交易法下的商品。到 2026年,CFTC 高层仍然沿用这一口径。
把这些排在一起,能看出的不是一个整齐的三段式,不是正式宣布不是证券,后来正式推翻,再正式恢复。
是不同层级,不同机构,不同法律性质的表态并行存在。
一位部门主任的个人分析,一次委员会对某一类产品的批准,一位主席在国会援引的法院判决,以及一段时期里重新出现的管辖争议。
这四样东西的效力完全不同,而它们并没有互相取消。
这也是为什么这一段常常被讲错。人们习惯把监管想成一个会给出唯一答案的机构,而实际上问这个问题的有好几个机构,各自按各自的法律问,而且没有一个人负责让这些答案彼此一致。
于是就出现了一种很奇怪的状态:一样东西已经被卖了十年,被几千万人持有,而它到底属于哪一类,还在被不同的机构分别回答。
一样东西是什么,取决于哪一个机构在问,以及为了什么目的问。
这一条在经济系列里已经出现过它的另一种形态。那里是同一样东西在不同的账本上有不同的身份,自己做饭不算,雇厨师算。这里是同一样东西在不同的法域里有不同的性质:在一部法律下它可能是证券,在另一部法律下它是商品,而这两个判断可以同时有效,因为它们回答的不是同一个问题。
而对持有它的人来说,这两个答案的后果完全不同。
因为决定他能不能交易,要交多少税,出了事去找谁的,不是这样东西的本性,是当时管着这件事的那一个机构。
七 五千 gas
2015年7月30日启动的 Frontier,不应该按后来成熟主网的标准倒着读。
以太坊自己的路线图把它定位成第一阶段,一个面向矿工和开发者的,最低可用的实时网络,而不是普通人已经可以安全无障碍使用的最终产品。
有一个细节最能说明它当时是什么状态。
启动时的区块 gas 上限被故意硬编码得极低:每个区块 5,000。
而一笔普通的 ETH 转账本身就需要约 21,000。
所以最开始那几天,普通交易根本装不进区块。
8月4日的解冻开始把目标向 3,141,592 提升。协议允许矿工在每一个新区块里,相对于父区块的上限做不超过约千分之一的调整。基金会当时估算,从 5,000 上升到可以容纳普通交易的水平至少约六个小时,上升到约三百万则超过一天。
一条链上线的头几个小时,是故意不让人用的。
这个安排值得记住,因为它和这个域后来的许多次上线正好相反。一样东西被造出来之后,通常要抢着让人用;而这一次是先让它自己跑几个小时,确认它跑得动,再把门打开。
而这个谨慎有它的来路。上一篇写的那家交易所,是在没有人盘点的情况下开了三年;上上一篇写的那批矿机,是在没有交货的情况下先收了两万个人的钱。这个域到 2015年为止,已经有足够多的事故可以拿来做参考了。
而这个冻结与解冻的安排,正是安全启动程序的一部分。
上线之前,某些更激进的保护方案曾经被考虑过:将来重置这条链,只给正常区块奖励的一小部分,使用中心化的检查点。这些在真正启动前被取消了,所以 Frontier 从一开始就是一条要延续下去的真实价值链,而不是一个预定会被抛弃的测试网。
而同一篇公告仍然强调,软件开发远远没有结束。
还有一个更直白的证据。
基金会后来在发布 Homestead 的时候回忆,直到进入 Homestead,他们才认为可以把官网上那个被划掉的 safe 恢复成正常的表述。
官网上那个词,曾经是被划掉的。
后来的阶段是这样走的:Frontier 在 2015年7月30日;Frontier Thawing 在 8月4日;Homestead 在 2016年3月14日附近,区块高度 1,150,000;Byzantium 在 2017年10月16日,区块 4,370,000,区块奖励由 5 ETH 降到 3 ETH;Constantinople 与 St. Petersburg 在 2019年2月28日附近同块升级,区块 7,280,000。
最初的路线图还把 Serenity 写成下一个大阶段,而它没有像前面几个那样以一个单独的,一次性的早期硬分叉兑现。把今天知道的那些机制倒写成 2015年已经排定日期的第四次升级,同样不准确。
工具链的成熟过程也可以核。
2014年7月的团队问答里,他们告诉开发者当时的后端高层语言包括 Serpent,Mutan 和 LLL,前端通过 JavaScript 绑定与链交互;他们还明确说,教程和入门教学资源要等代码库进一步稳定之后再完善。
这是很直接的证据:在预售的时候,开发环境仍然处在快速变动期。
2015年5月的 Olympic 是 Frontier 之前最后一个公开的测试网络,基金会设置了总计 25,000 ETH 的奖励,鼓励人做交易,虚拟机,挖矿和网络的压力测试。
到 Frontier 的时候,至少 Go 与 C++ 两种实现已经成为实际承担共识的客户端。
而 2015年10月,基金会又发布安全公告,称这两种客户端对某一个操作码的实现差异可能造成共识问题。
这一组材料同时说明了两件事:多客户端实现已经存在,而跨实现的一致性仍然需要不断地修。
至于开发者数量,早期并没有今天那种定义明确的统计。一个可以引用的下限型材料来自 2014年7月的团队问答,Di Iorio 说自项目开始以来已经有数十人在做。
这只能说明核心及外围贡献者是数十人的量级,不是整个生态的独立开发者人数。
这一条和第二篇里那五把尺子是同一类问题。想知道一个开放项目有多少人在做,得先说清楚在做是什么意思:提交过代码算不算,只提过一个问题算不算,给客户端写过文档算不算。定义不定下来,数字就没有意义;而定义一旦定下来,它量到的又只是它定义得出来的那一部分。
这句话在这个系列里已经出现过三次,而它每一次的形状都不一样:第二篇是去中心化程度,第三篇是谁去读那本账,第四篇是一个市场有多大。这一次是一个开源项目有多少人。
八 两种世界计算机
Frontier 之后的实际使用情况,有两种口径要分开。
交易数告诉我们这个网络被多频繁地使用。合约数量告诉我们部署了多少代码地址。
而两者都不等于有多少独立的,真实的,有人在用的应用。
后来的全链研究估算,2016年1月的日均交易量大约是一万笔。
在合约方面,Luu 等人 2016年的研究抓取主网前 1,460,000 个区块,得到 19,366 个既存合约;论文还指出,单单此前约六个月就部署了大约 15,000 个。
这至少说明,上线之后一年之内,把自己写的代码实际部署在公共链上已经不是少数几个演示案例。
而 19,366 不能被解释成 19,366 个不同的应用。
后来的全链拓扑研究发现,这些合约有很高的活动度,却有明显偏低的代码多样性,许多合约是其他合约的直接或者近似复制。
换句话说,创建出来的地址数量,会显著高于独立代码库,独立产品或者独立开发团队的数量。
这和第四篇里那个在架数量不是销售量,是同一类口径陷阱。
对于这些合约实际上在做什么,早期的经验研究给出了更有用的横截面。
Bartoletti 与 Pompianu 对早期合约做过分类,得到的主要类型包括金融,公证,游戏,钱包和函数库;后续对这项研究的总结指出,在他们的 834 个合约样本中,超过三分之二的用途与管理,汇集或者分配资金有关。
这与白皮书宣称的代币系统,金融合约和自治组织有明显重合。而它不能代表全链所有合约,因为这项研究依赖可以取得源码,可以分类的样本。
同一时期也出现了白皮书没有拿来当主要宣传对象,却非常适合无许可可编程资金的用途。2017年对早期链的一项研究,通过源码与字节码的相似度识别出 189 个庞氏骗局合约。
它们在数量上不能代表整个网络。而它们说明的是:无需中心许可即可部署资金逻辑,既能承载预期中的金融应用,也会承载投机和欺诈型的程序。
这一条要按规矩说清楚。余项不带价值。一样东西被这套体系接住,不说明它好;一样东西从这套体系里溢出去,也不说明它坏。
无许可这三个字对两边是同一个意思:它不问你要做什么。
另一端则是最贴近那个愿景的实例。The DAO 在 2016年把自治组织,众筹和链上资产控制实际组合成了一个大规模应用,随后它的合约漏洞成为这条链最早的重大安全与治理事件之一。基金会在 2016年6月连续发布了关于合约安全,漏洞和分叉讨论的公告。
也就是说,合约不可变,代码就是规则这个工程假设,在那个时候已经和真实的资金风险发生了正面碰撞。
现在可以回到世界计算机那两种读法上了。
按是否出现了公开的,无许可的,具有持久状态的任意程序来衡量,2016年就已经有近两万个合约地址,金融,钱包,游戏,公证和自治组织都可以观察到。
按世界上一般的计算都适合直接在链上执行来衡量,则从设计的第一天起就存在一个相反的事实:所有验证者需要重复执行与共识相关的计算;而团队自己在 2014年就承认可扩展性尚未解决,并且计划把应用的前端和大部分数据分发移出主链。
两种评价用的是两种定义。
而这不是文字游戏。它决定了你把这条链当成什么:一台可以放任何程序的计算机,还是一本可以放任何规则的账。
两种说法在技术上都站得住,而它们对这条链的期待完全不同。按前一种,拥挤和昂贵是失败;按后一种,拥挤和昂贵只是需求超过了容量,而账本从来不承诺容量无限。
后面几篇里的许多争论,追到底都是这两种期待在打架。
前四篇里,构量的都是外面的东西。算力,托管余额,佣金,星级。
这一次它量的是执行本身。一步计算多少钱,一次存储多少钱。
而它之所以要给执行定价,是因为它没有办法判断一段执行什么时候会停。
一个算不出答案的问题,被换成了一个可以收费的问题。
这个办法有一个前提,而这个前提值得说出来:它假定所有真正要紧的资源消耗,都可以被折算成同一个单位。处理器时间,存储空间,带宽,状态膨胀,全部换算成 gas。
折算做得准,这套东西就转得动。折算做得不准,那些被低估的操作就会变成攻击的入口。2016年那一次,就是这样发生的。
这是构在这里最核心的动作,而它非常成功。这条链跑了十年,从来没有因为一个无限循环停下来过。
余项就在同一个地方。
每一步该收多少钱,这件事本身没有办法在链上被验证。它是一张由人定的表,而这张表定错过,后来改过,以后还会改。
链能保证一件事:同一段代码,在几千个互不相识的节点上跑出一模一样的结果。这件事十年来没有出过错。
它保证不了另外两件。
一是这段代码每一步该收多少钱。
二是这段代码跑出来的那个结果,是不是写它的人想要的。
第二件在下一篇里会被问一次,而且是以当时最贵的一种方式。
链还在结算,而结算什么还没有共识。
本文依据公开协议文档、链上记录、法院文书、监管文件与同行评议研究写成;文中的数字均保留其统计口径。系列资料截至 2026 年 8 月。