一 一份一直在改的白皮書
研究這一段歷史,第一件要處理的事情有點出人意料:那份被所有人稱作二〇一三年白皮書的文件,並不是一個從發佈之日起就固定不變的文本。
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 月。