作者:Arweave Oasis
審閱:0xmiddle
Arweave 自2018 年啟動以來,一直被認為是去中心化儲存賽道中最有價值的網路之一。但轉眼5 年,由於它的技術主導屬性,許多人對Arweave 是既熟悉又陌生。本文從回顧Arweave 自成立以來的技術發展歷史入手,以增進大家對Arweave 的深入理解。
Arweave 在5 年內共經歷了十餘次主要的技術升級,其主要迭代的核心目標就是從一個運算主導的挖礦機制轉變為由儲存主導的挖礦機制。
圖1:近6 年中Arweave 編織網(weave)大小隨時間變化的曲線圖以及版本迭代
文章中的大部分內容取自Arweave 白皮書與生態@DMacOnArweave 的技術分析影片。
Arweave 1.5:主網啟動
Arweave 主網於2018 年11 月18 日啟動。當時的編織網大小只有177 MiB。早期的Arweave 在某些方面與現在類似,2 分鐘的出塊時間,每個區塊可容納的上限為1000 筆。除此之外,更多的是不同的方面,如每筆交易的大小限制僅有5.8 MiB。並且它使用了一種名為存取證明(Proof of Access)的挖礦機制。
那問題來了,什麼是訪問證明(PoA)呢?
簡單說,是為了產生新的區塊,礦工必須證明他們可以存取區塊鏈歷史中的其他區塊。所以訪問證明會從鏈上隨機選擇一個歷史區塊,要求礦工將那個歷史區塊作為一個回溯區塊(Recall Block)放進他們試圖產生的當前區塊中。而這將是這個回溯塊的完整備份。
當時的想法是礦工們不必儲存所有區塊,只要他們能證明可以存取這些區塊,就可以參與挖礦競爭。 (Dmac 在他的影片中用賽車比賽作比喻便於理解,這裡引用過來。)
首先這場比賽有一個終點線,這個終點線會隨著參與者的數量或挖礦速度而移動,以確保比賽總是在大約兩分鐘內結束。這就是兩分鐘區塊時間的原因。
其次,這場比賽分為兩部分。
- 第一部分,可以稱為資格賽,礦工們必須證明他們可以訪問歷史區塊。一旦手中有了指定區塊,就可以進入決賽。如果礦工沒有儲存區塊,沒關係,他們還可以從同行那裡存取它,同樣可以加入比賽。
- 第二部分,相當於資格賽後的決賽,這部分就是純粹以工作量證明的方式使用哈希計算能力來挖礦,實質上就是消耗能源來計算哈希並最終贏得比賽。
一旦一個礦工越過了終點線,比賽結束,下一場比賽開始。而挖礦獎勵都歸一個贏家所有,這使得挖礦變得異常激烈。因此,Arweave 開始快速成長。
圖2:PoA 機制的挖礦過程,3 號「小車」由於需要從別的節點獲得回溯塊以完成「資格賽」,所以會比存了回溯塊的「小車」慢一步。
Arweave 1.7:RandomX
早期的Arweave 原理是一個非常簡單易懂的機制,但沒多久,研究人員就意識到可能會出現的一個不良結果。即礦工可能會採取一些對網路不利的策略,我們稱之為墮落策略。
主要是因為,有些礦工在沒有儲存指定快速存取區塊時,就必須去存取別人的區塊,這使得他們比儲存了區塊的礦工慢了一步,輸在了起跑線上。但解決方案也很簡單,只要大量堆疊GPU ,透過大算力、消耗大量能源就能彌補這個缺陷,因此,他們甚至可以超過那些儲存區塊並保持快速存取的礦工。如果這種策略成為了主流,礦工將不再儲存和分享區塊,取而代之的是不斷優化算力設備,消耗大量能量來獲得競爭的勝利。最終結果就會變成網路的實用性大幅下降,資料也逐漸變得中心化。這對於儲存網路來說,顯然是一種墮落的背離。
為了解決這個問題,Arweave 1.7 版本出現了。
這個版本最大的特色是引進了一種叫做RandomX 的機制。它是一個在GPU 或ASIC 設備上運行非常困難的哈希公式,這使得礦工們放棄堆疊GPU 算力,只採用通用CPU 來參加哈希算力的競賽。
Arweave 1.8/1.9:10 MiB 交易大小與SQL lite
對礦工而言,除了證明他們有訪問歷史區塊的能力外,還有更重要的事項需要處理,那就是對用戶向Arweave 發布的交易進行處理。
所有新的用戶交易資料都必須打包進新區塊中,這是對一條公鏈最起碼的要求。在Arweave 網路中,當一個用戶向一個礦工提交一條交易數據時,這個礦工不僅會將數據打包進自己即將提交的區塊中,還會將它分享給其它礦工,以此讓所有礦工都能將這條交易數據打包進各自即將提交的區塊中。他們為什麼要這樣做呢?這裡至少有兩個原因:
- 他們在經濟上被激勵去這樣做,因為每個包含在區塊中的交易數據都會增加該區塊的獎勵。礦工們互相分享交易數據,能確保無論誰贏得出塊權,都能得到最大的獎勵。
- 防止網路發展的死亡螺旋。如果用戶的交易數據時常會不被打包進區塊,那用戶就會越來越少,網路就失去了它的價值,礦工的收益也會變少,這是所有人都不願意看到的。
所以礦工選擇以這種互惠的方式來最大化自己的利益。但這又帶來了資料傳輸上的一個難題,它成為網路可擴展性的瓶頸。交易越多,區塊越大,而5.8 MiB 的交易限制也沒有發揮作用。因此,Arweave 透過硬分叉,將交易大小增加至10 MiB,從而獲得了一些緩解。
圖3:礦工節點之間的交易資料同步機制
但即便如此,傳輸瓶頸的問題仍然沒有解決。 Arweave 是一個全球分佈的礦工網絡,所有礦工都需要同步狀態。而且每個礦工的速度連線也都不同,這讓網路出現了平均連線速度。為了讓這個網路每兩分鐘產生一個新的區塊,連線速度就需要足夠上傳希望在這兩分鐘內儲存的所有資料。如果用戶上傳的資料超過了網路的平均連線速度,就會導致擁堵,降低網路的效用。這將成為Arweave 發展的絆腳石。所以,後續1.9 的更新版本為提高網路的效能使用了SQL lite 等基礎架構。
Arweave 2.0:SPoA
2020 年3 月,Arweave 2.0 的更新為網路引入了兩個重要更新,也因此解除了網路可擴展性的枷鎖,並打破了在Arweave 上儲存資料的能力極限。
第一個更新是簡潔的證明(Succinct Proof)。這是基於默克爾樹加密結構所建構的,它使礦工能夠透過提供一個簡單的梅克爾樹化的壓縮分支路徑,來證明他們儲存了一個區塊中的所有位元組。它所帶來的改變是,礦工們只需要把一個不到1 KiB 的簡潔證明打包進塊中即可,不再需要打包一個可能有10 GiB 的回溯塊。
第二個更新是「格式2 交易」。這個版本對交易的格式進行了最佳化,其目的是為了給節點間分享的資料傳輸區塊瘦身。相對於「格式1 交易」需要把交易的頭與資料同時加入區塊中的模式,「格式2 交易」則允許將交易頭與資料分開,也就是在礦工節點之間的區塊資訊資料共享傳輸中,除回溯塊簡潔證明之外,所有交易都只需要將交易頭加入區塊中,交易資料可以在競賽結束後再加入區塊。這將大大降低礦工節點之間同步區塊內交易時的傳輸要求。
這些更新的結果是它創建了比過去更輕、更容易傳輸的區塊,釋放了網路中的過剩頻寬。礦工們此時會使用這些過剩頻寬來傳輸「格式2 交易」的數據,因為這些數據在未來將會成為回溯區塊。因此,可擴展性問題被解決了。
Arweave 2.4:SPoRA
到目前為止,Arweave 網路中的所有問題都解決了嗎?答案是顯然沒有。另一個問題又因新的SPoA 機製而衍生出來。
與礦工堆疊GPU 算力類似的挖礦策略又出現了。這次雖然不是GPU 堆疊的算力中心化問題,但帶來一種可能更以運算為中心的主流策略。那就是快速存取儲存池的出現。所有歷史區塊都被存在這些儲存池中,當訪問證明產生一個隨機的回溯區塊時,它們可以快速產生證明,然後在礦工之間以極快的速度同步。
這雖然看起來沒有多大問題,資料在這樣的策略中還是可以得到足夠的備份與儲存。但問題是這種策略會潛移默化地轉變礦工的關注點,礦工不再有動力獲得對數據的高速訪問,因為現在傳輸證明變得非常容易且快速,所以他們會將大部分精力投入到工作量證明的哈希運算中,而不是資料儲存。這不就是另一種形式的墮落策略嗎?
圖4:儲存池的出現
於是,Arweave 在經歷了數次功能升級後,如資料索引迭代(Indexing),錢包清單壓縮(Wallet List),V1 版交易資料遷移等。終於迎來了另一個大版本的迭代—— SPoRA,隨機存取的簡潔證明。
SPoRA 真正將Arweave 引入了全新的時代,透過機制迭代讓礦工的注意力從哈希計算轉到了資料儲存。
那麼,隨機存取的簡潔證明有什麼不同呢?
它首先有兩個先決條件,
- 經過索引的資料集(Indexed Dataset)。由於採用2.1 版本中迭代的Indexing 功能,它用全局偏移量為編織網絡中的每個資料塊(Chunk)作了標記,以便每個資料塊都可以透過這個全域偏移量來快速存取。這就帶來了SPoRA 的核心機制— 資料塊的連續檢索。值得提醒的是這裡提到的資料塊(Chunk)是大檔案分割後的最小資料單元,其大小為256 KiB。並不是區塊Block 的概念。
- 慢哈希(Slow Hash)。這種哈希用於隨機地選出備選資料區塊(Candidate Chunk)。得益於1.7 版本引入的RandomX 演算法,礦工無法使用算力堆疊的方式搶跑,只能使用CPU 進行運算。
基於這兩個先決條件,SPoRA 機制有5 個步驟
- 第一步,產生一個隨機數,並用該隨機數與前區塊資訊透過RandomX 產生一個慢哈希;
- 第二步,使用這個慢雜湊計算出一個唯一的回溯位元組(Recall Byte 即資料塊的全域偏移量);
- 第三步,礦工用這個回溯位元組從自己的儲存空間中尋找相對應的資料塊。如果礦工沒有儲存該資料塊,則返回到第一步重新開始;
- 第四步,用第一步產生的慢哈希與剛找到的資料塊進行一次快哈希;
- 第五步,如果計算出的哈希結果大於目前的挖礦難度值,則完成區塊的挖掘與分發。反之則回到第一步重新開始。
所以從這裡可以看到,這極大地激勵了礦工們盡可能地將數據存儲在能夠通過非常快的總線連接到他們的CPU 的硬碟上,而不是在遠在天邊的存儲池中。完成將挖礦策略從運算導向扭轉為儲存導向。
具體內容可閱讀《ANS-103: Succinct Proofs of Random Access》
Arweave 2.5:Packing 與資料暴增
SPoRA 讓礦工都開始瘋狂地儲存數據,因為這是改善挖礦效率的最低懸的果實。那接下來發生什麼事呢?
一些聰明的礦工意識到這種機制下的瓶頸其實是能多快從硬碟上取得資料。從硬碟取得的資料區塊越多,能計算的簡潔證明就越多,能執行的哈希操作就越多,挖到礦的幾率就越高。
所以如果當礦工在硬碟上花費了十倍成本,例如使用了讀寫速度更快的SSD 來儲存數據,那麼這位礦工所擁有的哈希能力就會高十倍。當然這也會出現類似GPU 算力的軍備競賽。比SSD 更快的儲存形式,例如RAM 硬碟這種更快傳輸速度的奇特儲存形式也會隨之出現。不過這完全取決於投入產出比。
現在,礦工能產生哈希的最快速度就是一個SSD 硬碟的讀寫速度,這為類似PoW 模式的能源消耗設定了一個較低的上限,從而更加環保。
這樣就完美了嗎?當然還不是。技術人員認為還可以在此基礎上做得更好。
為了能有更大資料量的上傳,Arweave 2.5 引進了資料捆綁包(Bundle) 機制。這雖然不是一次真正意義上的協議升級,但它一直都是可擴展性計劃中的一個重要部分,它讓網路的大小得到了爆炸性的增長。因為它突破了我們在開始時談到的每個區塊1000 筆交易的上限。資料捆綁包只佔用了這1000 筆交易中的一筆。這為Arweave 2.6 打下了基礎。
圖5:Packing 機制的出現,讓編織網資料規模有了極大的成長
Arweave 2.6
Arweave 2.6 是自SPoRA 之後的一次重大版本升級。它在先前的基礎上又向自己的願景邁進了一步,讓Arweave 挖礦變得更加低成本以此來促進更加去中心化的礦工分佈。
那它具體有什麼不同?由於篇幅問題,這裡只作簡單的介紹,未來會更具體地專門解讀Arweave 2.6 的機制設計。
簡單理解,Arweave 2.6 就是SPoRA 的限速版本,它為SPoRA 引入了一個可以每秒鐘滴答一次的可驗證加密時鐘,我們稱之為哈希鏈(Hash Chain)。
- 它每滴答一次就會產生一個挖礦哈希(Mining Hash)。
- 礦工選擇一個他們儲存的資料分區的索引來參與挖礦。
- 結合這個挖礦哈希與分區索引,可以在礦工選定的已儲存資料分區中產生一個回溯範圍,這個回溯範圍包括了400 個回溯區塊,這些就是礦工可以用來挖礦的回溯區塊。除了這個回溯範圍之外,還會再隨機在編織網(Weave)中再產生一個回溯範圍2,如果礦工儲存了足夠多的資料分區,就能夠獲得這個範圍2,也就是另外的400 個回溯塊挖礦機會,以此增加最終勝出的幾率。這就很好地激勵了礦工去儲存足夠多的資料分區的副本。
- 礦工挨個使用回溯範圍內的資料區塊進行測試,如果結果大於目前給定網路難度即贏得挖礦權利,如果沒有滿足,則使用下一個資料區塊測試。
圖6:Arweave 2.6 的機制原理圖
這意味著每秒鐘將會產生的最大雜湊數量是固定的,2.6 版本將這個數量控制在普通機械硬碟效能也能處理的範圍之內。這讓原本基於SSD 硬碟最大速度能高達每秒數千或數十萬次哈希的能力變成了擺設,只能以每秒幾百個哈希的速度與機械硬碟同台競技。這就好比一輛蘭博基尼與一輛豐田普銳斯在一場限速是60 公里每小時的比賽中競爭,蘭博基尼的優勢在極大程度上被限制住了。所以,現在對挖礦效能貢獻最大的是礦工儲存資料集的數量。
以上是Arweave 在發展歷程中的一些重要迭代里程碑。從PoA 到SPoA 到SPoRA 再到Arweave 2.6 的限速版SPoRA,始終遵循著原初的願景。 2023 年12 月26 日,Arweave 官方又發布了2.7 版本白皮書,在這些機制的基礎上又作了很大調整,將共識機制進化到了SPoRes 簡潔的複製證明。由於這是最新更新,將會作專題詳細介紹。
如果希望在未來了解更多Arweave 相關信息,可以關注@ArweaveOasis 的X 帳號。我們將在那裡與你一起探索Arweave 以及AO 運算平台的詳細內容。