根據廣譜的定義,EVM 智能合約是由事件驅動的、具有狀態的、部署於可共享的分散式資料庫上的電腦程式。這種設計原本旨在確保去中心化和安全性,每個節點都必須執行智能合約的所有操作,而每個合約的狀態變化都需要即時記錄並持久存儲在區塊鏈中,而EVM 智能合約的每次交易都可能更改區塊鏈的狀態,然而,隨著鏈上狀態的複雜性增加,各個節點管理和同步這些狀態變得越來越困難,尤其是當多個智能合約需要頻繁更新時,狀態鎖衝突(Lock Conflict)和狀態同步的風險更加突出。

在這種背景下,日誌驅動的智慧合約成為了突破傳統架構限制的全新範式。透過將合約狀態儲存從鏈上解耦,並將其隱含在不可篡改的訊息日誌中,這種架構不僅提升了擴展性,還極大減少了全節點運算的負擔。 AO 全像態正是這項新範式的典型代表,它利用Arweave 的永久儲存和分散式運算,開創了一種更透明、可擴展的智慧合約執行方式。

什麼是日誌驅動的智能合約?

日誌驅動的智能合約不同於傳統的智能合約,傳統的智能合約是由狀態驅動,直接存儲當前系統的最新狀態,而不保留所有變化過程的歷史記錄;而日誌驅動的智能合約並不實時存儲合約的當前狀態,而是透過記錄使用者的互動日誌(或交易事件日誌)來驅動狀態的動態計算。這意味著,智能合約的每一次互動(例如交易、狀態更新等)都會產生一個不可篡改的日誌,而這些日誌會被永久保存在一個永久儲存層中。當需要查詢目前狀態時,任何節點只需透過這些日誌重新計算目前的合約狀態。

  • 互動日誌:每次智慧合約的操作或交易都會產生一條日誌,這些日誌記錄了合約的狀態變化,類似於事件驅動程式設計中的事件觸發。
  • 動態狀態重建:合約的當前狀態並不是直接儲存的,而是透過讀取所有相關日誌並進行計算而得到的。任何時候都可以透過讀取日誌重構智能合約的狀態。
  • 不可篡改的儲存層:日誌通常儲存在Arweave 這種專門用於長期儲存的不可篡改儲存層,確保了所有的日誌記錄是永久且無法篡改。

以太坊擴容方案Optimistic Rollup的驗證機制也有點類似於這種日誌驅動的智能合約架構,Rollup 子鏈會生成交易batch 然後並提交到以太坊主鏈,但它不存儲完整的合約狀態,而是通過“狀態根」和「交易日誌」來驅動狀態的重構和驗證。而主鏈上只有子鏈提交的簡易交易證明,然後透過7 天挑戰的解決機制去驗證狀態。任何人(只是理論上,目前只能是OP 驗證白名單才能)都可以透過提交的交易日誌重新計算出狀態,並提出爭議。

AO 歷史狀態變更日誌—— 全像狀態

全像狀態(holographic state)是AO 的一項關鍵創新,它為去中心化計算提供了無限的可擴展性,AO 不是就計算本身的狀態達成共識,而是確保交互日誌存儲在Arweave 上,從而創建狀態的「全息圖」。

重塑智慧合約範式:深度解析日誌驅動的合約架構

在傳統架構中,每個節點都需要儲存完整的合約狀態,並且隨著時間推移,狀態儲存的需求不斷增加。為了克服這些瓶頸,AO 全息態架構應運而生:AO 全像態以獨特的日誌驅動方式來記錄合約的每一次狀態變更,保證了狀態的一致性與完整性,同時簡化了複雜交互場景下的處理邏輯。進程的狀態主要隱含在Arweave 上儲存的交互日誌,任何參與者都可以確定性地計算它。這種方法確保進程的狀態雖然無法直接監測,但可以獨立驗證並且在整個網路中保持一致。同時利用Arweave 的不可變儲存功能來確保可擴展性並減少運算開銷,強調了AO 對增強去中心化運算的承諾。

而這也恰恰體現了全像狀態的「無限可擴展性」:僅記錄合約歷史狀態變更日誌,而狀態是按需重建的,節點不需要不斷地進行即時計算,從而減少了計算資源的消耗。

日誌驅動vs. 狀態驅動

注意:此章介紹一種全新的合約方案並闡述客觀事實,不存在方案孰優孰劣的傾向!

資料日誌儲存區別

以太坊就不會儲存合約的歷史狀態變更日誌嗎?以太坊確實也儲存合約的歷史狀態變更日誌,但它的處理方式與AO 全像態架構有顯著差異。

以太坊節點保留整個網路的當前狀態樹(MPT 樹,Merkle Patricia Tree),每當新的交易被打包進區塊並執行,狀態樹會立即更新以反映最新的狀態,每個全節點都需要存儲並維護這棵狀態樹。狀態樹會記錄帳戶的狀態更新(如餘額、nonce、智慧合約的儲存變更等),並將這些更新寫入區塊的狀態根(State Root)。日誌只是一種附加訊息,儲存在交易收據中,它不會影響或記錄狀態樹的任何部分。

雖然以太坊確實記錄了每筆交易和相關的事件日誌,但這些數據與合約的具體狀態變化不同。日誌的設計初衷是用於事件監聽和查詢功能。以太坊的日誌通常記錄的是事件數據,而不是狀態數據。在智能合約中可透過emit關鍵字產生事件,而這些事件僅記錄交易執行過程中的一些重要訊息,以便於外部應用程式查詢。而這些事件並不會包含有關合約儲存變數或合約狀態的詳細變化,所以以太坊的日誌無法像AO 全像態那樣用於重建合約狀態。

為了重建合約狀態,必須依賴所有歷史交易的重播和狀態樹的重建。故AO 全像態會比以太坊的日誌儲存更多的信息,所以本質上是一種透過犧牲硬碟儲存來降低記憶體和即時計算負擔的策略。以太坊的資料儲存成本過大,即使EIP-4844 引入了「blobs」臨時資料類型,讓Rollup 以更低的成本提交更多資料到以太坊主鏈。但blobs 資料在共識層節點儲存約18 天後刪除,不符合日誌永久儲存永久可回溯的理念,所以短期內不適用於以太坊,也許升級分片(Sharding)後採用此種範式,而對於其他公鏈或許可以繼承Arweave 這種存儲鏈實現更加廉價且容易擴展的硬碟存儲,內存和計算資源也得到釋放。

狀態膨脹和容錯問題

以太坊的設計導致了狀態膨脹的問題隱患。由於每個全節點需要即時維護所有合約和帳戶的最新狀態,狀態數據不像區塊數據,日誌數據是靜態的,永久保存後並不需要頻繁讀寫;但狀態數據每多一個區塊就要讀寫許多次,隨著狀態資料量的增大,讀寫的負擔也會越來越重。

相較於以太坊直接儲存完整的狀態樹,全息態透過日誌的方式減少了對全域狀態的依賴。透過將狀態儲存從即時記憶體轉移到硬碟上,節點不需要即時更新和維護全域狀態,而是可以按需重建狀態,將狀態的更新分解為離散的日誌記錄

這個設計理念帶來了幾個顯著的優勢:首先,日誌驅動模型減少了狀態衝突和競態條件的發生,因為所有操作都是基於日誌的順序執行,可確保狀態變更的一致性和可驗證性。其次,日誌驅動的智能合約天然支持狀態回溯,AO 全像態能夠以較低的開銷實現狀態重建,使得智能合約具備更高的容錯性和透明度。

非同步區塊鏈DeFi 難題

不得不說的是,目前從實際應用角度來看,尤其在DeFi 領域,雖然AO 此類的非同步區塊鏈在可擴展性方面具有理論上的優勢,但在非同步區塊鏈上保持以太坊那樣的組合性依舊具有挑戰,因為需要協調多個actor 在特定時間點達成一致狀態,這要求精確協調所有交易的順序和依賴關係,如果某個交易在網路的某個節點上被延遲處理,可能導致整體交易邏輯出錯或狀態不一致。非同步環境中高併發的DeFi 交易又非常容易產生雙花問題(double spending)或狀態錯亂等問題,實際上對生態DeFi 應用的安全性和可靠性構成了威脅。

日誌驅動的智慧合約在一定程度上可以緩解這些問題,透過日誌驅動的架構,交易的執行可以在多個節點上非同步處理,同時透過日誌系統記錄每筆交易的變更,這樣即使交易的執行順序在不同節點上存在差異,最終系統可以透過回溯日誌重構正確的狀態。另一大優勢在於失敗復原。透過日誌驅動,系統可以記錄每一步交易的詳細信息,如果某個交易失敗,可以依賴日誌來回滾到先前的正確狀態,或進行非同步補償。這種機制對DeFi 系統的高容錯性非常重要,尤其是在高並發交易的環境中,日誌驅動的設計可以讓部分交易在失敗後不影響全局的穩定性,而是透過日誌追蹤來確保最終一致性。除此之外,在供應鏈管理場景中,透過日誌驅動的智慧合約可實現全流程商品追溯與驗證:每個商品在生產、運輸、倉儲等各個環節的狀態變化都通過日誌記錄,可以清晰展示產品的整個生命週期。

結語

在當今快速發展的區塊鏈技術領域,日誌驅動的智慧合約架構為解決傳統架構中的狀態管理和擴展性問題提供了全新的視野。透過將狀態儲存從鏈上解耦,並將合約的狀態變更記錄在不可篡改的交互日誌中,AO 全像態架構不僅降低了運算資源的消耗,還大幅提升了系統的可擴展性。

日誌驅動的智慧合約的核心在於其透過日誌驅動的方式確保了狀態的動態運算與重建,從而減少了對全局狀態的即時維護需求。這種設計允許節點按需重建合約狀態,避免了因狀態膨脹而引發的儲存和運算負擔問題。同時,合約本身會根據日誌順序執行,也有效減少了狀態衝突和競態條件,增強了合約執行的一致性和透明度。

隨著區塊鏈應用的日益複雜,日誌驅動智慧合約將成為未來去中心化運算的重要趨勢,為開發者提供了一種在非同步區塊鏈有望解決可組合性挑戰的新思路。