Архитектура
Как компоненты Rome взаимодействуют между собой — выполнение EVM внутри программы Solana.
Rome встраивает интерпретатор байткода EVM в on-chain-программу Solana. Пользователи взаимодействуют с Rome Proxy через стандартный Ethereum JSON-RPC, а прокси напрямую отправляет их транзакции в программу Rome EVM в Solana. Отдельного уровня исполнения, который нужно синхронизировать, нет — состояние EVM является состоянием Solana.
Обзор системы
Компоненты
Программа Rome EVM (on-chain)
Ядро Rome — программа Solana BPF, содержащая полный интерпретатор байткода EVM (форк SputnikVM). Она:
Получает сериализованные EVM-транзакции в виде инструкций Solana
Выполняет байткод Solidity в среде выполнения Solana
Сопоставляет каждый адрес Ethereum (H160) с PDA Solana
Предоставляет предкомпиляции для вызова Solana (CPI, System, Helper, Withdraw) наряду со стандартными Ethereum предкомпиляциями
Хранит состояние EVM (балансы, nonce, код, хранилище) как данные аккаунтов Solana
Rome Proxy (JSON-RPC-сервер)
Стандартный Ethereum JSON-RPC-сервер на порту 9090 — точка входа для публичных сетей. Он преобразует вызовы Ethereum API в действия Solana:
eth_sendRawTransaction→ сериализовать EVM-транзакцию → отправить инструкцию Solanaeth_call→ эмулировать выполнение вне цепочки с помощью эмулятора Mollusk SVMeth_estimateGas→ симулировать для оценки газаeth_getBalance,eth_getCode,eth_getBlockByNumber, квитанции, логи → предоставляются из индексированного состояния
Он также предоставляет расширения Rome: rome_emulateTx, rome_emulateRegRollup, rome_mintId, rome_buildInfo, rome_getResources, и многое другое.
Hercules (индексатор)
Отслеживает программу Rome EVM в Solana и воссоздаёт Ethereum-совместимые блоки — транзакции, квитанции, логи и изменения состояния — с опорой на PostgreSQL. В публичных сетях работает в режиме выравнивания по слотам, поэтому номер блока сопоставляется со слотом Solana, а один и тот же слот даёт один и тот же блок на любом индексаторе. Прокси предоставляет эти блоки кошелькам и обозревателям.
Предкомпиляции
Rome реализует стандартные Ethereum предкомпиляции (ecrecover, SHA-256, RIPEMD-160, identity, modexp, операции кривой BN254, blake2f) с семантикой, эквивалентной mainnet, а также не-EVM предкомпиляции, обращающиеся в Solana: CpiProgram (0xFF…08, произвольный CPI), System (0xFF…07, вычисление PDA и вспомогательные функции base58), HelperProgram (0xFF…09, создание ATA/PDA, переводы SPL, газ↔lamports), и Withdraw (0x42…16). См. Адреса контрактов для полной таблицы.
Режимы исполнения
Rome выполняет EVM-транзакцию одним из двух способов:
Атомарный (VmAt)
Одна транзакция Solana. Вся EVM-транзакция выполняется в пределах вычислительного бюджета одной транзакции Solana (~1,4 млн вычислительных единиц). Используется для большинства операций — переводов, обычных вызовов контрактов, свопов.
Итеративный (VmIt)
Для задач, превышающих бюджет одной транзакции. Выполнение разбивается на несколько транзакций Solana:
Каждый шаг (транзакция Solana) выполняет столько EVM-операций, сколько помещается в её вычислительный бюджет, — размер шага адаптивный, а не фиксированный
Состояние VM сериализуется в Borsh в
StateHolderаккаунт между шагамиАккаунты блокируются по TTL на несколько секунд во время выполнения
Используется для ресурсоёмких операций, таких как pairing на BN254
Сопоставление аккаунтов
Каждый адрес Ethereum детерминированно сопоставляется с PDA Solana, полученным из идентификатора сети и адреса в рамках программы Rome EVM. Этот PDA владеет балансом аккаунта (в виде SPL token accounts), кодом контракта, слотами хранилища и nonce — всё это хранится как данные аккаунта Solana.
Аккаунты-держатели
Транзакции Solana ограничены 1 232 байтами, но EVM-транзакции (особенно развёртывания контрактов) могут быть значительно больше. Rome помещает крупные транзакции в аккаунты-держатели: транзакция разбивается на фрагменты, которые последовательно записываются в holder (до 80 КБ), затем собираются и выполняются on-chain. SDK Rome делает это прозрачно.
Газ и ценообразование
У каждой сети есть собственный газовый токен — любой SPL-токен. Для ценообразования газа читается пул Meteora DAMM (v1 или v2, настраиваемо), чтобы конвертировать газовый токен и SOL для базовых комиссий транзакций Solana.
Что дальше
Сети — подключитесь к Martius или Hadrian
Быстрый старт — разверните свой первый контракт
Модель выполнения — подробнее об атомарном и итеративном выполнении
Последнее обновление
Это было полезно?