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