來源:PermaDAO
這是一篇關於技術的零碎文字,甚至不能成爲一篇文章。隨意的聊一聊 AO。
全球共享硬盤
20 年 7 月初次了解到 Arweave,第二周我們就在咖啡廳討論了去信任化計算的可能性。設想:Arweave 是圖靈機的紙帶,無處不在的狀態機是用戶手中的客戶端,用戶的操作系統和所有運行的程序都會從 Arweave 上下載。全球無處不在的計算單元,他們共享一個巨大的區塊鏈硬盤。運行在這套體系下的所有的應用都可以獲得共識和去信任化。
討論的結論是這個目標很難實現,顯然微軟和蘋果等巨頭不可能將操作系統和應用程序放到 Arweave 上。
如今 AO 實現了這一切。最初和 Sam 設計 MSG Protocol(AO 原型)時,我認爲這是一個區塊鏈上的 kafka。然而,重點不是爲應用提供去中心化消息隊列,而是將 C/S 架構中的 http 通訊替換爲去信任化的 msg 通訊。如果用戶的 request 和服務器的 response 都使用了 AO。那我們將在 AO 上重新創造一個真正的去中心化互聯網生態,一如 20 年 7 月的設想。
AO 具備將整個互聯網搬到 Arweave 上的巨大潛力。Arweave 這座亞歷山大的圖書館不再局限於存儲,它不僅記錄了過去。使用 AO 我們可以記錄今天的故事,使用去中心化的方式分配未來的價值。
爭議
最近關於 AO 出現爭議點,主要是兩個問題:
1. AO 是如何實現可驗證性的?
首先,AO 是不解決可驗證性問題。可驗證性來自 Arweave 的不可變存儲。Arweave 存儲了 AO 每一個 Process 的全息數據(包括 AO 本身的全息數據)。任何人可以通過全息數據恢復 AO 和 AO 上的任何一個线程。這由數學進行保證,具備可驗證性!這是基於存儲的共識範式,我們常提的 SCP 理論。
重點:我們知道 UTXO 的交易是驗證後上鏈,但是 SCP 範式下不管是好的壞的數據都上鏈 AR,這就和 BTC 的 UTXO 出現了非常大的差異化。但是重復上鏈、雙花上鏈就不具備可驗證性嗎?SCP 程序只需要把全息交易全部跑一遍就可以驗證了!如果是重復的交易會被 SCP 程序拋棄。
可驗證,強調的是“可”,無需強調快速驗證,輕節點驗證等等。如果把可驗證和快速驗證、輕節點驗證混淆。此時就無法討論 AO 了。
2. SCP 應用有可驗證特性,那么 AO 是如何解決可以驗證問題的?需要用戶跑全節點?
當第一個問題得到一定的解答後,提問者會思考用戶必須計算全账本,這個太難了。這裏和 BTC/ETH 的默克爾樹要解決的問題相違背,在 BTC/ETH 的思路下默克爾是驗證的核心,默克爾的 root 通過 PoW 上鏈,所以才可以驗證。現在你竟然告訴我 AO 沒有默克爾樹?所以結論就是 AO 根本不能驗證,沒有共識,是騙局!於是回到了問題 1。一般提問者會在這兩個問題上循環提問,就不會去思考 AO 的設計架構和原理了。
重點:AO 不解決可驗證問題,AR 和 AO 的職能是完全拆分开的!AR 做不可變存儲,保證安全性和可驗證性,這裏有默克爾,也有共識,共識的是數據順序,而不是數據計算的狀態。AO 只做計算,對 AR 上具備順序的數據進行計算並生成狀態,AO 無法更改 AR 的數據順序,即 AO 無法更改共識。通過 PoW/PoS 對計算出的狀態進行驗證,這是鏈上計算範式,和 SCP 截然不同。
AO 的功能是對不可變數據進行計算,並展示這些計算的狀態。可驗證性問題由 SCP 保障,所以不需要默克爾樹,也不需要 PoW/PoS,此時提問者再次回到了問題 1,無法繼續思考。如果看到這裏你還能思考,那么請看 AO 的實踐:
AO 通過 SCP 實現了一個可驗證的 Token,用該 Token 的經濟模型促使大家提供正確的數據展示(有點像 Chainlink 預言機)。記住 AO 主要做狀態呈現,可驗證性不是 AO 的職能。該 Token 經濟模型是:在不呈現正確狀態時進行罰沒(slash),在提供正確狀態時進行激勵(mint)。
關鍵點
AO 又不產生共識,如何進行 slash 和 mint 動作?很簡單,AO 是一個 SCP 應用,此時查詢狀態和返回狀態兩個事件都上鏈到 Arweave,AO SCP 程序會加載到這兩個事件(查詢和返回),通過對這兩個事件計算出 mint 和 slash 的結果。
這部分直接看代碼更容易理解:
https://github.com/outprog/slash-demo/blob/main/vm/vm_test.go
結論
用戶不需要跑一個應用的全節點,會有服務商去跑 CU(計算單元)。用戶向 AO 提出一個查詢請求,該請求通過 SU(調度單元)分配到特定的 CU。計算單元按照用戶的請求計算狀態,該狀態由計算節點籤名(也上鏈),反饋到用戶用。用戶如果不信任單個 CU,可以向更多的 CU 發起請求,獲得更多可信狀態。每個 CU 返回的狀態都由 CU 節點進行籤署(可驗證)。如果 CU 提供了錯誤狀態,CU 的質押將被罰沒。
具體的實踐查看 Sam 的 X:
https://twitter.com/samecwilliams/status/1764023657058148718 。
沒有預言機?都是預言機!
當數據需要和區塊鏈需要交互時,我們需要預言機,將“神諭”附加到鏈上。區塊鏈需要的預言機,是由一群用戶進行多重籤名產生的神諭;人類需要的預言機神諭,來自區塊鏈算法產生的共識,但是當人去閱讀這個共識時,往往需要第三方傳諭,這個第三方一般叫做 infura.io 。我們一般會信賴 infura 的傳諭,那么這個傳諭保真嗎?(這瓜保熟嗎?)
infura.io:https://www.infura.io/
需要注意:
BTC/ETH 的信任僅僅局限於鏈上環境內部,對於鏈外環境很難提供去信任化能力。即,用戶請求 BTC/ETH 節點,僅能通過 http 協議獲得狀態,用戶無法判斷請求的節點是否可信,狀態是否正確。如果要進行狀態驗證,用戶必須運行輕節點或者全節點。
在 AO/SCP 網絡中,用戶的請求需要籤名,節點返回的狀態也需要籤名,所有記錄都存儲在 Arweave 上形成“全息數據”,保證可驗證性。用戶無需運行任何節點也可以獲得可信狀態。在 AO/SCP 模式下,網絡的所有信息都是上鏈的,甚至包括了查詢和返回這些請求信息(http 請求不上鏈)。AO 解決了去信任化最後一公裏的問題。
在工程實踐上,AO/SCP 打破了鏈上/鏈下的概念,將可信計算和預言機二者整合成了一個統一的系統。該系統具備去中心化的特性,打破了 Web2 和 Web3 的邊界。AO/SCP 和鏈上計算是兩個完全截然不同的範式。或可把這套系統看成一個完全由預言機組成的全球計算機,預言機呈現的神諭則是不可篡改的客觀事實。
彈性驗證
不知從什么時候起,共識成爲了一個二元問題。要么有共識要么沒有共識。就沒有一種中間的共識?
這種認知體現在區塊鏈行業中。要么是個神,要么是個渣。一如宗教信仰,非此即彼,水火不容。
但是 AO 提供了完全不同的共識架構—— 由 Arweave 永存和 SCP 範式提供堅實的共識基礎,也就是我們反復提及的「可驗證性」,但應用方花多少代價去驗證這個共識則是彈性的。
事情的起因是 X 上一直有人陷入上文所說的兩類爭議中。在一番口水战後終於問到兩個 AO 线程之間如何驗證 msg。所有的 msg 都有籤名這裏就不再贅述。但是 Process 怎么知道收到的 msg 是可以信任的?下面是模擬了兩個信任模式用於解釋這個問題。
有計算單元 CU1,其中運行了 P1 和 P2 兩個進程,表示爲 CU1(P1, P2)。
現在有:CU1(P1, P2) & CU2(P3, P4) & CU3(P1) & CU4(P1) 。
計算目標:CU2 中的 P3 請求 P1 提供可信的計算信息。
單信任模式
1. P3 中的代碼向 P1 發出計算請求。
2. SU 調度器將 P3 的請求分派給 CU4(P1) 進行計算。
3. CU4(P1) 響應計算結果,返回 P3。
此時 P3 完全信任 CU4 中的 P1 計算結果,並繼續進行運算。
多信任模式
1. P3 中的代碼向 P1 發出計算請求,同時 P3 要求 SU 分配多個計算單元。
2. SU 將 P3 的請求分配給 CU1(P1),CU3(P1), CU4(P1)。
3. CU1(P1),CU3(P1), CU4(P1) 響應計算結果。
此時 P3 收到了多個結果,P3 可以對這些結果先進行比較,通過比較判斷是否可信。例如 P3 要求所有節點返回的內容完全相等。或者,P3 要求 2/3 的結果完全相等。
信任模式只是 AO 上的一種开發模式,开發者可以根據信任的需求开發判斷規則。P3 的程序甚至可以要求 100 個 CU 進行計算,並要求 100 個 CU 計算結果完全一致。這完全取決於开發者如何實現 P3 中的代碼。
因此,你可以自己決定你需要的信任模式和驗證支出。但是,記住,最終的共識安全仍然是由 Arweave 永存與 SCP 保障的!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。