Solana 中的異步程序執行(APE)

作者:toly,Solana Labs 聯合創 來源:X,@aeyakovenko 翻譯:善歐巴,比特鏈視界

在Solana中,狀態組織為平坦的鍵值存儲,程序在此狀態上執行以更新值,包括用於共識的關鍵投票程序。異步執行的主要目的是允許投票程序獨立於其他所有程序運行。為了始終如一地實現這一目標,我們需要確保幾個關鍵原則。

執行域

執行域是一組程序及其操作的鍵和值,這些程序在執行時彼此獨立。執行域可以在不同的線程和核心上運行,並且在各種機器上以不同的時間完成。重要的是,一個執行域(例如,域A)不能讀取或寫入另一個域(例如,域B)中的任何值。然而,域可以共享在任何一個域執行期間保持一致的狀態。需要一個協議來同步域之間的狀態,並促進鍵和值的移動。

交易費用支付者決定交易執行的域。

關鍵域:VED和UED

在Solana中,我們主要關注兩個域:投票執行域(VED)和用戶執行域(UED)。目標是使驗證者能夠在所有用戶程序執行完成之前進行投票。

VED的組成部分

  • 系統程序 :用於轉帳

  • 投票程序系統變量 :用於投票的投票程序系統變量

  • 投票程序 :核心投票程序。該程序是靜態且一致的,必須在UED和VED中都有。

  • 投票權限 :有權投票的帳戶

  • 投票費用支付者 :支付與投票相關費用的帳戶

  • 費用支付者基金 :可用於將sol移動到VED的可更新帳戶

  • 所有其他帳戶放在UED中

計算VED狀態

在N-1和N的紀元邊界,運行時計算N+1域的VED狀態。此計算必須在紀元N結束前完成。UED計算必須在紀元N-1完成後才能開始。

VED狀態的標準

  • 投票帳戶 :質押超過5000 sol且處於活躍狀態的帳戶。

  • 費用支付者和投票權限,費用支付者基金 :與上述投票帳戶關聯。

  • 新創建的投票帳戶最初設置為不活躍。用戶必須激活這些帳戶,一旦激活,它們將在下次VED狀態計算中包含在內。用戶可以停用帳戶,該帳戶將在N+1紀元中從VED狀態中移除。

在VED中移動資金

投票帳戶中聲明的費用支付者資金帳戶可用於在VED中移動資金。更新投票帳戶中的費用支付者資金帳戶後,當前的費用支付者基金將在下一個紀元結束前保持活躍。一旦重新計算的VED激活,新的費用支付者基金將進入VED狀態,並可用於向費用支付者添加額外的sol。舊的費用支付者基金將進入UED狀態,因此可以將資金轉回UED中的帳戶。

雖然可以將其與費用支付者合併,但為了最小化每次投票使用的籤名數量,費用支付者通常設置為與投票權限相同的值,因此需要一個單獨的帳戶在VED和UED之間轉移sol。

通用執行域

上述方法非常針對投票程序。更進一步可以將該方法推廣到任意數量的執行域。帳戶跟蹤它們被映射到的執行域,就像作業系統管理程序跟蹤物理頁面中的VMID一樣。對於這個特定項目,有一小部分映射是有用的:

  • RX-UED :在UED中只讀和可執行

  • RX-UED-VED :在UED和VED中只讀和可執行

  • RW-VED :在VED中讀寫

  • RW-UED :在UED中讀寫

由於帳戶不能在多個域中同時讀寫,其他映射是無效的。

  • 程序 :只能映射為RX-UED或RX-UED-VED,即在用戶或兩個域中可讀和可執行,但不可寫。任何將程序包含為可寫的交易必須失敗。

  • 帳戶 :只能映射為RW-VED或RW-UED。

系統快照將投票程序和系統程序配置為RX-UED-VED。系統程序提供將系統帳戶和投票程序帳戶移動到VED和從VED移動的接口。實際更新仍需一個完整的紀元才能激活。

只有當所有者程序在目標域中時,帳戶才能在域之間重新映射。因此,只有投票程序和系統程序帳戶可以在VED和UED之間移動。

採用通用方法後,不再需要顯式的費用支付者資金帳戶。開發人員可以在VED和UED之間重新映射任何系統帳戶,從而在域之間移動資金。

計算VED哈希

在接收到區塊後,節點執行所有交易。過程如下:

  • 執行僅涉及VED帳戶的交易。

  • 含有VED費用支付者但混合帳戶的交易失敗。

  • 跳過所有其他交易。

生成的VED狀態更新用於計算銀行哈希,即VED哈希。驗證者現在可以使用VED哈希進行投票,而不是舊的銀行哈希。如果自上次對該分叉進行投票以來有UED哈希更新,則該哈希和插槽將包含在投票中。

計算UED哈希

在接收到區塊後,節點處理所有交易:

  • 不在VED中的帳戶被視為UED的一部分。

  • 執行僅涉及UED帳戶的交易。

  • 含有UED費用支付者但混合帳戶的交易失敗。

  • 跳過所有其他交易。

生成的UED狀態更新用於計算銀行哈希,即UED哈希。

最終性

最終性保持不變。

交易執行狀態代碼

異步執行的副作用是非確定性可能不會在投票分叉時同步立即檢測到。如果1/3或更多驗證者提交不同的UED哈希,則所有節點必須停止確認和投票,並警告操作員。

要獲得狀態代碼,RPC API請求必須允許用戶指定計算相同UED哈希的觀察到的質押。執行狀態可以表示為ExecutionStatus(籤名,質押=X),其中X可以為0或某個默認值。在具有多個節點和客戶端的設置中,X值為0是可以接受的,這給用戶帶來了非確定性極不可能的信心。

非確定性是唯一需要在向用戶返回已確認交易的狀態代碼之前檢測的故障,因此X的默認值通常可以低至樂觀確認閾值或約5%。

領導者和區塊生成

領導者必須能夠在VED完成後立即開始創建區塊。這意味著領導者將對任何UED費用支付者的狀態有部分和不完整的信息。

  • 領導者僅對其創建的區塊執行VED域

  • UED重放必須跳過無效的費用支付者

投票程序的功能激活

投票程序必須在假設VED投票可能在功能激活時跨越紀元邊界的情況下設計,以不同於UED中接觸投票程序的其他交易的時間操作。

獎勵

只有處於VED狀態的投票帳戶才應獲得獎勵。

懲罰

所有投票帳戶無論處於活躍狀態還是VED狀態,都有被懲罰的風險。

全局時鐘更新

時鐘系統變量由投票更新。應該使用替代方法。相反,每個區塊領導者可以將時鐘最多向前移動1秒。至少40%的網絡需要惡意,時鐘才能比實際時間更快地增長。時鐘也可以默認向前移動400毫秒。假設50毫秒的漂移,只有12.5%的領導者需要調整時鐘時間以保持同步。

  • Related Posts

    行情剛好一點 WLFI就要解鎖了

    Jessy,比特鏈視界 據World Liberty Fin…

    從股票代幣化到Layer 2 Robinhood系列新品速覽

    撰文:AIMan@比特鏈視界 2025年6月30日,Robi…

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    You Missed

    比特幣再次站上11萬 牛回?

    • By jakiro
    • 4 7 月, 2025
    • 8 views
    比特幣再次站上11萬 牛回?

    華爾街的質押熱潮

    • By jakiro
    • 3 7 月, 2025
    • 10 views
    華爾街的質押熱潮

    解構以太坊 Fusaka 升級:12個EIP背後的擴容進化論

    • By jakiro
    • 3 7 月, 2025
    • 9 views
    解構以太坊 Fusaka 升級:12個EIP背後的擴容進化論

    行情剛好一點 WLFI就要解鎖了

    • By jakiro
    • 3 7 月, 2025
    • 8 views
    行情剛好一點  WLFI就要解鎖了

    AI「下沉」是 Web3 的機遇嗎?

    • By jakiro
    • 2 7 月, 2025
    • 15 views
    AI「下沉」是 Web3 的機遇嗎?

    Grayscale:穩定幣Summer

    • By jakiro
    • 2 7 月, 2025
    • 16 views
    Grayscale:穩定幣Summer
    Home
    News
    School
    Search