作者:0xmiddle

可以把 AO 理解為無限分片,無限擴(kuò)容的網(wǎng)絡(luò)。每個 Process 都是一個分片。
AO 不是傳統(tǒng)意義上的區(qū)塊鏈。它反常規(guī)、反常識的設(shè)計,容易讓剛剛了解 AO 的研究者在某些關(guān)節(jié)陷入困惑,尤其是研究者試圖用傳統(tǒng)區(qū)塊鏈的架構(gòu)框定 AO 時:
1. 非 PoS, 非 PoW,AO 所說的“全息共識”究竟是什么樣的共識機(jī)制呢?
2. 沒有哈希鏈,甚至沒有區(qū)塊,AO 是如何保證數(shù)據(jù)不可變?
3. 沒有一個協(xié)調(diào)中樞, AO 如何保證全局狀態(tài)的一致性?
4. 沒有冗余計算機(jī)制,誰來保證計算的可靠性?計算出錯怎么辦?
5. 沒有共享安全性,如何保證 Process 之間的互操作性?
我將通過 3個視角,用區(qū)塊鏈中大家已經(jīng)熟悉的概念,幫助大家從已知穿越到未知,把未知變成已知,在感性層面理解 AO。
分片視角
經(jīng)過以太坊2.0 、波卡、Near 等公鏈的教育,大家應(yīng)該對”分片“不陌生。
分片的概念:在區(qū)塊鏈中,分片是一種提高網(wǎng)絡(luò)擴(kuò)展性的解決方案,通過將網(wǎng)絡(luò)拆分成多個分片,每個分片獨(dú)立驗證和處理交易,并生成自己的區(qū)塊,從而提升整體網(wǎng)絡(luò)效率。分片內(nèi)可以實現(xiàn)同步互操作,分片之間則通過一定的通信協(xié)議實現(xiàn)異步互操作。
Polkadot 是最典型的分片架構(gòu)。在 Polkadot 中,每個平行鏈都是一個分片,平行鏈獨(dú)立收集打包自己的區(qū)塊鏈,并由中繼鏈隨機(jī)分配一個驗證者小組來驗證。平行鏈之間統(tǒng)一的 XCM 消息格式來進(jìn)行通信,實現(xiàn)互操作。
AO 的極致分片
用分片的視角來看,AO 可以理解為一種極致的“分片”:每個 Process 都是一個分片。想象一下,如果以太坊的每個智能合約都運(yùn)行在一個單獨(dú)的分片上會是什么樣呢?沒錯,這就是 AO。每個 Process 都是獨(dú)立的,Process 之間的調(diào)用則依靠消息驅(qū)動,以完全異步的方式進(jìn)行。
模塊化視角
但我們發(fā)現(xiàn)一個關(guān)鍵,在 Polkadot 的設(shè)計中,存在一個“中繼鏈”,在 ETH2.0 中也有“信標(biāo)鏈”,他們的作用是作為統(tǒng)一的共識層,提供共享安全性。統(tǒng)一共識層要負(fù)責(zé)對所有分片以及分片之間的消息傳遞提供直接或者間接的驗證服務(wù)。而 AO 似乎沒有這個組件,那么 AO 的共識層是如何設(shè)計的呢?
AO 的共識層實際上是 Arweave。以模塊化的視角理解,AO 可以理解為是 Arweave 的 L2,以 Arweave 為 L1 的 Rollup,AO 網(wǎng)絡(luò)運(yùn)行過程中所產(chǎn)生的所有消息的日志都會被上傳到 Arweave 永久存儲,也就是說,在 Arweave 上有一份 AO 網(wǎng)路運(yùn)行的不可變的記錄。那么你可能會問,Arweave 是去中心化存儲平臺,并不具備太多計算能力。Arweave 是如何驗證 AO 網(wǎng)絡(luò)上傳上來的數(shù)據(jù)呢?
答案是:Arweave 并不驗證,AO 網(wǎng)絡(luò)自身會有樂觀仲裁機(jī)制。Arweave 對于 AO 網(wǎng)絡(luò)上傳上來的消息數(shù)據(jù)來者不拒,每條消息都會攜帶它的發(fā)出者 process id,及運(yùn)行它的 CU(計算單元) 的簽名,也會帶有為它排序的 SU(排序單元) 的簽名。當(dāng)發(fā)生爭議時,可以依賴 Arweave 上不可變的消息記錄,引入更多的節(jié)點(diǎn)進(jìn)行重新運(yùn)算,以創(chuàng)建正確的分叉,舍棄原有的錯誤分叉,并在正確的分叉中罰沒出錯 CU 或 SU 的押金。這里需要注意,MU 僅負(fù)責(zé)收集 Process 的待發(fā)消息,傳遞給 SU,是無信任的,不需要押金,也不涉及罰沒。
AO 非常像是以 Arweave 為 L1 的 Optimistic Rollup,只是驗證挑戰(zhàn)過程并不在 L1 上發(fā)生,而是在 AO 網(wǎng)絡(luò)自身當(dāng)中發(fā)生。
不過這里還是有個問題,不可能每一筆消息都等待 Arweave 上收錄之后,才去確認(rèn),實際上 Arweave 的最終確定性形成時間要超過半個小時。所以 AO 自己會有一個軟共識層,就像以太坊的 Rollups 自己有軟共識層,大多數(shù)交易不會等待 L1 確認(rèn),就會上賬。
AO 中的 Process 實際上是自主決定驗證強(qiáng)度的。
作為消息接收方的 Process 要決定是否要等 Arweave 確認(rèn)后再處理該消息,還是在軟共識層確認(rèn)后即處理該消息,即便在軟共識層確認(rèn)環(huán)節(jié),Process 也可以采取彈性的策略,可以是單個 CU 確認(rèn)后即處理,也可以由多個 CU 冗余確認(rèn),并進(jìn)行交叉驗證后再處理,冗余度也是由 Process 決定。
在實際應(yīng)用中,驗證強(qiáng)度往往與交易的金額有關(guān),例如
小額交易,采用快速驗證策略,單點(diǎn)確認(rèn)后即處理
中等額度交易,根據(jù)具體額度,采取不同冗余度的多點(diǎn)確認(rèn)后處理的策略
大額交易,則采取謹(jǐn)慎驗證策略,在 Arweave 網(wǎng)絡(luò)確認(rèn)后再處理
這就是 AO 所說的“全息共識”+“彈性驗證”的模式,通過將 “可驗證性”和“驗證”行為本身解耦,AO 對共識問題采取了完全不同于傳統(tǒng)區(qū)塊鏈做法,消息驗證的責(zé)任也不在網(wǎng)絡(luò)本身,而在 接收方 Process 本身,或者說在應(yīng)用程序開發(fā)者。
正是因為采取了這樣的共識模型,AO 才有可能采取“極致分片”的無樞紐、無限擴(kuò)展模型。
當(dāng)然,彈性驗證導(dǎo)致了不同的 Process 的驗證強(qiáng)度不同,在復(fù)雜的互操作中,可能導(dǎo)致信任鏈斷裂,一個較長的調(diào)用鏈中的個別環(huán)節(jié)失敗,會導(dǎo)致整體交易的失敗或者錯誤,事實上,在 AO 測試網(wǎng)階段,這樣的問題已經(jīng)有所暴露。我認(rèn)為,AO 應(yīng)該會為所有驗證任務(wù)設(shè)定一個最低驗證強(qiáng)度的標(biāo)準(zhǔn),讓我們拭目以待 AO 即將到來的正式網(wǎng)會有什么樣的新設(shè)計。
資源視角
在傳統(tǒng)區(qū)塊鏈系統(tǒng)中,資源被抽象為“區(qū)塊空間”,區(qū)塊空間可以被理解為節(jié)點(diǎn)提供的存儲、計算和傳輸資源的集合,并通過鏈上區(qū)塊有機(jī)結(jié)合,為鏈上應(yīng)用提供運(yùn)行的載體。區(qū)塊空間是一種有限的資源,在傳統(tǒng)區(qū)塊鏈中,不同的應(yīng)用程序需要爭奪區(qū)塊空間,并為其付費(fèi),而節(jié)點(diǎn)則通過這種付費(fèi)來盈利。
AO 中沒有區(qū)塊的概念,也自然沒有“區(qū)塊空間”的概念。但和其他鏈上的智能合約一樣,AO 上的 每個 Process 在運(yùn)行時,也需要消耗資源,它需要節(jié)點(diǎn)來臨時存儲交易和狀態(tài)數(shù)據(jù),也需要節(jié)點(diǎn)消耗計算資源,為其執(zhí)行計算任務(wù),其發(fā)出的消息,需要 MU 和 SU 傳輸?shù)侥繕?biāo) Process 那里。
在 AO 中,節(jié)點(diǎn)分為三類,CU(計算單元)、MU(消息單元)、SU(排序單元),其中 CU 是承載計算任務(wù)的核心。MU 和 SU 則承載通信任務(wù)。當(dāng)一個 process 需要和其他 process 交互時,會生成一條消息,存儲在出站隊列,運(yùn)行該 process 的 CU 會簽名該消息,MU 從出站隊列出提取該消息,并提交給 SU,SU 給消息賦予一個唯一的序號,并上傳到 Arweave 永久存儲。然后 MU 再將消息傳遞到目標(biāo) process 的入站隊列,消息投遞完成。可以把 MU 理解為消息的收集者和投遞者,SU 理解為消息的排序者、上傳者。
至于存儲資源,AO 網(wǎng)絡(luò)中的 MU 只需存儲計算所需的臨時數(shù)據(jù),在計算完成后即可丟棄。負(fù)責(zé)永久存儲的是 Arweave,Arweave 雖然不能水平擴(kuò)展,但其存儲性能的天花板極高,AO 網(wǎng)絡(luò)的存儲需求,在可預(yù)見的未來,還無法觸及 Arweave 的天花板。
我們發(fā)現(xiàn) AO 網(wǎng)絡(luò)中的計算資源、傳輸資源、存儲資源都是解耦的,除了 Arweave 提供的統(tǒng)一存儲資源外,計算資源和傳輸資源都可以各自水平擴(kuò)展,沒有任何限制。
越多的、越高性能的 CU 節(jié)點(diǎn)加入網(wǎng)絡(luò),網(wǎng)絡(luò)就會擁有更高的算力,就可以支撐更多的 Process 運(yùn)行;同樣,越多的,越高性能的 MU、SU 節(jié)點(diǎn)加入網(wǎng)絡(luò),網(wǎng)絡(luò)的傳輸效率就越快。也就是說,AO 中的“區(qū)塊空間”可以不斷被創(chuàng)造。對于應(yīng)用程序而言,既可以購買開放市場中的公共的 CU 、MU、SU 節(jié)點(diǎn)服務(wù),也完全可以自己運(yùn)行私有節(jié)點(diǎn)來為自己的應(yīng)用程序服務(wù)。如果應(yīng)用程序的業(yè)務(wù)擴(kuò)張,則完全可以通過擴(kuò)容自己的節(jié)點(diǎn)來提升性能,正如 Web2 應(yīng)用所做的那樣。這在傳統(tǒng)區(qū)塊鏈上是無法想象的。
在資源的定價層面,AO 可以通過供需來靈活調(diào)節(jié),因而使得資源的供給可以根據(jù)需求伸縮。這種調(diào)節(jié)會非常靈敏,節(jié)點(diǎn)的加入和退出可以非常快的進(jìn)行。我們再回頭看以太坊,則會發(fā)現(xiàn),當(dāng)資源需求急劇上升時,大家除了忍受高昂的 Gas 費(fèi)之外,別無他法,因為以太坊無法通過擴(kuò)充節(jié)點(diǎn)數(shù)來提高其性能。
總結(jié)
以上,我們通過大多數(shù)加密研究者熟知的概念入手,例如“分片”、“模塊化”、“Rollup”、“區(qū)塊空間”等,切入到 AO 的原理和機(jī)制中,幫助大家理解了 AO 是如何通過顛覆式的創(chuàng)新,做到幾乎無限擴(kuò)容的。
現(xiàn)在回過頭來看開頭的幾個問題,你是否已了然呢?
1. 非 PoS, 非 PoW,AO 所說的“全息共識”究竟是什么樣的共識機(jī)制呢?
AO 的共識機(jī)制,實際上是一種接近 Op Rollup 的設(shè)計。在硬共識層面依賴 Arweave,在軟共識層面,每個 Process 可以自主決定驗證強(qiáng)度,自主決定由多少個 CU 節(jié)點(diǎn)進(jìn)行冗余計算。
2. 沒有哈希鏈,甚至沒有區(qū)塊,AO 如何保證數(shù)據(jù)不可變?
上傳到在 Arweave 上的 DA 數(shù)據(jù)是不可變的,為 AO 上的所有計算和傳輸過程提供可驗證性。AO 本身沒有必要限定單位時間內(nèi)的處理容量,因此不需要設(shè)定區(qū)塊。“哈希鏈”和“區(qū)塊”,這些用來保證數(shù)據(jù)不可變的結(jié)構(gòu),Arweave 鏈?zhǔn)怯械摹?/p>
3. 沒有一個協(xié)調(diào)中樞, AO 如何保證全局狀態(tài)的一致性?
每個 Process 都是一個獨(dú)立“分片”,獨(dú)立管理其交易和狀態(tài),Process 通過消息驅(qū)動的方式來交互。因此并不需要全局狀態(tài)的一致性。Arweave 的永久存儲提供了全局可驗證性和歷史回溯能力,結(jié)合樂觀挑戰(zhàn)機(jī)制,可用于爭議解決。
4. 沒有冗余計算機(jī)制,誰來保證計算的可靠性?計算出錯怎么辦?
AO 沒有全局強(qiáng)制的冗余計算機(jī)制,每個 Process 可以自行決定如何驗證發(fā)來的每個 message 的可靠性。如果計算出錯,可以通過樂觀挑戰(zhàn)的形式發(fā)現(xiàn)和糾正。
5. 沒有共享安全性,如何保證 Process 之間的互操作性?
Process 需要自行管理每個與之互操作的 Process 的授信,可對不同安全級別的 Process 采用不同級別的驗證強(qiáng)度。對于調(diào)用鏈比較復(fù)雜的互操作,為了避免信任鏈斷裂帶來的較高的糾錯成本,AO 可能會有一個最低限度的驗證強(qiáng)度要求。