> 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/pt-br/referencia/json-rpc.md).

# Suporte a JSON-RPC

Métodos Ethereum JSON-RPC suportados pelos endpoints EVM da Rome, além de comportamentos específicos da Rome — para Foundry, Hardhat, ethers, viem e MetaMask.

Os endpoints EVM de Rome falam o JSON-RPC padrão do Ethereum. Foundry, Hardhat, ethers, viem e MetaMask funcionam com Rome da mesma forma que em qualquer cadeia EVM. Esta página lista o que é compatível e os poucos comportamentos específicos de Rome que vale a pena conhecer.

## Métodos compatíveis

**Núcleo (estado e execução):** `eth_chainId`, `eth_blockNumber`, `eth_getBalance`, `eth_getCode`, `eth_getStorageAt`, `eth_getTransactionCount`, `eth_call`, `eth_estimateGas`, `eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`.

**Blocos e transações:** `eth_getBlockByNumber`, `eth_getBlockByHash`, `eth_getBlockReceipts`, `eth_getTransactionByHash`, `eth_getTransactionReceipt`, `eth_sendRawTransaction`, variantes por índice/contagem de blocos.

**Logs e filtros:** `eth_getLogs`, `eth_newFilter`, `eth_newBlockFilter`, `eth_getFilterChanges`, `eth_getFilterLogs`, `eth_uninstallFilter`.

**Assinaturas de WebSocket:** `eth_subscribe` / `eth_unsubscribe` (`newHeads`, `logs`). Veja [Assinaturas de WebSocket](/pt-br/guias-do-desenvolvedor/websocket-subscriptions.md).

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

**Pequenos métodos de introspecção:** `rpc_modules` (lista `debug`, `eth`, `net`, `rome`, `rpc`, `txpool`, `web3`), `eth_syncing` (sempre `false`), `eth_accounts` (sempre uma lista vazia), `eth_getUncleCountByBlockNumber`, `eth_getUncleCountByBlockHash`, `eth_getUncleByBlockNumberAndIndex` e `eth_getUncleByBlockHashAndIndex` (sem uncles, então as contagens são `0x0`  e as consultas retornam `null`), `eth_newPendingTransactionFilter` (aceito, mas nunca retorna hashes porque não há mempool público), e `txpool_status`, que sempre retorna `{"pending":"0x0","queued":"0x0"}` porque não há mempool público.

**Tracing:** `debug_traceRomeTransaction` recebe um hash de transação e retorna a divisão por subchamada e por CPI de uma transação que empacota várias chamadas em um lote. Transações comuns retornam `null`, assim como um hash desconhecido ou que ainda não foi indexado.

### Não compatível

`debug_traceTransaction` / `trace_*` (rastreamento de transações no estilo Ethereum; eles retornam `-32601`), `eth_getProof`, `eth_createAccessList`, `eth_blobBaseFee` (sem transações blob), e os `txpool_*` métodos, exceto `txpool_status` (sem mempool público). `newPendingTransactions` as assinaturas são aceitas, mas nunca emitem nada.

## Métodos de extensão do Rome

Além do RPC padrão do Ethereum, o proxy expõe `rome_*` métodos:

| Método                            | Finalidade                                                                                                                                                                                                                                |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rome_emulateTx`                  | Emula uma transação off-chain (retorna o resultado de execução na Solana)                                                                                                                                                                 |
| `rome_emulateTxWithPayer`         | Emula contra um pagador específico                                                                                                                                                                                                        |
| `rome_emulateCallAccounts`        | Emula e retorna as contas Solana que uma chamada toca                                                                                                                                                                                     |
| `rome_emulateRegRollup`           | Emula o registro de um rollup                                                                                                                                                                                                             |
| `rome_getResources`               | Reporta o estado do pool de recursos do proxy (pagadores, detentores)                                                                                                                                                                     |
| `rome_mintId`                     | Resolve a mint SPL por trás de um wrapper ERC-20                                                                                                                                                                                          |
| `rome_buildInfo`                  | Build do proxy + informações do programa on-chain                                                                                                                                                                                         |
| `rome_isCompatible`               | Verifica a compatibilidade entre proxy/programa                                                                                                                                                                                           |
| `rome_solanaTxForEvmTx`           | Obtém a(s) transação(ões) Solana para um hash de tx EVM                                                                                                                                                                                   |
| `rome_sendUnsignedTransaction`    | Envia uma transação sem assinatura (fluxos com remetente sintético)                                                                                                                                                                       |
| `rome_composeUnsignedAtomicV1`    | Compõe uma transação Solana v1 para um corpo EIP-1559 sem assinatura, autorizado pela assinatura Ed25519 de uma carteira Solana; a carteira a assina e o app a transmite. Recusa quando a chamada não cabe em uma única transação atômica |
| `rome_composeUnsignedIterativeV1` | Igual, mas retorna cada etapa (atômica se couber, senão as etapas iterativas); a carteira assina cada uma e as submete com `rome_submitSignedV1Plan`                                                                                      |
| `rome_submitSignedV1Plan`         | Transmite um plano assinado (até 64 etapas); o proxy é apenas transporte, a carteira continua como pagadora de taxas                                                                                                                      |
| `rome_relayUnsignedV1`            | Uma assinatura de carteira, o pagador do proxy conduz as etapas; o sintético paga o gas de Rome (financie-o primeiro com `rome_composeExternalDepositV1`). Retorna o hash da tx EVM                                                       |
| `rome_composeExternalDepositV1`   | Uma transação assinada pela carteira que credita o saldo de gas nativo do sintético a partir dos tokens da carteira                                                                                                                       |

## Comportamentos específicos de Rome

### O gas é derivado do Solana — estime, não fixe manualmente

Rome mede a execução em unidades de computação do Solana, expostas como gas EVM. A maior parte do custo de uma escrita é criar contas Solana: um destinatário que nunca foi usado, uma nova conta de token, um contrato implantado. Essas contas fazem parte da estimativa. Consequências práticas:

* **Use `eth_estimateGas`, e nunca fixe manualmente `21000`.** As ferramentas padrão (`forge create`, `cast`, Hardhat, ethers, viem, MetaMask) já o chamam e obtêm um valor utilizável. Para chamadas que tocam programas Solana, adicione uma margem (o `submitRomeTx`  preenche 1,3x) e defina um teto de gas se a própria estimativa reverter. Um limite `21000` codificado manualmente falha sempre que a escrita cria contas, por exemplo uma transferência para um endereço que nunca foi usado.
* **Rome cobra o gas realmente usado.** Nas medições abaixo, o gas usado nunca foi maior que a estimativa, então uma estimativa superior ao trabalho realizado não lhe custa a diferença.
* **Deixe a margem que sua ferramenta adiciona.** O estado pode mudar entre a estimativa e o momento em que a transação cai, e a estimativa para uma chamada que faz CPIs no Solana pode ficar baixa. O `submitRomeTx`  preenche a estimativa em 1,3x como margem.

Medido no Hadrian, com o preço do gas em cerca de 10,4 gwei na época:

| Escrita                                                   | `eth_estimateGas` | Gas usado |
| --------------------------------------------------------- | ----------------- | --------- |
| Transferência nativa para um endereço nunca usado         | 1,086,961         | 1,086,961 |
| Transferência nativa para um endereço existente           | 21,000            | 10,001    |
| Transferência de wUSDC para um endereço nunca usado       | 2,544,921         | 2,544,921 |
| Converter gas em wUSDC (`withdraw_to_ata`)                | 21,000            | 10,001    |
| Concessão de wrapper (`approve_spl` no precompile Helper) | 21,000            | 10,001    |
| Implantar um contrato de 10 bytes                         | 1,147,921         | 1,147,921 |

Estas são medições únicas em uma cadeia, não limites. Os números dependem de quais contas uma chamada precisa criar, então estime cada escrita em vez de copiá-los.

### `forge script --broadcast` precisa de `--skip-simulation`

`forge script` define o limite de gas do broadcast a partir de uma **local** simulação local, o que subdimensiona em relação ao modelo de gas de Rome. Adicione `--skip-simulation` para que o Foundry use o `eth_estimateGas` da cadeia em vez disso:

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

`forge create`, `cast send`, e Hardhat, não são afetados — eles já estimam on-chain.

### `eth_getLogs` tem limite por faixa (\~12.000 blocos)

Assim como Infura, Alchemy e outros RPCs de produção, `eth_getLogs` rejeita faixas de blocos excessivamente amplas (erro `-32005`). Delimite suas consultas:

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

Um app `queryFilter` sem intervalo varre todo o histórico e excederá o limite — passe um `fromBlock`/`toBlock`. As asserções de eventos baseadas em receipt (por exemplo, aguardar uma tx e ler seus logs) não são afetadas.

### Taxas

`eth_gasPrice` retorna o preço real, derivado do oracle; carteiras (incluindo MetaMask) o usam e exibem taxas corretas. Os campos de taxa enviados são aceitos de forma permissiva — tanto transações legacy quanto EIP-1559 chegam com os padrões das ferramentas standard.


---

# 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/pt-br/referencia/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.
