比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads
首頁 > Luna > Info

以太坊:以 “狀態” 視角理解以太坊及其未來_TROLLBNB幣

Author:

Time:1900/1/1 0:00:00

一.引言

自2015年創世以來,以太坊區塊鏈已歷經五個寒暑。五年的時間不僅把作為一種理念的以太坊協議?1?變成現實、使這套協議變得更加成熟、更加具體,也使這樣一套設計的特性和權衡關系暴露出來。這些權衡關系,作為設計上的挑戰,自然也吸引了并持續吸引著無數聰明才智,嘗試提升以太坊的可用性;其中匯聚了最多努力和想象力的,當屬為提高“可擴展性”而提出的一系列方案。

本文想指出的是,就像以太坊范式面臨著設計上的取舍,所有這些可擴展性方案也面臨著取舍;而評價這些取舍的值得與不值得,需要我們回到以太坊本身,回到以太坊節點和以太坊用戶的真實問題和真實需要。而“狀態”視角,作為理解以太坊本身的視角,正好能幫助我們廓清這些方案的設計,并揭示我們的所得和所失。

本文將從解釋“狀態”的含義開始,揭示以太坊的終極之矛和阿喀琉斯之踵,然后探討各種改進方向。“富狀態性”是以太坊智能合約“可組合性”的來源,但也是以太坊網絡最大的弱點。由此,我們可以見出現在常被人提起的哪些方案會影響“可組合性”,哪些“可擴展性”的意義更明顯。

二.以太坊作為一種范式

富狀態性與可組合性

什么是“狀態”?狀態就是一個系統在某一個時刻的具體情形。以實現密碼學貨幣的區塊鏈為例,一個區塊鏈在某一個時刻的狀態就是該時刻,該區塊鏈上所有地址的資產分布。

在此視角下,每一套區塊鏈協議都可以粗略地分成兩個部分,一部分是共識機制,另一部分是狀態轉換規則;前者定義了出塊規則,它指明了所有參與該區塊鏈的節點在什么時候需要在本地更新區塊鏈數據庫的狀態;而狀態轉換規則,則定義了什么交易是有效的,也定義了節點在處理交易時,應當如何更新狀態。

對比特幣來說,其共識機制是“PoW+中本聰共識”,而其狀態轉換規則基于UTXO。對以太坊來說,其出塊機制是“PoW+Ghost規則”,其狀態轉換規則基于賬戶。

那么,到底是什么東西讓以太坊變成一個有突破性的創新呢?

我們時常聽說,以太坊之所以特別,在于其“引入了圖靈完備的編程語言,支持可編程性”等等。實際上這種說法并不準確?2。因為允許使用更復雜的編程語言并不意味著什么,其實比特幣也可以編程;允許比特幣使用solidity編程語言并不能得到一個以太坊。以太坊真正特殊的地方在于“富狀態性”3?:它允許一個合約調用另一個合約,并且,除了區塊容量本身,不對這種調用的層級數量施加任何的限制。

SushiSwap CEO:從技術上講我看好加密貨幣:金色財經報道,SushiSwap CEO Jared Grey在社交媒體上表示,監管的唯一好處是創造一個公平的競爭環境。坦率地說,這通常是失敗的。盲目的貪婪通常會獲勝,而在位者則會通過陰險的利益沖突為自己開路。從技術上講,我看好加密貨幣,因為它阻礙了人類最惡劣的濫用特性。[2023/7/24 15:54:17]

B合約可以根據A合約公開的代碼來調用A合約、改變A合約的狀態;調用B合約的C合約也可以間接地調用A合約、改變A合約的狀態……由此,一個狀態,雖然保存在A合約里,但其控制邏輯,可以如此重重疊疊不斷累加;如果把狀態理解為資產,這等于是讓資產的使用權可以不斷得到更嚴格、更復雜的控制;這意味著,從理論上來說,一個狀態的更新邏輯能夠無限接近于現實生活中的金融合約。這種允許累加任意多層的控制的屬性,才是最關鍵的,而怎么編程這種控制,反而是次要的。

此外,以太坊還允許用戶給區塊鏈寫入狀態,使這些狀態成為全局狀態的一部分,并要求節點按照合約自定義的邏輯來更新狀態。由此,一個合約能夠把自身的狀態向以太坊上的所有其它賬戶公開,前述的富狀態性真正有了用武之地。

沒錯,現在我們已經像收集龍珠那樣集齊了三種屬性:

鏈上計算范式:合約可以要求節點按自己定義的邏輯來執行計算;

全局狀態:合約的狀態可以成為全局狀態的一部分,向所有其他賬戶公開;

富狀態性:合約之間可以相互調用,且棧層數量沒有限制,因此控制邏輯可以層層累加;

現在我們可以召喚出以太坊的最強之矛了:“可組合性”!

鏈上計算方式使我們可以擁有各式各樣的合約;全局狀態讓這些合約可以相互訪問彼此的狀態;富狀態性讓合約的組合方式可以無限多樣。所以我們不僅可以擁有穩定幣DAI,還可以擁有借貸市場,還可以擁有彩票應用,還可以擁有把彩票的收益自動捐獻的應用,還可以擁有在不同的借貸市場間自動再平衡儲蓄比例的應用……

狀態數據爆炸問題

“可組合性”太美好了,以至于不像是真的,對嗎?沒錯,上述三種屬性的三位一體,實際上是一把雙刃劍。

以太坊的狀態轉換過程可以抽象為:狀態轉換函數以舊的狀態和事務列表為輸入,輸出新的狀態。這意味著,以太坊的全驗證節點必須在本地維護著以太坊區塊鏈的最新狀態,以便能執行狀態函數并以結果來驗證一個區塊的有效性。

Vertex Labs以1200萬美元收購NFT系列HAPE PRIME工作室Digimental Studio:5月24日消息,元宇宙、Web3和AI基礎設施提供商Vertex Labs以1200萬美元完成對NFT系列HAPE PRIME的開發工作室Digimental Studio的收購。通過收購Digimental,Vertex Labs將為其HAPE社區成員引入質押計劃。[2023/5/24 15:22:18]

矛盾之處在于:對于合約及開發者來說,合約的狀態作為以太坊全局狀態的一部分,保存在以太坊的節點上,合約的狀態更新由以太坊節點來計算,這種“無服務器”的架構非常舒服;但是,這些狀態只要一次付費就會永久保存在以太坊的全驗證節點中,雖然每次更新都需要付費,但無法避免節點本地保存的狀態數據會不斷累積、膨脹。

狀態數據的膨脹之所以是一個問題,在于它會為全驗證節點帶來越來越高的硬盤讀寫負擔。狀態數據不像區塊數據,區塊數據是靜態的,持久化保存后并不需要頻繁讀寫;但狀態數據每多一個區塊就要讀寫許多次;而隨著狀態數據量的增大,讀寫的負擔也會越來越重。在過去幾年中,我們時常聽到有人說以太坊的全節點難以部署,一大原因即在于此。前一段時間Infura的免費以太坊節點服務崩潰?4,導致許多依賴Infura的服務崩潰,算是給大家鳴響了一個警鐘——原來以太坊的節點維護如此不易,讓大家寧愿選擇信任他人。

這個問題也并不容易解決。在過去幾年中,以太坊的多次硬分叉升級都提高了訪問狀態的操作碼的Gas消耗量,正是為了以經濟代價遏制合約創建新的狀態。但這顯然只是治標的辦法,因為根本上邏輯并沒有變,狀態數據要持續存留在以太坊節點處,但創造狀態數據的用戶只需付一次費。也有人提出,為改變這一點,需要引入某種“狀態租金”機制,要求保存了狀態的合約不斷支付租金,否則就終止該合約的可用性。但是,這種機制存在難以想象的復雜度,一方面,難以確定合理的收取租金的方法,另一方面,也難以確定合理的支付對象。所以狀態租金機制的研究在2019年也停滯了?5。還有項目嘗試以持幣量的多少來界定可用的狀態空間大小,因此狀態數據的大小將總是有上限的,這就避免了狀態膨脹問題,但這也改變了原生資產的經濟屬性。

到目前為止,除了“無狀態性”,我沒有看到令人滿意的、從根本上解決這個問題的方法,而“無狀態性”,我們現實地說,也面臨許多挑戰。這個我們后文再說。

BlockFi在出售失敗后尋求清算借貸業務:金色財經報道,根據一份破產法庭文件,BlockFi已請求破產法院允許其開始清算其借貸平臺。此前,BlockFi尋求將該平臺出售給第三方,作為償還債權人的更廣泛努力的一部分。5月12日的文件表明,BlockFi仍然可以追求 \"規定出售債務人所有或幾乎所有資產的替代交易\"。破產法院現在必須在推進該計劃之前批準該計劃。

此前報道,BlockFi稱對FTX索賠的成敗是償還用戶資金的關鍵。[2023/5/16 15:04:43]

總而言之,全局狀態、鏈上計算和富狀態性,既使以太坊上的合約獲得了可組合性,也使以太坊的網絡有陷于中心化的危險;就像小說《指環王》中的魔戒,既能召喚強大的力量,也可能吞噬使用者自己。我擔心以太坊還要承受這樣的重負很久。

接下來,我們以“狀態”視角,來理解諸種可擴展性方案的設計和權衡。

三.以太坊的發展方向

在此章節中,我們會分析四種以太坊的發展方向:Layer-2方案、分片、無狀態性和Rollup方案。這個分類是完全不合理的,因為rollup是Layer-2方案的子集;而無狀態性是分片的前置技術;甚至于,將它們并列也是不合理的,因為Layer-2方案幾乎不需要改動以太坊的底層,而分片和無狀態性則有這樣的要求。這樣做只是為了敘述和認識的方便。

Layer-2方案

Layer-2方案背后的理念來源于一種簡單但非常精準的直覺:以太坊之所以會面臨吞吐量的瓶頸,是因為組成以太坊網絡的節點的帶寬、計算能力和維護狀態數據的能力都是有限的,而且很難提高;單純要求整個網絡的節點在單位時間內處理更多的交易,節點的運行要求必然上升,這就損及了去中心化;但是,從使用的角度看,并不需要讓所有的狀態都放在以太坊上,也不需要讓所有的狀態計算都在以太坊上發生;我們可以把一個合約的中間狀態都保存在別的地方,用戶的交互也不在以太坊區塊鏈上發生;僅當用戶認為有必要結算某個狀態時,再將該狀態發送到以太坊上,由以太坊來加以確認。

一句話:如果我們沒法讓網絡在單位時間內對更多的事務達成共識,那就提高單筆事務的內涵。

經典的Layer-2方案“狀態通道”最徹底地體現了這種思想:當參與一個通道的兩個用戶將資金鎖入合約后,此后兩人之間的交易都不會發到鏈上,他們彼此之間使用其他通訊工具來交流簽名消息,并以此達成彼此對通道內狀態的共識;直到兩人認為不再需要交互了,就把共同認可的狀態及兩人的簽名發送到以太坊上,以太坊這才更新該合約的狀態,并根據此狀態為兩人結算資金。

Starknet DAO將于3月21日開啟首次治理投票,以決定Alpha v0.11.0升級:金色財經報道,Starknet DAO 將開始去中心化治理進程,社區將首次投票批準是否啟動其最新的協議升級 Starknet Alpha v0.11.0。DAO 選擇 3 月 21 日作為升級投票期的開始,投票將通過 Snapshot 進行,預計需要六天時間才能完成。[2023/3/16 13:06:35]

如果你把Layer-2方案當成合約的一種設計模式,你會更清楚地看到——?Layer-2方案選擇了不去利用全局狀態。另一個合約并不能實時地知道某個Layer-2合約內部到底是什么狀態,因為這些狀態并不在鏈上,也因此,一個Layer-2合約就無法與其它合約相組合了。

雖然如此,Layer-2方案也換來了極有價值的東西:更快的交易速度、更低的手續費、更小的主鏈節點負擔。

但Layer-2方案為什么在過去幾年中都沒有結出果實呢?因為在Rollup方案出現以前,其他方案,包括狀態通道和Plasma,都沒法證明鎖入自己合約的資金與鎖入帶狀態合約中的同樣安全。在狀態通道方案中,如果你沒有時刻監控區塊鏈,你的交易對手可以通過向主鏈提交舊的狀態,來“盜”走你的錢;在Plasma方案中,往往你需要依賴于運營者來為你提供自己狀態的證明,因此它對運營者本身是很難設防的。

這跟以太坊主網帶狀態合約的使用體驗完全不同。除去合約的代碼風險,你存入合約的錢,如非有人發動51%攻擊取消你的所得交易,否則不會被盜;除非有人一直通過51%攻擊來審查你的交易,否則你必定可以將自己的資金取出。

分片

另一種改進以太坊、提高以太坊吞吐量的直覺是:以太坊的吞吐量有限,源于每個全節點都必須處理所有鏈上交易;如果我們可以讓每個節點只處理一部分交易,不同組的節點分別處理不同的交易,那么整個系統在單位時間內的吞吐量就等于這幾組節點的單組處理量的總和;即,單個節點的負擔并沒有增加,但整個系統的吞吐量提高了。這就是所謂的“分片”。

關于分片化架構,一個有趣的問題是其確切定義。在經典的、非分片化的區塊鏈架構中,全節點必須重復所有計算;維護所有狀態;傳播所有區塊/交易。有人認為,只需打破一者,就算是分片化的了;但從更嚴格的視角看,必須打破所有三者,才能達到理論所推導的吞吐量提升效果?6。取不同的定義,帶來的效果也很不同。此處,我所采取的定義是,一個節點至少無需維護整個系統所有的狀態。

Circle過去三個月已銷毀約90億美元USDC供應:金色財經報道,根據 DeFiLlama 數據顯示,過去 90 天內,美元Stablecoin USDC的總供應量已從 555.5 億美元下降至 465.7 億美元,這意味著 USDC 發行方 Circle 在此期間已經銷毀了價值約 90 億美元的穩定幣,創下迄今 90 天時間段內的 USDC 最高銷毀記錄。

當用戶將 USDC 兌換為支持該穩定幣的基礎 Currency 時(通常是美元),Circle 就會將贖回的代幣發送到銷毀地址來銷毀 USDC 并從區塊鏈記錄中永久刪除這些代幣。分析顯示,USDC 銷毀量飆升恰逢主要 DeFi 平臺向穩定幣貸方提供的收益率顯著下降,根據 LoanScan 相關數據,自年初以來,USDC 對 Compound 和 Aave 的貸款利率已經縮水了 70% 以上。(The Block)[2022/10/6 18:40:47]

但另一個更有趣的問題是,假使分片架構所要求的前置技術都能實現,這一架構能有多大的意義。

在以太坊基金會的研究團隊所構想的分片架構中,整個系統的狀態被分割成了幾個部分,各部分是并行更新的,也就是說,一個分片并不能實時地了解另一個分片的內部狀態。當位于分片A的合約A'嘗試調用分片B上的合約B'時,并不能假設處理者擁有分片B的狀態,也因此,處理的結果必須等待分片B完成狀態更新后才能返回。由此,跨分片的交易必須忍受事務處理中最難以忍受的代價:時延。關鍵在于,此種時延是不能用貨幣代價來加以抽象的。因為分片B也并不知道分片A上發生了一筆需要調用自身的交易,因此只能等待一個可信的通信層為自己播報這條交易。

單位時間內能夠創造的價值越高,時延越不可忍受;而這意味著,假設有某個DeFi應用集中的分片,這些應用根本不會通過跨分片的交易來調度其它分片上的處理能力,因為這根本沒有意義,滿足不了DeFi應用對時延的要求。同樣,這也意味著,這個DeFi應用集聚的分片,其單分片處理能力就是其處理能力上限。在深山老林里造房子和修路,解決不了大都市里人們的生活空間問題。

無狀態性

無狀態性是唯一直面了狀態數據膨脹問題的升級方向?7。

在當前的以太坊協議中,交易自身并不攜帶自身所訪問的狀態的信息,正是因此,處理交易的節點才必須維護狀態數據,作為執行狀態轉換函數的前置條件。也正因此,狀態數據的膨脹才是一個問題。

而無狀態性的關鍵,正是讓交易/區塊自身附帶所訪問狀態的信息,因此,一個區塊僅憑自身就是可驗證的,無需處理交易的節點具有狀態。

實際上,無狀態性是通過改變以太坊區塊的結構,改變以太坊區塊的驗證方式。無需維護狀態數據,也就免去了讀寫硬盤的需要,區塊驗證的速度也可以更快。此外,各節點既可以完全不維護狀態數據,也可以根據自己的需要,維護某些合約的狀態數據。

但是,誠實地說,無狀態性目前還面臨許許多多的設計挑戰。具體來說:無狀態性要求為區塊/交易附加所訪問狀態的證明,這部分數據的規模可能非常大,以太坊當前的區塊數據大小大概是20~40KB,但witness數據的大小可能在MB級別;只有維護了所有狀態的節點才能組裝出witness,那么誰來為普通用戶提供狀態呢?;如何為交易的gas消耗量定價?尤其因為witness有時效性,并不能根據操作碼來確定組裝witness耗費了多少計算量。

正是因為這些困難,以太坊的全節點可能還必須在這種維護所有狀態的模式中運行很久。但是,無狀態性絕對是當前對以太坊協議的改進中,最激動人心的方向。因為它直面了以太坊的核心問題,并嘗試釜底抽薪地解決這個問題。另外,對狀態數據在以太坊協議中的使用的研究,也滋養著其他的研究方向,如同步方法?8。

我有偏見地相信,以太坊的未來即使不是無狀態性,也是得到無狀態性啟發的某種方案。

Rollup方案

Rollup方案是一種Layer-2方案,其特殊之處在于,它會將每一次狀態更新所用到的交易,都在以太坊區塊鏈上發布出來。

與其他Layer-2方案一樣,Rollup方案也把狀態存在鏈下,也不要求以太坊的節點來計算合約的新狀態;但是,把會更改這個合約狀態的交易,都作為數據發布出來,這意味著,任意第三方,都可以憑借這些公開的數據和公開的規則,計算出該合約的狀態。

前面說到,當Lyaer-2合約選擇了把狀態計算移到以太坊鏈外,并遮蔽了自己的合約狀態,它就給用戶引入了風險:用戶并不知道,Layer-2合約的運營者會不會把一個無效的狀態發到鏈上交由區塊鏈來敲定,如果運營者能夠這樣做,那就等于是能直接盜取用戶的資金;此外,用戶也不知道Layer-2合約的運營者會不是審查自己的交易,從而凍結自己的資金。

資金被盜問題有兩種解決思路,一是保證每一次狀態轉換都是有效的,也即是每一次要更新合約的狀態根時,都讓以太坊來執行一次對計算完整性的驗證程序,只有驗證通過了,才允許合約更新狀態根,這就是zk-rollup的思路;另一種思路是,要求人們在請求更新合約狀態根時,都附帶押金,如果所提交的狀態根是無效的,檢舉此狀態根的人可以獲得原提交者的押金,這就是optimistic-rollup。但后面這種思路有個前提條件:檢舉人必須有辦法獲得該次狀態轉換前的狀態,否則無以生成該次轉換的錯誤性證明。

資金被鎖問題的解決思路只有一種:盡可能弱化“運營者”的概念,使得誰都能向以太坊提交交易來更新該Layer-2合約的狀態。但這又回到了那個問題:如果提交者沒有該合約的狀態,怎么證明自己的狀態訪問的有效性,讓合約放行呢?

終于,Rollup方案用“在每一次狀態轉換時都發表匹配的交易數據”解決了這個問題。由此,Rollup合約雖然沒有把狀態公開在鏈上,但是任何人——也包括rollup合約的用戶——都能根據這些公開的交易包重建出一個rollup合約的內部狀態。這意味著,假使設計得當,rollup合約內的資金,與以太坊區塊鏈上保存了狀態的合約,可以是同樣安全的!

以zk-rollup為例,鏈上驗證程序保證了一個rollup合約不可能更新一個錯誤的狀態根,就像如果沒有你的允許,MakerDAO也不能沒收你的DAI;同時,假設它也公開了計算完整性的構造方法,則你隨時可以在鏈上直接向合約發起狀態轉換,來取出自己的錢。這就跟普通的、帶狀態的合約完全一樣了:如果沒有51%攻擊,就無法回滾rollup合約的狀態;如果沒有持續的51%攻擊,就無法阻止你取回自己的錢。

Optimistic-rollup依賴于一些密碼經濟學的假設,因此稍弱一些:除了51%攻擊回滾狀態以外,攻擊者還可以通過持續一段時間的51%審查攻擊來給合約注入錯誤狀態根;或者可以賭一把,賭所有計算出了該合約最新狀態的人都不會觀察到錯誤。但Optimistic-rollup同樣能提供很強的免托管性,你也能隨時取回自己的錢。

換言之,如果用戶愿意把錢存進一個有狀態的合約,那就沒有理由不愿意存進rollup合約。有了zk-rollup,layer-2方案已經能為用戶提供以太坊區塊鏈上合約所能提供的最大程度的資金安全了。顯然,也只有做到這份上,才有可能獲得大規模采用。

所有的Layer-2方案都可以視為一種趨向無狀態性的折衷:Layer-2方案本身是無狀態的,其內部狀態再復雜,都不會增加以太坊節點的負擔;同時,更新Layer-2合約時,以太坊扮演的角色更多是驗證,即驗證狀態根更新是有效的,而不是自己去計算出這個狀態根。但是,到了rollup時代,Layer-2方案才證明了自己可以和帶狀態的合約一樣安全,其承諾這才有可能化為現實。

四.結語

綜上,在本文中,我解釋了以太坊的“可組合性”的來源,以及各種受到熱議的可擴展性方案是否犧牲了這種可組合性,又換來了什么。讀者可能會注意到,我在推理和評價的時候,相當重視“我們已經實現了什么/得到了什么”“人們的行為表明他們需要什么”。不錯,我正是從這個角度出發,來解釋rollup方案的魅力的。在我看來,這樣一種思維傾向,能使我們的思考的起點更加可靠,免于臆測用戶的需要,亦免于投入建設空中樓閣。

在歷史的流轉中,我看到人們在可選的東西中選了某些東西,這就使我不得不認為,這些東西是重要的;而如果某些技術,既沒有增加人們可選的東西,又犧牲了人們實際上選擇了的東西,那就沒有理由對這些技術懷有信心。

Tags:以太坊ROLLLAYERROL以太坊幣美元最新行情走勢圖TROLLERlayer幣最新消息TROLLBNB幣

Luna
CYBER:CyberVein2020年度報告出爐 附2021年度超強計劃_CYB

從來沒有一個年份讓大家覺得如此感動;也從來沒有任何一個年份讓大家覺得如此惶恐;更沒有任何一個年份讓大家覺得是如此的震憾.

1900/1/1 0:00:00
NFT:EFFORCE項目代幣WOZX官方合作交易所導航_Micromines

HBTC: 交易地址:https://www.hbtc.co/exchange/WOZX/USDT客戶端下載:https://www.hbtc.

1900/1/1 0:00:00
AAVE:李幣勝:比特幣新年保持回探沖高順勢做多_BIT

比特幣,昨日連續跳水空頭虛張聲勢,隨著晚間歡聲雀躍的開始,多頭也是修復企穩上漲,今日早間幣價重新上沖刷新高,基本如預期一致,完美的修復型上漲趨勢,行情依舊還是那么簡單.

1900/1/1 0:00:00
比特幣:馬校長論幣:12.31晚間大餅行情解析_300

前言: 由于行情短時間內大漲大跌,所以點位具有時效性,況且策略發送有延遲,具體請以實時行情為準.

1900/1/1 0:00:00
比特幣:什么是比特幣、比特幣安全嗎?_LID

比特幣產生是礦工挖礦打包的獎勵,比特幣區塊鏈的每一個區塊的產生,記錄了4000條左右的交易信息,這些交易信息需要每一個礦工進行記錄和打包,最先完成記錄和打包的礦工就會獲得對應的比特幣獎勵.

1900/1/1 0:00:00
NGK:NGK狂撒數千萬SPC,你準備好了嗎?_BGV

最近幣圈熱鬧非凡,一邊是有人喊著數錢數到累,一邊是有人嘆息又錯過了一波紅利,這種戲劇性的色彩,在NGK市場中體現的淋漓盡致.

1900/1/1 0:00:00
ads