Архитектура

Rome Protocol встраивает интерпретатор байткода EVM внутрь on-chain программы Solana. На этой странице объясняется, как компоненты взаимодействуют друг с другом.

Обзор системы

┌─────────────────────────────────────────────────────────────────┐
│                        Уровень пользователя                    │
│   MetaMask / ethers.js / Hardhat / Foundry                      │
│   (стандартный Ethereum 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 Token  │ Jupiter   │ Kamino    │ Meteora   │  ...     │
   │   └───────────┴───────────┴───────────┴───────────┘          │
   └──────────────────────────────────────────────────────────────┘

                      │ Индексирует события
               ┌──────┴──────┐
               │  Hercules   │  (блок-индексатор → Engine API → OP-Geth)
               └─────────────┘

Компоненты

Программа Rome EVM (On-Chain)

Основа Rome — программа Solana BPF, содержащая полноценный интерпретатор байткода EVM (форк SputnikVM). Она:

  • Получает сериализованные EVM-транзакции из инструкций Solana

  • Выполняет байткод Solidity в среде выполнения Solana

  • Сопоставляет Ethereum-адреса (H160) с Solana PDA

  • Предоставляет интерфейсы прекомпайлов для CPI, SPL Token, System Program

  • Управляет состоянием EVM (хранилище контрактов, балансы, nonce) как данными аккаунтов Solana

Rome Proxy (сервер JSON-RPC)

Стандартный сервер Ethereum JSON-RPC на порту 9090, который преобразует вызовы Ethereum API в транзакции Solana:

  • eth_sendRawTransaction → сериализовать EVM-транзакцию → отправить инструкцию Solana

  • eth_call → эмулировать выполнение EVM вне цепочки (через эмулятор Mollusk SVM)

  • eth_estimateGas → симулировать выполнение для оценки газа

  • eth_getBalance, eth_getCode, и т. д. → читать из данных аккаунта Solana

Расширения Rome: rome_emulateTx, rome_emulateRegRollup, rome_mintId, rome_buildInfo, rome_getResources.

OP-Geth (опциональный уровень EVM RPC)

Модифицированный клиент Go-Ethereum, предоставляющий полную совместимость с Ethereum RPC. В режиме op-geth:

  1. Пользователи отправляют транзакции в OP-Geth (:8545)

  2. Rhea ретранслирует транзакции в Rome Proxy → Solana

  3. Hercules индексирует события Solana и передает блоки EVM в OP-Geth через Engine API (:8551)

В режиме single-state пользователи подключаются напрямую к Rome Proxy (:9090), полностью минуя OP-Geth.

Hercules (индексатор)

Отслеживает программу Rome EVM в Solana и формирует данные блоков, совместимые с EVM:

  • Отслеживает события программы Rome в Solana

  • Восстанавливает блоки EVM с квитанциями транзакций, логами и изменениями состояния

  • Передает блоки в OP-Geth через Engine API для стандартной совместимости с блок-эксплорерами

  • Поддерживается PostgreSQL

Rhea (мост мемпула)

Связывает мемпул OP-Geth с Solana:

  • Читает ожидающие транзакции из мемпула OP-Geth

  • Обертывает их как инструкции Solana, нацеленные на программу Rome EVM

  • Отправляет в Solana для выполнения

Режимы выполнения

Rome поддерживает два режима выполнения для EVM-транзакций:

Атомарное выполнение (VmAt)

Одна транзакция Solana. Вся EVM-транзакция выполняется в рамках вычислительного бюджета одной транзакции Solana (~1,4 млн CU). Используется для большинства операций — переводов, простых вызовов контрактов, свопов.

Итеративное выполнение (VmIt)

Для вычислительно интенсивных операций, превышающих бюджет одной транзакции. Выполнение EVM разбивается на несколько транзакций Solana:

  1. Каждый шаг выполняет ~500 опкодов EVM

  2. Состояние VM сериализуется в Borsh в StateHolder аккаунт между шагами

  3. Аккаунты блокируются по TTL на 3–4 секунды во время выполнения

  4. Используется для тяжелых операций, таких как pairings BN254 (верификация ZK-доказательств)

Сопоставление аккаунтов

Каждый Ethereum-адрес (20 байт) сопоставляется с Solana PDA (32 байта), производным от программы Rome EVM:

Этот PDA владеет следующими данными аккаунта:

  • ETH/токен баланс (как SPL token accounts)

  • Байткод контракта (хранится в данных аккаунта Solana)

  • Слоты хранилища контракта (хранятся в данных аккаунта Solana)

  • Nonce

Аккаунты-держатели

Транзакции Solana ограничены 1 232 байтами. EVM-транзакции (особенно развертывание контрактов) могут быть значительно больше. Rome решает это с помощью holding accounts:

  1. Крупные EVM-транзакции разбиваются на части

  2. Части последовательно размещаются в holding account (макс. 80 КБ)

  3. После записи всех частей полная транзакция собирается и выполняется

  4. Это прозрачно управляется Rome SDK

Газ и ценообразование

Каждое приложение (chain ID) в Rome имеет собственный газовый токен — любой SPL-токен. Ценообразование газа использует пулы Meteora DAMM V1 для конвертации между газовым токеном и SOL для базовых комиссий транзакций Solana.

Режимы развертывания

Режим
Поток данных
Сценарий использования

Режим OP-Geth

Пользователи → OP-Geth → Rhea → Proxy → Solana; Hercules индексирует обратно

Полная совместимость с Ethereum RPC

Режим single-state

Пользователи → Proxy → Solana напрямую

Более простое развертывание, меньшая задержка

Что дальше

Последнее обновление

Это было полезно?