作者:shew
作為公共產(chǎn)品捐贈(zèng)基金, GCC 致力于推進(jìn)以太坊基礎(chǔ)設(shè)施研究。在以太坊基礎(chǔ)設(shè)施中,最常被使用和最具有公共性的就是以太坊的測(cè)試網(wǎng)。測(cè)試網(wǎng)是一個(gè)類(lèi)似以太坊主網(wǎng)的測(cè)試環(huán)境,提供了至關(guān)重要的與以太坊主網(wǎng)一致的基礎(chǔ)設(shè)施,由于測(cè)試網(wǎng)內(nèi)進(jìn)行交易幾乎不需要任何費(fèi)用,所以測(cè)試網(wǎng)惠及所有開(kāi)發(fā)者、研究人員和用戶(hù)。
本報(bào)告主要介紹測(cè)試網(wǎng)的歷史和現(xiàn)狀,這項(xiàng)研究有助于更廣泛地理解測(cè)試網(wǎng)的公共屬性,強(qiáng)調(diào)協(xié)作測(cè)試基礎(chǔ)設(shè)施如何在支持創(chuàng)新的同時(shí),保持整個(gè)社區(qū)的可訪(fǎng)問(wèn)性。通過(guò)記錄這些網(wǎng)絡(luò)的演進(jìn)和功能,我們旨在為未來(lái)的測(cè)試網(wǎng)計(jì)劃提供參考,并展示社區(qū)支持的基礎(chǔ)設(shè)施的價(jià)值。
公開(kāi)測(cè)試網(wǎng) (Public TestNet) 是開(kāi)發(fā)者和用戶(hù)最常被使用的測(cè)試網(wǎng),這些測(cè)試網(wǎng)內(nèi)可以用來(lái)部署智能合約,用戶(hù)也可以在水龍頭內(nèi)獲得 ETH 來(lái)與測(cè)試網(wǎng)內(nèi)的合約進(jìn)行交互。公開(kāi)測(cè)試網(wǎng)的部署時(shí)間軸如下:
在上圖內(nèi)缺失了最新的一些以太坊測(cè)試網(wǎng)計(jì)劃,最新測(cè)試網(wǎng)計(jì)劃如下:
這些測(cè)試網(wǎng)的命名是極其有趣的,都是以地鐵站或或火車(chē)站的名稱(chēng)作為測(cè)試網(wǎng)的名稱(chēng)。Ropsten 和 Rinkeby 都是瑞典斯德哥爾摩的地鐵站,Goerli 是柏林的火車(chē)站,Sepolia 是希臘雅典的地鐵站。而最新的 Hoodi 測(cè)試網(wǎng)是印度班加羅爾的火車(chē)站。
除了上述公開(kāi)的測(cè)試網(wǎng)外,以太坊內(nèi)部也存在一系列的用于專(zhuān)題測(cè)試的測(cè)試網(wǎng),比如 YOLO 測(cè)試網(wǎng)用于測(cè)試 BLS 簽名等 Berlin 硬分叉升級(jí)所需要的特性。我們一般稱(chēng)這些測(cè)試網(wǎng)為 DevNet。當(dāng)然有時(shí)也被稱(chēng)為 Client Integration Testnets。這些測(cè)試網(wǎng)往往并不對(duì)外開(kāi)放,通常只有客戶(hù)端開(kāi)發(fā)者和審計(jì)人員在測(cè)試網(wǎng)內(nèi)部進(jìn)行相關(guān)測(cè)試,這些測(cè)試旨在驗(yàn)證不同客戶(hù)端實(shí)現(xiàn)是否都可以正常執(zhí)行功能,并且驗(yàn)證不同客戶(hù)端之間的互操作性。
在 All Core Devs Meeting 109 中,核心開(kāi)發(fā)者討論使用地質(zhì)斷層線(xiàn)作為硬分叉測(cè)試網(wǎng)的命名規(guī)范。在確定此原則后,核心開(kāi)發(fā)者推出了 Aleut ( 代表阿留申海溝 )、Baikal( 代表貝加爾湖 ) 測(cè)試網(wǎng)用于測(cè)試 London 升級(jí)。但是后續(xù)的測(cè)試網(wǎng)命名并沒(méi)有遵循該規(guī)則,比如在 Baikal 測(cè)試網(wǎng)后另一個(gè)用于測(cè)試 London 升級(jí)的測(cè)試網(wǎng)被命名為 Calaveras 測(cè)試網(wǎng)。但是,核心開(kāi)發(fā)者并沒(méi)有一直遵循該命名規(guī)則,比如最新的 Fusaka 硬分叉升級(jí)選擇了使用 devnet-1 / devnet-2 這種簡(jiǎn)單且明確的命名。
先鋒時(shí)代:Olympic 和 Morden
Olympic 測(cè)試網(wǎng)于 2015 年初問(wèn)世,是以太坊的第一個(gè)公開(kāi)測(cè)試平臺(tái),這個(gè)開(kāi)創(chuàng)性的網(wǎng)絡(luò)甚至在以太坊主網(wǎng)正式上線(xiàn)之前就已上線(xiàn),作為該協(xié)議功能的最終驗(yàn)證。該鏈的 Chain id 是 0,可見(jiàn)其元老身份。
以太坊開(kāi)發(fā)團(tuán)隊(duì)建立了一個(gè)賞金系統(tǒng),任何成功對(duì)網(wǎng)絡(luò)進(jìn)行壓力測(cè)試并創(chuàng)建大量分叉的人都將獲得 25,000 ETH 的 獎(jiǎng)勵(lì),旨在通過(guò)高交易量和極端使用模式測(cè)試以太坊的極限。下圖展示了 Olympic 測(cè)試網(wǎng)活動(dòng)結(jié)束后,EF 對(duì)測(cè)試網(wǎng)參與者的空投情況。
Olympic 測(cè)試網(wǎng)對(duì)早期以太坊開(kāi)發(fā)發(fā)揮了重要作用,以至于以太坊主網(wǎng)的創(chuàng)世區(qū)塊使用了來(lái)自 Olympic 測(cè)試網(wǎng)的 1028201 區(qū)塊作為 模版。但該測(cè)試網(wǎng)也存在許多問(wèn)題,包括狀態(tài)集過(guò)大和潛在的私鑰漏洞,導(dǎo)致它在 2015 年 7 月以太坊主網(wǎng)成功上線(xiàn)后被棄用。測(cè)試網(wǎng)狀態(tài)集過(guò)大問(wèn)題是因?yàn)?Olympic 測(cè)試網(wǎng)本質(zhì)上激勵(lì)了垃圾交易的發(fā)起,用戶(hù)為了獲取獎(jiǎng)勵(lì)發(fā)送了大量的垃圾交易,這導(dǎo)致 Olympic 測(cè)試網(wǎng)規(guī)模巨大。而潛在的私鑰漏洞問(wèn)題主要是因?yàn)?Olympic 測(cè)試網(wǎng)早期代碼存在漏洞,可能導(dǎo)致 重放攻擊。
Morden 測(cè)試網(wǎng)在 Olympic 退役后迅速上線(xiàn),并于 2015 年 7 月與以太坊主網(wǎng)同時(shí)上線(xiàn)。由于以太坊主網(wǎng)的 Chain id 為 1,所以 Morden 測(cè)試網(wǎng)選擇了 2 作為 chain id。Morden 在上線(xiàn)后一年多的時(shí)間里作為唯一的測(cè)試環(huán)境,并確立了其作為早期以太坊應(yīng)用程序主要開(kāi)發(fā)平臺(tái)的地位。然而,該網(wǎng)絡(luò)產(chǎn)生了嚴(yán)重的 共識(shí)問(wèn)題。在最初創(chuàng)建 Morden 時(shí)為了避免潛在的重放攻擊,Morden 內(nèi)的所有交易的 nonce 值都是 2^20 開(kāi)始。而 eip-161 修改了部分關(guān)于 nonce 的規(guī)則,這導(dǎo)致 Morden 原有的 nonce 規(guī)則與 EIP-161 內(nèi)規(guī)定的 nonce 規(guī)則產(chǎn)生沖突,最終導(dǎo)致 Geth 和 Parity 在區(qū)塊 1885074 處創(chuàng)建不兼容的區(qū)塊。這直接導(dǎo)致了 Morden 測(cè)試網(wǎng)被棄用。
值得一提的是,ETC 社區(qū)接納了這個(gè)廢棄的網(wǎng)絡(luò),將其更名為「Morden Classic」,并繼續(xù)在其生態(tài)系統(tǒng)中運(yùn)行。但在 2019 年,ETC 社區(qū)使用 Mordor 測(cè)試網(wǎng)替換了 Morden Classic 測(cè)試網(wǎng)作為其最新的測(cè)試網(wǎng)絡(luò)。
Ropsten 于 2016 年 11 月問(wèn)世,是以太坊測(cè)試網(wǎng)的第三次迭代,以斯德哥爾摩地鐵站命名,Chain ID 為 3。這個(gè)工作量證明網(wǎng)絡(luò)的設(shè)計(jì)比其前代產(chǎn)品更加穩(wěn)健,并成功支持所有主要的以太坊客戶(hù)端,使其成為以太坊測(cè)試基礎(chǔ)設(shè)施的支柱。
Ropsten 最有趣的時(shí)刻發(fā)生在 2017 年 2 月,當(dāng)時(shí)它遭受了毀滅性的 拒絕服務(wù)攻擊。惡意攻擊者利用網(wǎng)絡(luò)的 PoW 機(jī)制,將區(qū)塊 gas 上限從合理的 470 萬(wàn)逐漸提升至天文數(shù)字 90 億。這次攻擊產(chǎn)生了大量的垃圾區(qū)塊,消耗了大量磁盤(pán)空間,并使客戶(hù)端同步幾乎無(wú)法進(jìn)行,并導(dǎo)致 etherscan 無(wú)法正常顯示數(shù)據(jù)。
但以太坊社區(qū)并可有直接放棄 Ropsten 測(cè)試網(wǎng)。在社區(qū)捐贈(zèng)的 GPU 算力支持下,Ropsten 團(tuán)隊(duì)于 2017 年 3 月成功 恢復(fù) 了網(wǎng)絡(luò),清除了累積的垃圾區(qū)塊,恢復(fù)了正常運(yùn)行?;謴?fù)流程是簡(jiǎn)單的,以太坊開(kāi)發(fā)者利用社區(qū)捐贈(zèng)的 GPU 算力在攻擊發(fā)生前的區(qū)塊進(jìn)行區(qū)塊挖掘,挖掘獲得了一條更重的鏈替代了原有被攻擊的鏈。我們可以簡(jiǎn)單認(rèn)為以太坊開(kāi)發(fā)者利用算力進(jìn)行了 51% 攻擊成功篡改了鏈的歷史以實(shí)現(xiàn)清理垃圾交易的目的。
這一事件成為網(wǎng)絡(luò)發(fā)展的分水嶺,促使人們開(kāi)發(fā)了替代共識(shí)機(jī)制和更強(qiáng)大的測(cè)試環(huán)境。Ropsten 于 2022 年 6 月 8 日成為首個(gè)成功完成 Merge 的主要測(cè)試網(wǎng),標(biāo)志著以太坊測(cè)試網(wǎng)從工作量證明 (PoW) 向權(quán)益證明 (PoS) 的成功演進(jìn)。
在 Ropsten 的 Merge 也是存在一些問(wèn)題的,簡(jiǎn)單來(lái)說(shuō),Ropsten 預(yù)計(jì)在區(qū)塊難度值達(dá)到 43531756765713534 時(shí)啟動(dòng) Merge 流程,該數(shù)值被稱(chēng)為 TTD(Terminal Total Difficulty)。但 Ropsten 的 TTD 因?yàn)閻阂夤舯惶崆斑_(dá)到,此時(shí) PoS 中用于共識(shí)的 Beacon 鏈還沒(méi)有啟動(dòng)。為了避免問(wèn)題進(jìn)一步發(fā)生,核心開(kāi)發(fā)者要求 Ropsten 的節(jié)點(diǎn)手動(dòng)將 TTD 設(shè)置為 100000000000000000000000,然后等待核心開(kāi)發(fā)者進(jìn)一步修改。該事件的流程可以閱讀 Ropsten TTD Postmortem 和 Ropsten testnet Merge。最終的結(jié)果是以太坊核心開(kāi)發(fā)者解決了 TTD 問(wèn)題,Ropsten 最終還是完成了 Merge 流程。
2017 年 2 月的 Ropsten 攻擊推動(dòng)了權(quán)威證明 (PoA) 測(cè)試網(wǎng)的開(kāi)發(fā),并以 2017 年 3 月的 Kovan 測(cè)試網(wǎng) 為開(kāi)端。Kovan 由 Parity 團(tuán)隊(duì)創(chuàng)建,代表了測(cè)試網(wǎng)理念的根本性轉(zhuǎn)變,它犧牲了純粹的去中心化,以換取安全性和穩(wěn)定性。該網(wǎng)絡(luò)以新加坡的一個(gè)地鐵站命名,采用 42 作為 chain id,并保持了 4 秒的出塊時(shí)間。
具體來(lái)說(shuō),Kovan 使用了 Aura 算法,該算法非常簡(jiǎn)單,算法定義了多個(gè)可以出塊的可信出塊者,并根據(jù)時(shí)間進(jìn)行輪換,每一個(gè)時(shí)間段內(nèi)只有一個(gè)出塊者進(jìn)行出塊。顯然,PoA 算法下,攻擊者無(wú)法任意發(fā)起 DDoS 攻擊,PoA 出塊者在極端情況下可能會(huì)直接拒絕來(lái)自攻擊者的任何交易。
盡管 Kovan 進(jìn)行了創(chuàng)新,但它在客戶(hù)端支持方面仍存在局限性,僅與 Parity,而無(wú)法與更廣泛的以太坊客戶(hù)端生態(tài)系統(tǒng)兼容。這一限制意味著使用 Geth 等其他客戶(hù)端的開(kāi)發(fā)者無(wú)法充分利用 Kovan 進(jìn)行測(cè)試,從而導(dǎo)致測(cè)試環(huán)境的碎片化。
Rinkeby 于 2017 年 4 月推出,旨在響應(yīng)以太坊團(tuán)隊(duì)對(duì)更通用的 PoA 解決方案的需求。Rinkeby 以斯德哥爾摩的另一個(gè)地鐵站命名,實(shí)現(xiàn)了 Clique 權(quán)威證明 (PoA) 共識(shí)引擎,該引擎旨在最大限度地減少對(duì)現(xiàn)有客戶(hù)端代碼庫(kù)的干擾。Rinkeby 的 chain id 為 4,出塊時(shí)間為 15 秒,提供了一個(gè)穩(wěn)定的測(cè)試環(huán)境,使其能夠更輕松地跨不同的以太坊客戶(hù)端實(shí)施。
由于 Clique 共識(shí)是一個(gè)通用方案,所以以太坊開(kāi)發(fā)者專(zhuān)門(mén)在 EIP-225 內(nèi)對(duì)共識(shí)算法內(nèi)容進(jìn)行了描述。該共識(shí)算法重新利用現(xiàn)有的區(qū)塊頭字段,引入了創(chuàng)新的治理機(jī)制。extra-data 字段被擴(kuò)展以容納 secp256k1 簽名,而 miner 和 nonce 字段則被轉(zhuǎn)換為用于管理授權(quán)出塊者列表的投票協(xié)議。這個(gè)優(yōu)雅的解決方案允許通過(guò)全民投票實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證者管理,同時(shí)保持與現(xiàn)有技術(shù)的兼容性。
Rinkeby 實(shí)現(xiàn)了卓越的穩(wěn)定性,在運(yùn)營(yíng)期間處理了約 1.64 億筆交易,涵蓋 1100 萬(wàn)個(gè)區(qū)塊。Rinkeby 鏈的最終結(jié)局是 Rinkeby 維護(hù)團(tuán)隊(duì)決定不再通過(guò) Merge 進(jìn)行 Rinkeby 的遷移,具體原因可以參考 該推文。簡(jiǎn)單來(lái)說(shuō),Rinkeby 主要由 Geth 的開(kāi)發(fā)者維護(hù),該網(wǎng)絡(luò)運(yùn)行時(shí)間過(guò)長(zhǎng)積累了大量數(shù)據(jù),這導(dǎo)致 Merge 很難進(jìn)行。
Goerli 的起源于 2018 年 9 月的 ETHBerlin 黑客松。當(dāng)時(shí),ChainSafe 團(tuán)隊(duì)啟動(dòng)了一個(gè)有趣的項(xiàng)目,旨在用 Go 語(yǔ)言實(shí)現(xiàn) Parity 的 Aura 權(quán)威證明 (PoA) 共識(shí)機(jī)制,以實(shí)現(xiàn)與 Geth 的兼容性。當(dāng) Afri Schoedon 與 ChainSafe 合作創(chuàng)建他們?cè)O(shè)想的 「下一代」公共 PoA 測(cè)試網(wǎng) 時(shí),這個(gè)項(xiàng)目逐漸發(fā)展成為一項(xiàng)正式計(jì)劃。
Goerli 的核心目標(biāo)就是支持多客戶(hù)端。為了實(shí)現(xiàn)這一目標(biāo),開(kāi)發(fā)團(tuán)隊(duì)首先嘗試在 Geth 內(nèi)部實(shí)現(xiàn) Parity 設(shè)計(jì)的 Aura 算法。在 ETHBerlin 黑客松中,開(kāi)發(fā)團(tuán)隊(duì)實(shí)現(xiàn)了這一目標(biāo),但發(fā)現(xiàn)它對(duì)現(xiàn)有代碼庫(kù)的侵入性過(guò)強(qiáng)。最終 Goerli 團(tuán)隊(duì)為了實(shí)現(xiàn)多客戶(hù)端兼容的目標(biāo)選擇了 Clique 共識(shí)引擎,該引擎已在 Rinkeby 測(cè)試網(wǎng)中證明了其價(jià)值,但 Goerli 開(kāi)發(fā)團(tuán)隊(duì)編寫(xiě)了大量代碼使得所有主要的以太坊客戶(hù)端支持該共識(shí)協(xié)議。
Goerli 于 2019 年 1 月 31 日正式上線(xiàn),Chain ID 為 5,出塊時(shí)間為 15 秒。該網(wǎng)絡(luò)在客戶(hù)端多樣性方面取得了顯著成就,支持 Geth、Parity、Nethermind 等主流平臺(tái)。這種廣泛的兼容性使 Goerli 成為第一個(gè)真正通用的 PoA 測(cè)試網(wǎng),解決了困擾早期網(wǎng)絡(luò)的碎片化問(wèn)題。
該網(wǎng)絡(luò)的穩(wěn)定性和可靠性使其成為應(yīng)用程序開(kāi)發(fā)者、基礎(chǔ)設(shè)施提供商和協(xié)議研究人員的首選。在以太坊準(zhǔn)備合并之際,Goerli 被選中于 2022 年 8 月 11 日與 Prater 信標(biāo)鏈測(cè)試網(wǎng)合并,成功從 PoA 共識(shí)過(guò)渡到 PoS 共識(shí)。
Goerli 最嚴(yán)重的問(wèn)題是該網(wǎng)絡(luò)內(nèi)的 ETH 供應(yīng)量有限,這導(dǎo)致 Goerli 網(wǎng)絡(luò)在生命末期出現(xiàn)了 嚴(yán)重的 ETH 供應(yīng)問(wèn)題。大部份在 Goerli 上進(jìn)行開(kāi)發(fā)的開(kāi)發(fā)者和用戶(hù)不得不在多個(gè)水龍頭獲取測(cè)試代幣,甚至不得不支付資金購(gòu)買(mǎi)測(cè)試代幣。
Sepolia 也是一個(gè) PoA 測(cè)試網(wǎng),該測(cè)試網(wǎng)主要由 ETHPandaOps 維護(hù)。ETHPandaOps 是一個(gè)專(zhuān)注于監(jiān)控和優(yōu)化以太坊基礎(chǔ)設(shè)施的團(tuán)隊(duì),該團(tuán)隊(duì)目前是以太坊基礎(chǔ)設(shè)施的核心維護(hù)團(tuán)隊(duì),主要提供為以太坊提供以下方面的能力:
- 網(wǎng)絡(luò)監(jiān)控工具,提供有關(guān) Ethereum 網(wǎng)絡(luò)運(yùn)行狀況、性能和行為數(shù)據(jù)。該團(tuán)地也維護(hù)了一個(gè)以太坊網(wǎng)絡(luò)運(yùn)行情況的數(shù)據(jù)集 Xatu
- 測(cè)試工具,主要服務(wù)于以太坊核心開(kāi)發(fā)者,幫助核心開(kāi)發(fā)者快速構(gòu)建包含多個(gè)不同客戶(hù)端的 DevNet 來(lái)測(cè)試節(jié)點(diǎn)軟件內(nèi)某些 EIP 是否正確實(shí)現(xiàn),該工具的代表就是 ethereum-package
- 其他工具。比如 ETHPandaOps 也開(kāi)發(fā)了測(cè)試網(wǎng)代幣分發(fā)的 Funding-vault 以及節(jié)點(diǎn)快照工具 Snapshotter
作為 PoA 測(cè)試網(wǎng),Sepolia 沒(méi)有辦法進(jìn)行完整的 PoS 層面的測(cè)試,所以該測(cè)試網(wǎng)專(zhuān)注于執(zhí)行層方面的測(cè)試,簡(jiǎn)單來(lái)說(shuō),該測(cè)試網(wǎng)是為智能合約工程師和用戶(hù)設(shè)計(jì)的。相比于 Goerli 測(cè)試網(wǎng),Sepolia 最大的優(yōu)點(diǎn)是該測(cè)試網(wǎng)內(nèi)的測(cè)試 ETH 的供應(yīng)是沒(méi)有上限的,所以開(kāi)發(fā)者可以較為簡(jiǎn)單的從水空頭內(nèi)獲取測(cè)試代幣。
與 Sepolia 不同,Hole?ky 和 Hoodi 都是公開(kāi)測(cè)試網(wǎng),同時(shí)專(zhuān)注于協(xié)議層測(cè)試的。所謂協(xié)議層測(cè)試,主要指測(cè)試 PoS 等方面的功能,比如 ETH 質(zhì)押者是否可以正常退出等。Hole?ky 曾是協(xié)議層測(cè)試首選的測(cè)試網(wǎng),但在 Pectra 升級(jí)內(nèi),該測(cè)試網(wǎng)遭到 嚴(yán)重破壞。簡(jiǎn)單來(lái)說(shuō),Pectra 升級(jí)時(shí) Hole?ky 測(cè)試網(wǎng)被錯(cuò)誤配置導(dǎo)致三種節(jié)點(diǎn)客戶(hù)端無(wú)法正常參與共識(shí)。由于共識(shí)出現(xiàn)問(wèn)題,大量質(zhì)押者被罰沒(méi),也導(dǎo)致了 PoS 質(zhì)押的退出隊(duì)列變得極其擁擠。以太坊核心開(kāi)發(fā)者推出了一系列的恢復(fù)方案,更新了客戶(hù)端軟件,同時(shí)伴隨著 2 周左右的大規(guī)模罰沒(méi),大量錯(cuò)誤的節(jié)點(diǎn)被罰沒(méi)了所有資金以至于無(wú)法繼續(xù)參與 PoS 共識(shí)。在正確節(jié)點(diǎn)軟件和錯(cuò)誤質(zhì)押者被剔除后,Hole?ky 測(cè)試網(wǎng)最終恢復(fù)正常。
但 Hole?ky 測(cè)試網(wǎng)的事件導(dǎo)致 Hole?ky 測(cè)試網(wǎng)在 2025 月 2 月底無(wú)法正常參與 Pectra 升級(jí)的其他測(cè)試。比較大的影響包括:
- 由于之前共識(shí)出現(xiàn)問(wèn)題,導(dǎo)致 Hole?ky 測(cè)試網(wǎng)狀態(tài)比較混亂,測(cè)試參與者需要處理一些之前錯(cuò)誤配置導(dǎo)致的共識(shí)問(wèn)題,這導(dǎo)致測(cè)試難度進(jìn)一步上升
- 由于大量質(zhì)押者被罰沒(méi)退出,導(dǎo)致退出隊(duì)列異常龐大,測(cè)試人員很難測(cè)試質(zhì)押退出。而質(zhì)押退出是 Pectra 升級(jí)的覆蓋范圍
為了避免影響 Pectra 升級(jí)的正常上線(xiàn),ETHPanOps 推出了 Hoodi 測(cè)試網(wǎng)。本質(zhì)上,Hoodi 測(cè)試網(wǎng)與 Hole?ky 測(cè)試網(wǎng)的職責(zé)是一致的,都是為了驗(yàn)證 PoS 等協(xié)議層是否可以正常執(zhí)行,只是 Hoodi 測(cè)試網(wǎng)相比 Hole?ky 測(cè)試網(wǎng)更加干凈。
所以目前對(duì)于智能合約工程師而言,使用 Sepolia 測(cè)試網(wǎng)進(jìn)行相關(guān)測(cè)試是最優(yōu)選擇,而對(duì)于協(xié)議層面的測(cè)試,使用 Hoodi 測(cè)試網(wǎng)是最優(yōu)選擇,而 Hole?ky 測(cè)試網(wǎng)基本處于廢棄狀態(tài)。最近,ETHPanOps 希望 驗(yàn)證 60M 的區(qū)塊 gas 上限對(duì)以太坊的影響 時(shí)就只使用了 Sepolia 測(cè)試網(wǎng)和 Hoodi 測(cè)試網(wǎng)。
在上文內(nèi),我們介紹了以太坊測(cè)試網(wǎng)的基礎(chǔ)歷史。以太坊測(cè)試網(wǎng)的每一次更換都是因?yàn)橐恍┘夹g(shù)原因?qū)е碌?。?Olympic 到 Morden 的轉(zhuǎn)換是因?yàn)?Olympic 內(nèi)包含太多垃圾交易;從 Morden 到 Ropsten 的轉(zhuǎn)換是因?yàn)?Morden 存在的共識(shí)分裂問(wèn)題;從 Ropsten 到 Rinkeby 的轉(zhuǎn)換是因?yàn)?Ropsten 作為公開(kāi)測(cè)試網(wǎng)容易遭到拒絕服務(wù)攻擊;從 Rinkeby 到 Goerli 的轉(zhuǎn)化是因?yàn)?Ropsten 在 Merge 升級(jí)后完成了歷史使命,Ropsten 積累的大量數(shù)據(jù)不適合進(jìn)一步運(yùn)營(yíng);從 Goerli 到 Sepolia 測(cè)試網(wǎng)是因?yàn)?Goerli 存在的 ETH 供應(yīng)問(wèn)題以及 Goerli 的運(yùn)營(yíng)周期。
而 BTC 測(cè)試網(wǎng)的更替則相當(dāng)具有「暴力」屬性。BTC 在歷史上存在四個(gè)主要測(cè)試網(wǎng),這些測(cè)試網(wǎng)被直接命名為 Testnet1 / Testnet2 等。對(duì)于 Testnet1 和 testnet2 基本很難找到相關(guān)歷史,但是對(duì)于 testnet3 和 testnet4 之間的更新則具有相當(dāng)多有趣的因素。
testnet3 是 Bitcoin core v0.7 版本引入的測(cè)試網(wǎng),主要解決了 testnet2 測(cè)試網(wǎng)難度過(guò)高、交易長(zhǎng)時(shí)間無(wú)法確認(rèn)的問(wèn)題。但是 testnet3 的相關(guān)代碼存在問(wèn)題,該問(wèn)題的詳細(xì)介紹可以閱讀 lopp 在 2024 年 4 月發(fā)布的 Bitcoin Testnet Block Storms。簡(jiǎn)單來(lái)說(shuō),testnet3 測(cè)試網(wǎng)存在一個(gè)漏洞,該漏洞會(huì)導(dǎo)致區(qū)塊難度重置,下圖展示了區(qū)塊難度重置的情況:
我們可以看到 testnet3 測(cè)試網(wǎng)難度波動(dòng)極大,偶爾會(huì)出現(xiàn)因?yàn)閰^(qū)塊難度重置導(dǎo)致難度下降 7 個(gè)數(shù)量級(jí)的情況。一旦出現(xiàn)這種難度異常下降的情況,理論上 testnet3 的礦工可以利用 ASIC 礦機(jī)或者 GPU 程序短時(shí)間內(nèi)挖掘大量區(qū)塊。
在 2024 年 4 月,lopp 發(fā)布了一篇新的文章 Griefing Bitcoin『s Testnet。這篇文章介紹 lopp 利用之前發(fā)現(xiàn)的 testnet3 的漏洞對(duì) testnet3 進(jìn)行了致命的攻擊,同時(shí)在文章中,lopp 也表達(dá)了自己的意愿,具體的意愿是:
- testnet3 應(yīng)該被放棄
- testnet 網(wǎng)絡(luò)內(nèi)的 BTC 不應(yīng)該有任何價(jià)值
當(dāng)然,lopp 攻擊 testnet3 的直接起因是聲稱(chēng)構(gòu)建 btc 上的 zk rollup 的 SatoshiVM 項(xiàng)目希望廣泛的用戶(hù)參與測(cè)試,顯然,這些用戶(hù)參與測(cè)試時(shí)需要獲得 testnet btc 作為 gas 等。這導(dǎo)致 testnet3 上的 BTC 開(kāi)始被售賣(mài)。
而 lopp 認(rèn)為測(cè)試網(wǎng)內(nèi)的 BTC 應(yīng)該沒(méi)有價(jià)值,任何開(kāi)發(fā)者都可以免費(fèi)獲得測(cè)試網(wǎng) BTC,同時(shí)測(cè)試網(wǎng) BTC 應(yīng)該只被用于開(kāi)發(fā)目的使用,SatoshiVM 項(xiàng)目顯然不符合 lopp 的價(jià)值觀。為了表達(dá)自己的不滿(mǎn),同時(shí)推動(dòng) BTC 測(cè)試網(wǎng)更新,lopp 開(kāi)啟了一項(xiàng)大量挖掘 testnet3 區(qū)塊的攻擊行為。

從上圖可以看到,lopp 參與挖礦后,testnet3 的區(qū)塊數(shù)量每天增加了 300%。當(dāng)此操作開(kāi)始后,lopp 觀察到了一些出售測(cè)試網(wǎng)代幣和 motoswap 項(xiàng)目的抗議。lopp 在調(diào)查后,發(fā)現(xiàn) motoswap 是 BSV 團(tuán)體運(yùn)營(yíng)的。lopp 并不是很滿(mǎn)意上述用戶(hù)的表態(tài),所以 lopp 加大了挖掘 testnet3 區(qū)塊的哈希律,實(shí)現(xiàn)了下圖中顯示的恐怖的出塊速度:
這意味著 testnet3 在以過(guò)去 150 倍到 200 倍的速度出塊,這對(duì)大量依賴(lài) testnet3 的基礎(chǔ)設(shè)施造成了巨大打擊。比如知名的 BTC 側(cè)鏈項(xiàng)目 Stack 在 lopp 開(kāi)始攻擊 testnet3 后,其依賴(lài) testnet3 的 stack 測(cè)試網(wǎng)無(wú)法正常運(yùn)轉(zhuǎn)。在 The Challenges of Building on Bitcoin Testnet 一文中,stack 聲明工程師為了保持 testnet3 上的 stack 測(cè)試網(wǎng)執(zhí)行花費(fèi)了大量時(shí)間修改當(dāng)前測(cè)試網(wǎng)的代碼,但仍無(wú)法使得 stack 測(cè)試網(wǎng)正常運(yùn)轉(zhuǎn)。stack 最終決定放棄 testnet3 上的測(cè)試網(wǎng),使用 stack 團(tuán)隊(duì)可以維護(hù)的主權(quán)測(cè)試網(wǎng) Bitcoin Regtest。
lopp 在自己的文章內(nèi)寫(xiě)到:
Suffice to say that it』s a very bad idea to use testnet for anything of real value. Testnet is not secure, and I『m happy to prove it to folks who refuse to believe it. I』ll reiterate: I don『t care if folks are using testnet to test out controversial things like inscriptions / runes / ordinals / exchanges / etc. But if you』re going to do those things for actual value, you『re far better off using something like dogecoin or litecoin. You know, a production network that isn』t intentionally hobbled.
簡(jiǎn)單來(lái)說(shuō),lopp 攻擊 testnet3 的根本原因是 testnet3 內(nèi)的 BTC 開(kāi)始存在價(jià)值。當(dāng)然,作為 Bitcoin Core 的開(kāi)發(fā)者,lopp 也說(shuō)明攻擊 testnet3 的行為只使用自己的 GPU 和自己部署在本地的節(jié)點(diǎn)。同時(shí),lopp 也說(shuō)明 testnet4 測(cè)試網(wǎng)代碼正在逐漸完成。
在文章的最后,lopp 表示避免測(cè)試網(wǎng)代幣價(jià)值累積的唯一方法可能是宣傳定期重置的文化。測(cè)試網(wǎng)最好會(huì)被定期重置,這樣既可以降低測(cè)試網(wǎng)所占用的狀態(tài),又可以避免測(cè)試網(wǎng)內(nèi)的 BTC 價(jià)值累積。從這角度看,以太坊提前規(guī)劃了每一個(gè)測(cè)試網(wǎng)的生命歷程,等待測(cè)試網(wǎng)生命歷程到期自動(dòng)廢棄是一個(gè)超前且有效的設(shè)計(jì)。
最終,在 2024 年 10 月推出的 Bitcoin Core version 28.0 中,核心開(kāi)發(fā)者增加了 testnet4 的支持。
與以太坊類(lèi)似,BTC 其實(shí)也存在一些其他類(lèi)型的測(cè)試網(wǎng),除了上文介紹的 testnet3 和 testnet4 這種 Bitcoin Core 支持的公共測(cè)試網(wǎng)外,Bitcoin 還存在以下類(lèi)型的測(cè)試網(wǎng):
- Bitcoin Regtest 也是 bitcoin core 提供的一種測(cè)試網(wǎng),但該測(cè)試網(wǎng)是本地測(cè)試網(wǎng),測(cè)試網(wǎng)的所有者可以直接使用 RPC 生成區(qū)塊等
- Bitcoin Signet 是一種混合測(cè)試網(wǎng),該測(cè)試網(wǎng)是公開(kāi)的,但是要求區(qū)塊帶有特定的簽名,該機(jī)制類(lèi)似 PoA。所有的區(qū)塊只有經(jīng)過(guò)管理員同意才可以被認(rèn)可。
正如前文所述,Bitcoin testnet 的升級(jí)在某種角度來(lái)說(shuō)是「暴力」的,lopp 使用了最極端的挖掘 testnet3 區(qū)塊進(jìn)行攻擊來(lái)推動(dòng)了 Bitcoin 測(cè)試網(wǎng)的升級(jí),并表達(dá)了自己個(gè)人意愿。
假如以太坊內(nèi)出現(xiàn)類(lèi)似 testnet3 問(wèn)題,以太坊核心開(kāi)發(fā)者大概率會(huì)邀請(qǐng)利益相關(guān)方在核心開(kāi)發(fā)者會(huì)議中通過(guò)溝通解決,從某種角度來(lái)看,這種做法更加優(yōu)雅且并不會(huì)影響測(cè)試網(wǎng)內(nèi)的執(zhí)行測(cè)試的項(xiàng)目,但從另一個(gè)角度看,這種方式可能不太去中心化。而 lopp 直接攻擊 testnet3 的方式是以一種最去中心化的方式表達(dá)了個(gè)人意愿,當(dāng)然隨之帶來(lái)的一些破壞只能被視為轉(zhuǎn)型陣痛。
以太坊和比特幣測(cè)試網(wǎng)都是一種公共物品。在本節(jié)中,我們簡(jiǎn)單討論一下公共物品的經(jīng)濟(jì)學(xué)屬性,并對(duì)測(cè)試網(wǎng)內(nèi)的一些行為進(jìn)行經(jīng)濟(jì)解釋。首先,我們需要定義公共物品的性質(zhì)是,所謂公共物品指的是多人可以共享但是不干擾他人享用的。公共物品的定義是簡(jiǎn)單的,但是辨別哪種產(chǎn)品是公共物品是需要特定角度的。公共物品在很多情況下具有公共和私人的雙重屬性,比如 NFT 可以被所有人欣賞其藝術(shù)價(jià)值,某些用戶(hù)的欣賞并不會(huì)影響其他用戶(hù)的欣賞,在這個(gè)角度上,NFT 實(shí)際上可以被視為公共物品,但是 NFT 的所有權(quán)隸屬于某一個(gè)鏈上地址,在這個(gè)角度來(lái)看,NFT 又不是一個(gè)公共物品。
對(duì)于為什么公共物品往往并不對(duì)外收費(fèi)?這個(gè)問(wèn)題的答案可能與大家的認(rèn)知并不相符,以以太坊測(cè)試網(wǎng)為例,測(cè)試網(wǎng)帶給 Alice 的價(jià)值可能是 10,而帶給 Bob 的價(jià)值可能是 1。以太坊測(cè)試網(wǎng)作為公共物品,Alice 和 Bob 是可以共用的,所以假如以太坊測(cè)試網(wǎng)不收取任何費(fèi)用,那么 Alice 獲得 10 的收益而 Bob 獲得 1 收益,總體上 Alice 和 Bob 獲得了 11 收益。但假如測(cè)試網(wǎng)收取 2 費(fèi)用,此時(shí) Bob 因?yàn)闇y(cè)試網(wǎng)收取的費(fèi)用大于測(cè)試網(wǎng)的價(jià)值,原本會(huì)使用測(cè)試網(wǎng)的 Bob 就會(huì)選擇放棄測(cè)試網(wǎng),那么總體上只有 Alice 獲得的 10 收益。在上文介紹的這個(gè)簡(jiǎn)單案例中,我們觀察到一旦測(cè)試網(wǎng)征收費(fèi)用,那么就會(huì)有原本可以享受公共物品的人退出導(dǎo)致總體收益下降。
一種可能的解決方案是進(jìn)行價(jià)格歧視,即對(duì) Alice 征收 10$ 費(fèi)用,同時(shí)對(duì) Bob 征收 1$ 費(fèi)用,但在大規(guī)模網(wǎng)絡(luò)內(nèi)部,我們需要支付很高的成本實(shí)現(xiàn)對(duì)不同人征收不同費(fèi)用。所以為了實(shí)現(xiàn)經(jīng)濟(jì)學(xué)上的最優(yōu),公共物品只能選擇不收取費(fèi)用一種途徑。所以公共物品不是天然免費(fèi)的,只是因?yàn)槿绻獙?shí)現(xiàn)全局經(jīng)濟(jì)利益最優(yōu),在區(qū)別定價(jià)需要付出很高的成本的情況下,公共物品只能選擇免費(fèi)開(kāi)放。我們可以看到此處的核心其實(shí)是公共物品實(shí)現(xiàn)價(jià)格歧視的成本問(wèn)題,假如成本足夠低,公共物品可以進(jìn)行定價(jià)。
對(duì)于如何在滿(mǎn)足公共物品公共性的基礎(chǔ)上對(duì)外進(jìn)行費(fèi)用收取方面,經(jīng)濟(jì)學(xué)內(nèi)存在隔離理論的概念。所謂隔離指花費(fèi)一定成本將一部份公共物品使用者與其他公共物品使用者隔離,并對(duì)這部分使用者進(jìn)行費(fèi)用征收。首先,對(duì)于沒(méi)有被隔離的用戶(hù)而言,公共物品仍是可以免費(fèi)享受的,而對(duì)于被隔離的用戶(hù),這部分用戶(hù)需要為公共物品付費(fèi)。注意,此處的付費(fèi)不一定是直接支付資金成本,也有可能是支付時(shí)間等間接成本。
以測(cè)試網(wǎng)為例,以太坊測(cè)試網(wǎng)就進(jìn)行了隔離操作。對(duì)于普通用戶(hù),可以在公開(kāi)水龍頭內(nèi)獲取測(cè)試代幣。但是對(duì)于需要消耗大量測(cè)試代幣的用戶(hù),以太坊測(cè)試網(wǎng)對(duì)這部分用戶(hù)進(jìn)行隔離,這部分用戶(hù)需要付出額外成本一次性獲得大量測(cè)試代幣。目前以太坊獲取大量測(cè)試代幣的途徑是使用 Funding Vault。這是一個(gè) ethpandaops 維護(hù)的倉(cāng)庫(kù),任何希望獲得大量測(cè)試代幣進(jìn)行項(xiàng)目測(cè)試的用戶(hù)都可以通過(guò)此倉(cāng)庫(kù)提供一系列材料證明自己確實(shí)需要大量測(cè)試代幣,然后直接從 ethpandaops 手中獲取代幣。
而 BTC 的 testnet 系列測(cè)試網(wǎng)也使用了隔離手段。對(duì)于小金額測(cè)試 BTC 的獲得,用戶(hù)可以直接在公開(kāi)水龍頭內(nèi)獲得,但對(duì)于有大量測(cè)試代幣需求的用戶(hù),testnet 對(duì)這些用戶(hù)進(jìn)行隔離。這些用戶(hù)只能通過(guò)運(yùn)行 testnet 網(wǎng)絡(luò)節(jié)點(diǎn)并花費(fèi)資源挖礦才可以獲得較多的測(cè)試代幣。
我們可以公共物品的提供者會(huì)自覺(jué)或不自覺(jué)的使用隔離理論實(shí)現(xiàn)公共物品的合理使用。雖然隔離理論有時(shí)候會(huì)以披著「避免公共物品被濫用」的外皮出現(xiàn),但本質(zhì)上都是建立各自的隔離。當(dāng)然,對(duì)于隔離哪些用戶(hù),使用哪種方法隔離就是不同測(cè)試網(wǎng)價(jià)值觀的體現(xiàn)。目前來(lái)看,無(wú)論 BTC 測(cè)試網(wǎng)還是以太坊測(cè)試網(wǎng)基本都同意測(cè)試代幣不應(yīng)該有價(jià)值的理念。
本文總計(jì)了歷史上所有以太坊的公開(kāi)測(cè)試網(wǎng)的變遷,以及介紹 BTC 測(cè)試網(wǎng)的 testnet3 的戲劇性事件。在文章的最后,我們介紹了公共物品的經(jīng)濟(jì)學(xué)問(wèn)題,即公共物品不對(duì)外收費(fèi)的根本原因在于無(wú)論如何對(duì)外收費(fèi)都會(huì)對(duì)社會(huì)總體利益產(chǎn)生影響,最后介紹隔離理論。