Fraxtal Merkle 证明预言机

Fraxtal Merkle 预言机(Fraxtal-MOs)是一类预言机,利用 eth_getProof RPC 方法在以太坊 L2(如 Fraxtal)上证明 L1 状态。

概览

Fraxtal-MOs 利用四个关键合约来验证和传输状态。

FraxchainL1Block

预部署合约,用作 L2 上 L1 区块哈希的注册表。

StateRootOracle

合约用于验证给定的区块头与通过 FraxchainL1Block 合约中继的 L1 区块哈希。该合约负责存储状态根哈希以及 L1 时间戳。

MerkleProofPriceSource

合约执行状态根验证。根据通过 eth_getProof RPC 方法离线构建的默克尔证明,该合约将验证并提取“证明”的存储槽值到 L2 区块链。这些“证明”的值随后被传递给预言机本身。

传递这些“证明”值的过程是无信任的,任何人都可以提交与给定以太坊 L1 地址的预先批准的槽对应的有效默克尔证明。

FraxtalERC4626TransportOracle

合约接受来自 MerkleProofPriceSoure 合约的“证明” L1 数据。

对于 sFrax 和其他 ERC4626 保险库,这些“证明”的值定义了 L1 上保险库代币价值累积函数的当前斜率。

这些预言机公开以下函数,以允许用户查询相关资产的价格:

    /// @dev Adheres to chainlink's AggregatorV3Interface `latestRoundData()`
    /// @return _roundId The l1Block corresponding to the last time the oracle was proofed
    /// @return _answer The price of Sfrax in frax
    /// @return _startedAt The L1 timestamp corresponding to most recent proof
    /// @return _updatedAt Equivalent to `_startedAt`
    /// @return _answeredInRound Equivalent to `_roundId`
    function latestRoundData()
        external
        view
    returns (
        uint80 _roundId, 
        int256 _answer, 
        uint256 _startedAt, 
        uint256 _updatedAt, 
        uint80 _answeredInRound
    )

架构

将 L1 数据传输/证明到 L2 的过程:

步骤 1: 在 L2 上证明 L1 的区块头。

Screenshot 2024-09-23 at 11.04.48 AM

步骤 2: 提交预定义 L1 地址和存储槽的存储证明。

Screenshot 2024-09-23 at 11.05.00 AM

演示客户端

以下代码应作为生成上述 Fraxtal 智能合约接受的函数参数的示例。 有关 RPC 方法的文档:eth_getBlockByNumbereth_getProof生成 L1 区块头的代码。

生成 L1 区块头的代码

生成存储证明的代码

已部署的合约

Last updated

Was this helpful?