# Ключевые концепции

Основная терминология и концепции для построения на Rome Protocol.

## Понятия Solana

**Программа** — Эквивалент смарт-контракта в Solana. Программы — это безсостоянийные исполняемые файлы, развернутые в сети. Rome EVM сам по себе является программой Solana.

**Аккаунт** — Всё состояние в Solana хранится в аккаунтах. У каждого аккаунта есть владелец (программа), баланс (лампорты) и данные. В отличие от Ethereum, код и состояние хранятся в отдельных аккаунтах.

**PDA (адрес, выведенный программой)** — Детерминированный адрес, полученный из seed-значений и идентификатора программы. PDA позволяют программам «владеть» аккаунтами без закрытого ключа. Rome использует PDA для сопоставления адресов Ethereum с аккаунтами Solana.

**CPI (вызов между программами)** — Когда одна программа Solana вызывает другую в рамках одной и той же транзакции. Именно так контракты Rome EVM взаимодействуют с Jupiter, Kamino, SPL Token и другими программами Solana.

**Токен SPL** — Стандартная токен-программа Solana. Эквивалент ERC-20 в Ethereum. Все взаимозаменяемые токены в Solana (USDC, SOL и т. д.) являются токенами SPL.

**Token-2022** — Токен-программа SPL нового поколения с расширениями, такими как Transfer Hooks, Confidential Transfers и Permanent Delegates.

**Transfer Hook** — Расширение Token-2022, которое вызывает программу при каждом переводе токена. Rome позволяет смарт-контрактам EVM выступать в роли transfer hook.

**ATA (ассоциированный токен-аккаунт)** — Детерминированный токен-аккаунт для пары кошелёк + mint. У каждого пользователя есть один ATA на каждый удерживаемый им токен.

**Лампорты** — Наименьшая единица SOL. 1 SOL = 1 000 000 000 лампортов (10^9).

**Единицы вычисления (CU)** — Эквивалент Ethereum gas в Solana. У каждой транзакции есть бюджет вычислений (по умолчанию около 200 тыс. CU, максимум около 1,4 млн CU). Операции потребляют CU.

## Понятия Rome

**Программа Rome EVM** — Программа Solana, содержащая интерпретатор байткода EVM. Развёртывается с конкретным идентификатором программы для каждой среды.

**ID сети** — Каждому приложению в Rome назначается собственный EVM chain ID. Это создаёт изолированные EVM-среды, использующие одно и то же базовое состояние Solana.

**Атомарное выполнение (VmAt)** — Транзакция EVM, выполняемая полностью в рамках одной транзакции Solana. Используется для большинства операций.

**Итеративное выполнение (VmIt)** — Транзакция EVM, разбитая на несколько транзакций Solana, выполняющая примерно 500 опкодов за шаг. Используется для ресурсоёмких операций, таких как BN254 pairing.

**Аккаунт держателя** — Буфер в сети, который хранит крупные транзакции EVM (до 80 КБ), превышающие ограничение Solana в 1 232 байта на размер транзакции. Управляется SDK прозрачно.

**StateHolder** — Аккаунт в сети, который хранит сериализованное состояние VM между итеративными шагами выполнения.

**Rome Proxy** — JSON-RPC сервер (порт 9090), который преобразует вызовы Ethereum API в транзакции Solana. Ваш MetaMask и Hardhat подключаются здесь.

**Hercules** — Индексатор блоков, который отслеживает события Rome EVM в Solana и формирует данные блоков, совместимые с Ethereum.

**Rhea** — Шлюз mempool, который пересылает транзакции из OP-Geth в Solana (используется только в режиме OP-Geth).

**Плательщик** — Пара ключей Solana, которая подписывает и оплачивает транзакции Solana от имени пользователей EVM. Управляется Proxy через пулы плательщиков.

## Понятия токенов

**ERC20SPL** — Контракт-обёртка ERC-20, представляющая токен SPL внутри Rome EVM. Обёртка читает балансы напрямую из базового аккаунта токена SPL — без отдельного состояния.

**ERC20SPLFactory** — Контракт-фабрика, который развёртывает обёртки ERC20SPL для любого токена SPL при первом мостовом переводе.

**Единый реестр канонических токенов** — Сопоставляет каждый актив с одним каноническим mint SPL, чтобы предотвратить фрагментацию представлений (например, USDC всегда сопоставляется с нативным mint SPL от Circle).

## Пре-компиляции

**Стандартные Ethereum-прекомпиляции** — ecrecover (0x01), SHA-256 (0x02), RIPEMD-160 (0x03), identity (0x04), BN254 ecAdd/ecMul/ecPairing (0x06-0x08), Blake2f (0x09).

**Пре-компиляция System Program** (`0xFF...07`— получение PDA, преобразование base58, создание аккаунтов из Solidity.

**Пре-компиляция CPI** (`0xFF...08`— Межпрограммный вызов из Solidity. Вызывайте любую программу Solana с `invoke()` или `invoke_signed()`.

**Пре-компиляция Withdraw** (`0x42...16`— Вывод SOL или токенов SPL из EVM обратно в Solana.

## Типы транзакций

**RheaTx** — Одна транзакция EVM в одном роллапе. Наиболее распространённый тип.

**RemusTx** — Несколько транзакций EVM в разных роллапах, выполняемых атомарно. Если какая-либо транзакция не удаётся, откатываются все.

**RomulusTx** — Комбинированные транзакции EVM + нативные инструкции Solana в одной атомарной операции. Самый мощный тип — сочетание Solidity и Solana в одной транзакции.

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

**Режим Single-State** — Пользователи подключаются напрямую к Rome Proxy. Более простая настройка, меньшая задержка. Блоки EVM формируются Hercules и хранятся в PostgreSQL.

**Режим OP-Geth** — Пользователи подключаются к OP-Geth для полной совместимости с Ethereum RPC. Rhea мостит mempool в Solana. Hercules передаёт блоки в OP-Geth через Engine API.

## Что дальше

* [Модель исполнения](/ru/osnovnye-koncepcii/execution-model.md) — подробный разбор того, как транзакции EVM выполняются в Solana
* [Взаимодействие токенов](/ru/osnovnye-koncepcii/token-interop.md) — как взаимодействуют токены ERC-20 и SPL
* [Ограничения](/ru/osnovnye-koncepcii/constraints.md) — важные ограничения и границы


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rome.builders/ru/nachalo-raboty/key-concepts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
