For the complete documentation index, see llms.txt. This page is also available as Markdown.

架构

Rome 协议在 Solana 链上程序内部嵌入了一个 EVM 字节码解释器。本页将说明各组件如何协同工作。

系统概览

┌─────────────────────────────────────────────────────────────────┐
│                        用户层                                  │
│   MetaMask / ethers.js / Hardhat / Foundry                      │
│   (标准以太坊 JSON-RPC)                                       │
└──────────────────────┬──────────────────────────────────────────┘

            ┌──────────┴──────────┐
            ▼                     ▼
   ┌────────────────┐    ┌────────────────┐
   │  Rome Proxy    │    │   OP-Geth      │
   │  (:9090)       │    │   (:8545)      │
   │  JSON-RPC      │    │   EVM RPC      │
   └───────┬────────┘    └───────┬────────┘
           │                     │
           │              ┌──────┴──────┐
           │              │    Rhea     │  (将 geth 交易转发到 Solana)
           │              └──────┬──────┘
           │                     │
           └──────────┬──────────┘

   ┌──────────────────────────────────────────────────────────────┐
   │                    Solana 运行时                             │
   │                                                              │
   │   ┌──────────────────────────────────────────────────┐       │
   │   │              Rome EVM 程序                       │       │
   │   │                                                   │       │
   │   │   EVM 字节码解释器(SputnikVM 分支)              │       │
   │   │   账户映射:H160 → Solana PDA                    │       │
   │   │   预编译:ecrecover、BN254、SPL、CPI 等           │       │
   │   └───────────────────────┬───────────────────────────┘       │
   │                           │ CPI                               │
   │   ┌───────────┬───────────┼───────────┬───────────┐          │
   │   │SPL 代币   │ Jupiter   │ Kamino    │ Meteora   │  ...     │
   │   └───────────┴───────────┴───────────┴───────────┘          │
   └──────────────────────────────────────────────────────────────┘

                      │ 索引事件
               ┌──────┴──────┐
               │  Hercules   │  (区块索引器 → Engine API → OP-Geth)
               └─────────────┘

组件

Rome EVM 程序(链上)

Rome 的核心——一个 Solana BPF 程序,内含完整的 EVM 字节码解释器(SputnikVM 分支)。它:

  • 从 Solana 指令接收序列化的 EVM 交易

  • 在 Solana 运行时中执行 Solidity 字节码

  • 将以太坊地址(H160)映射到 Solana PDA

  • 为 CPI、SPL Token、System Program 提供预编译接口

  • 将 EVM 状态(合约存储、余额、nonce)作为 Solana 账户数据进行管理

Rome Proxy(JSON-RPC 服务器)

运行在 9090 端口的标准以太坊 JSON-RPC 服务器,将以太坊 API 调用转换为 Solana 交易:

  • eth_sendRawTransaction → 序列化 EVM 交易 → 提交 Solana 指令

  • eth_call → 在链下模拟 EVM 执行(通过 Mollusk SVM 模拟器)

  • eth_estimateGas → 模拟执行以进行 Gas 估算

  • eth_getBalance, eth_getCode等 → 从 Solana 账户数据读取

Rome 扩展: rome_emulateTx, rome_emulateRegRollup, rome_mintId, rome_buildInfo, rome_getResources.

OP-Geth(可选 EVM RPC 层)

一个经过修改的 Go-Ethereum 客户端,提供完整的以太坊 RPC 兼容性。在 op-geth 模式下:

  1. 用户将交易发送到 OP-Geth(:8545)

  2. Rhea 将交易转发到 Rome Proxy → Solana

  3. Hercules 索引 Solana 事件,并通过 Engine API(:8551)向 OP-Geth 提供 EVM 区块

在单状态模式下,用户直接连接到 Rome Proxy(:9090),完全绕过 OP-Geth。

Hercules(索引器)

监控 Solana 上的 Rome EVM 程序,并生成兼容 EVM 的区块数据:

  • 监听 Solana 上的 Rome 程序事件

  • 重建包含交易回执、日志和状态变更的 EVM 区块

  • 通过 Engine API 将区块提供给 OP-Geth,以兼容标准区块浏览器

  • 由 PostgreSQL 提供支持

Rhea(内存池桥接)

将 OP-Geth 内存池与 Solana 连接起来:

  • 从 OP-Geth 的内存池读取待处理交易

  • 将其封装为指向 Rome EVM 程序的 Solana 指令

  • 提交到 Solana 执行

执行模式

Rome 为 EVM 交易支持两种执行模式:

原子执行(VmAt)

单个 Solana 交易。整个 EVM 交易在一次 Solana 交易的计算预算内执行(约 140 万计算单元)。用于大多数操作——转账、简单合约调用、兑换。

迭代执行(VmIt)

适用于超出单笔交易预算的计算密集型操作。EVM 执行会拆分为多个 Solana 交易:

  1. 每一步执行约 500 条 EVM 操作码

  2. VM 状态以 Borsh 序列化到一个 StateHolder 账户中,供步骤之间使用

  3. 执行期间,账户会被 TTL 锁定 3–4 秒

  4. 用于如 BN254 pairing(ZK 证明验证)这类高负载操作

账户映射

每个以太坊地址(20 字节)都会映射到一个由 Rome EVM 程序派生的 Solana PDA(32 字节):

该 PDA 拥有该账户的:

  • ETH/代币余额(作为 SPL 代币账户)

  • 合约字节码(存储在 Solana 账户数据中)

  • 合约存储槽(存储在 Solana 账户数据中)

  • Nonce

Holder 账户

Solana 交易限制为 1,232 字节。EVM 交易(尤其是合约部署)可能大得多。Rome 通过以下方式处理: holder accounts:

  1. 大型 EVM 交易会被拆分为多个分片

  2. 分片会按顺序阶段性写入 holder account(最大 80 KB)

  3. 当所有分片写入完成后,完整交易会被组装并执行

  4. 这一过程由 Rome SDK 透明管理

Gas 与定价

Rome 上的每个应用(链 ID)都有自己的 Gas 代币——任意 SPL 代币。Gas 定价使用 Meteora DAMM V1 池在 Gas 代币与 SOL 之间转换,以支付底层 Solana 交易费用。

部署模式

模式
数据流
使用场景

OP-Geth 模式

用户 → OP-Geth → Rhea → Proxy → Solana;Hercules 回写索引

完整的以太坊 RPC 兼容性

单状态模式

用户 → 直接连接 Proxy → Solana

部署更简单,延迟更低

下一步

最后更新于

这有帮助吗?