> For the complete documentation index, see [llms.txt](https://docs.rome.builders/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rome.builders/ru/spravochnik/json-rpc.md).

# Поддержка JSON-RPC

Методы Ethereum JSON-RPC, поддерживаемые конечными точками Rome EVM, а также особенности Rome — для Foundry, Hardhat, ethers, viem и MetaMask.

Конечные точки Rome EVM используют стандартный Ethereum JSON-RPC. Foundry, Hardhat, ethers, viem и MetaMask работают с Rome так же, как и с любой EVM-сетью. На этой странице перечислены поддерживаемые возможности и несколько особенностей Rome, о которых стоит знать.

## Поддерживаемые методы

**Ядро (состояние и исполнение):** `eth_chainId`, `eth_blockNumber`, `eth_getBalance`, `eth_getCode`, `eth_getStorageAt`, `eth_getTransactionCount`, `eth_call`, `eth_estimateGas`, `eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`.

**Блоки и транзакции:** `eth_getBlockByNumber`, `eth_getBlockByHash`, `eth_getBlockReceipts`, `eth_getTransactionByHash`, `eth_getTransactionReceipt`, `eth_sendRawTransaction`, варианты по индексу/счётчику блока.

**Журналы и фильтры:** `eth_getLogs`, `eth_newFilter`, `eth_newBlockFilter`, `eth_getFilterChanges`, `eth_getFilterLogs`, `eth_uninstallFilter`.

**Подписки WebSocket:** `eth_subscribe` / `eth_unsubscribe` (`newHeads`, `logs`). См. [Подписки WebSocket](/ru/rukovodstva-dlya-razrabotchikov/websocket-subscriptions.md).

**Net / web3:** `net_version`, `net_listening`, `net_peerCount`, `web3_clientVersion`.

**Небольшие методы для интроспекции:** `rpc_modules` (перечисляет `debug`, `eth`, `net`, `rome`, `rpc`, `txpool`, `web3`), `eth_syncing` (всегда `false`), `eth_accounts` (всегда пустой список), `eth_getUncleCountByBlockNumber`, `eth_getUncleCountByBlockHash`, `eth_getUncleByBlockNumberAndIndex` и `eth_getUncleByBlockHashAndIndex` (дядек нет, поэтому счётчики равны `0x0` а поиск возвращает `null`), `eth_newPendingTransactionFilter` (принимается, но никогда не возвращает хэши, поскольку публичного мемпула нет), и `txpool_status`, который всегда возвращает `{"pending":"0x0","queued":"0x0"}` поскольку публичного мемпула нет.

**Трассировка:** `debug_traceRomeTransaction` принимает хэш транзакции и возвращает разбивку по каждому под-вызову и каждому CPI для транзакции, которая объединяет несколько вызовов в один пакет. Обычные транзакции возвращают `null`, как и хэш, который неизвестен или ещё не проиндексирован.

### Не поддерживается

`debug_traceTransaction` / `trace_*` (трассировка транзакций в стиле Ethereum; они возвращают `-32601`), `eth_getProof`, `eth_createAccessList`, `eth_blobBaseFee` (blob-транзакций нет), и `txpool_*` методы, кроме `txpool_status` (публичного мемпула нет). `newPendingTransactions` подписки принимаются, но никогда не дают событий.

## Методы расширения Rome

Помимо стандартного Ethereum RPC, прокси предоставляет `rome_*` методы:

| Метод                             | Назначение                                                                                                                                                                                                                                             |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `rome_emulateTx`                  | Эмулировать транзакцию вне цепочки (возвращает результат выполнения в Solana)                                                                                                                                                                          |
| `rome_emulateTxWithPayer`         | Эмулировать с определённым плательщиком                                                                                                                                                                                                                |
| `rome_emulateCallAccounts`        | Эмулировать и вернуть аккаунты Solana, которые затрагивает вызов                                                                                                                                                                                       |
| `rome_emulateRegRollup`           | Эмулировать регистрацию rollup                                                                                                                                                                                                                         |
| `rome_getResources`               | Сообщить о состоянии пула ресурсов прокси (плательщики, держатели)                                                                                                                                                                                     |
| `rome_mintId`                     | Определить SPL mint, стоящий за оболочкой ERC-20                                                                                                                                                                                                       |
| `rome_buildInfo`                  | Сведения о сборке прокси и ончейн-программе                                                                                                                                                                                                            |
| `rome_isCompatible`               | Проверить совместимость прокси/программы                                                                                                                                                                                                               |
| `rome_solanaTxForEvmTx`           | Получить Solana-транзакцию(и) для хэша EVM-транзакции                                                                                                                                                                                                  |
| `rome_sendUnsignedTransaction`    | Отправить неподписанную транзакцию (потоки с синтетическим отправителем)                                                                                                                                                                               |
| `rome_composeUnsignedAtomicV1`    | Сформировать одну транзакцию Solana v1 для неподписанного тела EIP-1559, авторизованного подписью Ed25519 кошелька Solana; кошелёк подписывает её, а приложение транслирует в сеть. Отклоняется, когда вызов не помещается в одну атомарную транзакцию |
| `rome_composeUnsignedIterativeV1` | То же, но возвращает каждое звено (атомарно, если помещается, иначе — итеративные звенья); кошелёк подписывает каждое и отправляет их с `rome_submitSignedV1Plan`                                                                                      |
| `rome_submitSignedV1Plan`         | Broadcast a signed plan (up to 64 legs); the proxy is transport only, the wallet stays fee payer                                                                                                                                                       |
| `rome_relayUnsignedV1`            | Одна подпись кошелька, плательщик прокси управляет звеньями; синтетический адрес оплачивает газ Rome (сначала пополните его через `rome_composeExternalDepositV1`). Возвращает хэш EVM-транзакции                                                      |
| `rome_composeExternalDepositV1`   | Одна транзакция, подписанная кошельком, которая пополняет нативный газовый баланс синтетического адреса токенами кошелька                                                                                                                              |

## Специфические особенности Rome

### Газ рассчитывается на основе Solana — оценивайте его, не задавайте жёстко

Rome измеряет исполнение в вычислительных единицах Solana, которые отображаются как EVM gas. Основная часть стоимости записи приходится на создание аккаунтов Solana: адресата, который ещё не использовался, нового токен-аккаунта, развёрнутого контракта. Эти аккаунты учитываются в оценке. Практические последствия:

* **Используйте `eth_estimateGas`, и никогда не задавайте жёстко `21000`.** Стандартные инструменты (`forge create`, `cast`, Hardhat, ethers, viem, MetaMask) уже вызывают его и получают пригодное значение. Для вызовов, которые затрагивают программы Solana, добавьте запас (SDK `submitRomeTx` увеличивает его в 1,3 раза) и задайте верхний предел газа, если сама оценка завершается ошибкой. Жёстко заданный `21000` предел будет проваливаться всякий раз, когда запись создаёт аккаунты, например при переводе на адрес, который никогда не использовался.
* **Rome взимает фактически использованный газ.** В измерениях ниже использованный газ никогда не превышал оценку, поэтому завышенная относительно фактически выполненной работы оценка не заставит вас платить разницу.
* **Оставляйте запас, который добавляет ваш инструмент.** Состояние может измениться между оценкой и моментом включения транзакции в блок, а оценка для вызова, выполняющего CPI в Solana, может оказаться заниженной. SDK `submitRomeTx` увеличивает оценку в 1,3 раза в качестве запаса.

Измерено на Hadrian, при цене газа около 10,4 gwei на тот момент:

| Запись                                                         | `eth_estimateGas` | Использовано газа |
| -------------------------------------------------------------- | ----------------- | ----------------- |
| Нативный перевод на адрес, который никогда не использовался    | 1,086,961         | 1,086,961         |
| Нативный перевод на существующий адрес                         | 21,000            | 10,001            |
| Перевод wUSDC на адрес, который никогда не использовался       | 2,544,921         | 2,544,921         |
| Обернуть газ в wUSDC (`withdraw_to_ata`)                       | 21,000            | 10,001            |
| Выдать разрешение обёртке (`approve_spl` в препкомпиле Helper) | 21,000            | 10,001            |
| Развернуть контракт размером 10 байт                           | 1,147,921         | 1,147,921         |

Это единичные измерения в одной сети, а не ограничения. Числа зависят от того, какие аккаунты нужно создать вызову, поэтому оценивайте каждую запись отдельно, а не копируйте их.

### `forge script --broadcast` требует `--skip-simulation`

`forge script` устанавливает свой лимит газа для трансляции на основе **локальной** симуляции, что недостаточно для модели газа Rome. Добавьте `--skip-simulation` так, чтобы Foundry использовал `eth_estimateGas` сети вместо этого:

```bash
forge script script/Deploy.s.sol:Deploy \\
  --rpc-url <RPC> --private-key $PRIVATE_KEY --broadcast --skip-simulation
```

`forge create`, `cast send`, и Hardhat не затронуты — они уже оценивают на цепочке.

### `eth_getLogs` имеет ограничение на диапазон (\~12 000 блоков)

Как и Infura, Alchemy и другие продакшн RPC, `eth_getLogs` отклоняет слишком широкие диапазоны блоков (ошибка `-32005`). Ограничивайте запросы:

```javascript
const latest = await provider.getBlockNumber();
const logs = await contract.queryFilter(filter, latest - 5000, latest);
```

Приложение `queryFilter` без диапазона сканирует всю историю и превысит лимит — явно указывайте `fromBlock`/`toBlock`. Проверки событий на основе receipt (например, ожидание tx и чтение его логов) не затронуты.

### Комиссии

`eth_gasPrice` возвращает реальную цену, полученную от оракула; кошельки (включая MetaMask) используют её и отображают корректные комиссии. Переданные поля комиссии принимаются гибко — как legacy, так и EIP-1559 транзакции успешно проходят со стандартными настройками инструментов.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.rome.builders/ru/spravochnik/json-rpc.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
