ERC 草案:跨鏈事件歸檔標準

ERC 草案:跨鏈事件歸檔標準

Ethereum Magicians·

AI 生成摘要

我起草了一份 ERC 提案,旨在定義一個標準介面,將任何區塊鏈的事件歸檔至相容 EVM 的鏈上,為跨鏈事件歷史提供一個通用的封裝方式。

嘿,我一直在研究跨區塊鏈遷移和備份。我發現目前缺少一個通用的組件,來指定一種將事件從一個區塊鏈歸檔到另一個區塊鏈的通用方式。我認為這非常適合成為一個新的 ERC。

我起草了一份 ERC 提案,希望能聽聽社群的見解。感謝您的幫助!

ERC PR:尚未完成

ERC-XXXX: 跨鏈事件歸檔 (Cross-Chain Event Archive)

摘要 (Abstract)

本 ERC 定義了一個標準介面,用於將事件從任何區塊鏈(EVM 或非 EVM)歸檔到相容 EVM 的鏈上,使索引器(indexers)/ 鏈外應用程式能夠透過一致且極簡的封裝來讀取跨鏈事件歷史。

動機 (Motivation)

隨著區塊鏈生態系統碎片化為多個 L2、側鏈和非 EVM 鏈,協議越來越需要跨鏈存取歷史事件數據。例如,現實世界資產 (RWA) 協議必須在發行或交易其資產的每一條鏈上,維持一份完整且可審計的所有鏈上事件歷史——包括代幣轉帳、合規證明、資產淨值 (NAV) 更新等。

目前,還沒有將事件從來源鏈歸檔到目標鏈的標準方法。本標準定義了一個極簡且通用的封裝,其特點如下:

保留原始事件的完整來源資訊

支援 EVM 和非 EVM 來源鏈

讀取時無需了解來源鏈的 ABI

規範 (Specification)

事件 (Event)

interface IEventArchive {
    /// @notice 當來自來源鏈的事件被歸檔時觸發
    /// @param sourceChainId    CAIP-2 鏈識別碼字串的 keccak256 哈希值 (例如 keccak256("eip155:1"))
    /// @param sourceTxHash     觸發該事件的來源鏈交易哈希
    /// @param sourceAddress    觸發該事件的來源鏈合約地址,補零至 bytes32
    /// @param sourceLogIndex   該事件在來源交易中的日誌索引 (log index)
    /// @param sourceBlockNumber 來源鏈上的區塊編號、帳本序列、插槽 (slot) 或等效數值
    /// @param payload          以來源鏈原生編碼格式呈現的原始事件數據
    event EventArchived(
        bytes32 indexed sourceChainId,
        bytes32 indexed sourceTxHash,
        bytes32 indexed sourceAddress,
        uint256 sourceLogIndex,
        uint256 sourceBlockNumber,
        bytes payload
    );

    /// @notice 歸檔來自來源鏈的事件
    function archiveEvent(
        bytes32 sourceChainId,
        bytes32 sourceTxHash,
        bytes32 sourceAddress,
        uint256 sourceLogIndex,
        uint256 sourceBlockNumber,
        bytes calldata payload
    ) external;
}

事件 ID (Event ID)

歸檔事件的規範唯一識別碼為以下元組:

eventId = (sourceChainId, sourceTxHash, sourceLogIndex)

此元組在所有鏈上都是全域唯一的。實作方式「必須不得」(MUST NOT) 二次歸檔相同的 eventId

鏈識別 (Chain Identification)

sourceChainIdCAIP-2 鏈識別碼字串的 keccak256 哈希值。這允許在不維護數字註冊表的情況下進行通用鏈識別,同時保持鏈上索引和過濾的高效性。

常用數值:

區塊鏈CAIP-2sourceChainId
Ethereum 主網eip155:1keccak256("eip155:1")
Baseeip155:8453keccak256("eip155:8453")
Arbitrum Oneeip155:42161keccak256("eip155:42161")
Stellar 公網stellar:pubnetkeccak256("stellar:pubnet")
Solana 主網solana:mainnetkeccak256("solana:mainnet")

索引欄位 (Indexed Fields)

這三個索引欄位支援最常見的索引器查詢模式:

欄位用途
sourceChainId過濾所有源自特定鏈的歸檔事件
sourceTxHash查詢特定交易是否已被歸檔
sourceAddress過濾來自特定來源合約的所有歸檔事件

來源地址 (Source Address)

sourceAddressbytes32 編碼。對於 EVM 鏈,20 位元組的地址會補零至 32 位元組。對於非 EVM 鏈,則直接使用原生地址格式,或根據該鏈的慣例編碼為 32 位元組數值。

來源區塊編號 (Source Block Number)

sourceBlockNumber 代表事件在來源鏈歷史中的位置。其語義取決於來源鏈:

鏈類型sourceBlockNumber 的意義
EVM區塊編號 (Block number)
Stellar帳本序列 (Ledger sequence)
Solana插槽 (Slot)

有效載荷 (Payload)

payload 包含以 來源鏈原生編碼 封裝的原始事件數據。其格式完全由 sourceChainId 決定:

鏈類型Payload 編碼方式
EVMABI 編碼的日誌 (topics + data)
StellarXDR 編碼的合約事件
SolanaBorsh 編碼的程式日誌或 CPI 事件

本標準不規定 payload 的解碼方式——這是索引器的責任,索引器應根據 sourceChainId 導出相應的解碼器。

安全考量 (Security Considerations)

實作方式「必須」(MUST) 說明其信任假設。當信任至關重要時,索引器「應該」(SHOULD) 針對來源鏈驗證歸檔事件。

實作方式「必須」(MUST) 強制執行 (sourceChainId, sourceTxHash, sourceLogIndex) 的唯一性,以防止重複歸檔。

        1 則貼文 - 1 位參與者

        [閱讀完整主題](https://ethereum-magicians.org/t/draft-erc-cross-chain-event-archive/28271)

Ethereum Magicians

相關文章

其他收藏 · 0

收藏夾