
ERC 草案:跨鏈事件歸檔標準
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)
sourceChainId 是 CAIP-2 鏈識別碼字串的 keccak256 哈希值。這允許在不維護數字註冊表的情況下進行通用鏈識別,同時保持鏈上索引和過濾的高效性。
常用數值:
| 區塊鏈 | CAIP-2 | sourceChainId |
|---|---|---|
| Ethereum 主網 | eip155:1 | keccak256("eip155:1") |
| Base | eip155:8453 | keccak256("eip155:8453") |
| Arbitrum One | eip155:42161 | keccak256("eip155:42161") |
| Stellar 公網 | stellar:pubnet | keccak256("stellar:pubnet") |
| Solana 主網 | solana:mainnet | keccak256("solana:mainnet") |
索引欄位 (Indexed Fields)
這三個索引欄位支援最常見的索引器查詢模式:
| 欄位 | 用途 |
|---|---|
| sourceChainId | 過濾所有源自特定鏈的歸檔事件 |
| sourceTxHash | 查詢特定交易是否已被歸檔 |
| sourceAddress | 過濾來自特定來源合約的所有歸檔事件 |
來源地址 (Source Address)
sourceAddress 以 bytes32 編碼。對於 EVM 鏈,20 位元組的地址會補零至 32 位元組。對於非 EVM 鏈,則直接使用原生地址格式,或根據該鏈的慣例編碼為 32 位元組數值。
來源區塊編號 (Source Block Number)
sourceBlockNumber 代表事件在來源鏈歷史中的位置。其語義取決於來源鏈:
| 鏈類型 | sourceBlockNumber 的意義 |
|---|---|
| EVM | 區塊編號 (Block number) |
| Stellar | 帳本序列 (Ledger sequence) |
| Solana | 插槽 (Slot) |
有效載荷 (Payload)
payload 包含以 來源鏈原生編碼 封裝的原始事件數據。其格式完全由 sourceChainId 決定:
| 鏈類型 | Payload 編碼方式 |
|---|---|
| EVM | ABI 編碼的日誌 (topics + data) |
| Stellar | XDR 編碼的合約事件 |
| Solana | Borsh 編碼的程式日誌或 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)
相關文章
其他收藏 · 0
收藏夾