> 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/id/referensi/json-rpc.md).

# Dukungan JSON-RPC

Metode Ethereum JSON-RPC yang didukung oleh endpoint Rome EVM, plus perilaku khusus Rome — untuk Foundry, Hardhat, ethers, viem, dan MetaMask.

Endpoint EVM Rome berbicara dengan JSON-RPC Ethereum standar. Foundry, Hardhat, ethers, viem, dan MetaMask bekerja pada Rome dengan cara yang sama seperti pada chain EVM mana pun. Halaman ini mencantumkan apa saja yang didukung dan beberapa perilaku khusus Rome yang perlu diketahui.

## Metode yang didukung

**Inti (state & eksekusi):** `eth_chainId`, `eth_blockNumber`, `eth_getBalance`, `eth_getCode`, `eth_getStorageAt`, `eth_getTransactionCount`, `eth_call`, `eth_estimateGas`, `eth_gasPrice`, `eth_maxPriorityFeePerGas`, `eth_feeHistory`.

**Blok & transaksi:** `eth_getBlockByNumber`, `eth_getBlockByHash`, `eth_getBlockReceipts`, `eth_getTransactionByHash`, `eth_getTransactionReceipt`, `eth_sendRawTransaction`, varian berdasarkan indeks/jumlah blok.

**Log & filter:** `eth_getLogs`, `eth_newFilter`, `eth_newBlockFilter`, `eth_getFilterChanges`, `eth_getFilterLogs`, `eth_uninstallFilter`.

**Langganan WebSocket:** `eth_subscribe` / `eth_unsubscribe` (`newHeads`, `logs`). Lihat [Langganan WebSocket](/id/panduan-pengembang/websocket-subscriptions.md).

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

**Metode introspeksi kecil:** `rpc_modules` (mencantumkan `debug`, `eth`, `net`, `rome`, `rpc`, `txpool`, `web3`), `eth_syncing` (selalu `false`), `eth_accounts` (selalu daftar kosong), `eth_getUncleCountByBlockNumber`, `eth_getUncleCountByBlockHash`, `eth_getUncleByBlockNumberAndIndex` dan `eth_getUncleByBlockHashAndIndex` (tidak ada uncle, jadi jumlahnya `0x0` dan pencarian mengembalikan `null`), `eth_newPendingTransactionFilter` (diterima, tetapi tidak pernah mengembalikan hash karena tidak ada mempool publik), dan `txpool_status`, yang selalu mengembalikan `{"pending":"0x0","queued":"0x0"}` karena tidak ada mempool publik.

**Tracing:** `debug_traceRomeTransaction` mengambil hash transaksi dan mengembalikan rincian per-sub-call dan per-CPI untuk transaksi yang menggabungkan beberapa panggilan menjadi satu batch. Transaksi biasa mengembalikan `null`, demikian pula hash yang tidak dikenal atau belum diindeks.

### Tidak didukung

`debug_traceTransaction` / `trace_*` (pelacakan transaksi bergaya Ethereum; mereka mengembalikan `-32601`), `eth_getProof`, `eth_createAccessList`, `eth_blobBaseFee` (tidak ada transaksi blob), dan `metode txpool_*` selain `txpool_status` (tidak ada mempool publik). `newPendingTransactions` langganan diterima tetapi tidak pernah mengeluarkan event.

## Metode ekstensi Rome

Selain RPC Ethereum standar, proxy mengekspos `metode rome_*` sebagai berikut:

| Metode                            | Tujuan                                                                                                                                                                                                                                                          |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rome_emulateTx`                  | Meniru transaksi di luar rantai (mengembalikan hasil eksekusi Solana)                                                                                                                                                                                           |
| `rome_emulateTxWithPayer`         | Meniru terhadap payer tertentu                                                                                                                                                                                                                                  |
| `rome_emulateCallAccounts`        | Meniru dan mengembalikan akun Solana yang disentuh oleh sebuah panggilan                                                                                                                                                                                        |
| `rome_emulateRegRollup`           | Meniru pendaftaran rollup                                                                                                                                                                                                                                       |
| `rome_getResources`               | Laporkan status pool sumber daya proxy (payers, holders)                                                                                                                                                                                                        |
| `rome_mintId`                     | Menyelesaikan SPL mint di balik pembungkus ERC-20                                                                                                                                                                                                               |
| `rome_buildInfo`                  | Build proxy + info program on-chain                                                                                                                                                                                                                             |
| `rome_isCompatible`               | Periksa kompatibilitas proxy/program                                                                                                                                                                                                                            |
| `rome_solanaTxForEvmTx`           | Dapatkan transaksi Solana untuk hash tx EVM                                                                                                                                                                                                                     |
| `rome_sendUnsignedTransaction`    | Kirim transaksi yang belum ditandatangani (alur synthetic-sender)                                                                                                                                                                                               |
| `rome_composeUnsignedAtomicV1`    | Susun satu transaksi Solana v1 untuk body EIP-1559 yang belum ditandatangani dan diotorisasi oleh tanda tangan Ed25519 dari dompet Solana; dompet menandatanganinya dan aplikasi menyiarkannya. Menolak ketika panggilan tidak muat dalam satu transaksi atomik |
| `rome_composeUnsignedIterativeV1` | Sama, tetapi mengembalikan setiap langkah (atomik jika muat, jika tidak langkah-langkah iteratif); dompet menandatangani masing-masing dan mengirimkannya dengan `rome_submitSignedV1Plan`                                                                      |
| `rome_submitSignedV1Plan`         | Siarkan rencana yang ditandatangani (hingga 64 langkah); proxy hanya sebagai transport, dompet tetap menjadi fee payer                                                                                                                                          |
| `rome_relayUnsignedV1`            | Satu tanda tangan dompet, payer milik proxy menggerakkan langkah-langkah; synthetic membayar gas Rome (isi dulu dengan `rome_composeExternalDepositV1`). Mengembalikan hash tx EVM                                                                              |
| `rome_composeExternalDepositV1`   | Satu transaksi yang ditandatangani dompet yang mengkredit saldo gas native synthetic dari token dompet                                                                                                                                                          |

## Perilaku khusus Rome

### Gas diturunkan dari Solana — estimasikan, jangan hardcode

Rome mengukur eksekusi dalam compute unit Solana, yang ditampilkan sebagai gas EVM. Sebagian besar biaya suatu penulisan adalah pembuatan akun Solana: penerima yang belum pernah digunakan, akun token baru, kontrak yang di-deploy. Akun-akun itu termasuk dalam estimasi. Konsekuensi praktis:

* **Gunakan `eth_estimateGas`dan jangan pernah hardcode `21000`.** Tooling standar (`forge create`, `cast`, Hardhat, ethers, viem, MetaMask) sudah memanggilnya dan mendapatkan nilai yang dapat digunakan. Untuk panggilan yang menyentuh program Solana, tambahkan margin ( `submitRomeTx` menambah bantalan 1,3x) dan tetapkan batas gas jika estimasinya sendiri revert. Sebuah `21000` limit hardcode gagal setiap kali penulisan membuat akun, misalnya transfer ke alamat yang belum pernah digunakan.
* **Rome menagih gas yang benar-benar digunakan.** Pada pengukuran di bawah ini, gas yang digunakan tidak pernah melebihi estimasi, jadi estimasi yang lebih tinggi daripada pekerjaan yang dilakukan tidak akan membuat Anda membayar selisihnya.
* **Biarkan margin yang ditambahkan tooling Anda.** State dapat berubah antara estimasi dan saat transaksi masuk, dan estimasi untuk panggilan yang membuat CPI Solana bisa menjadi terlalu rendah. SDK's `submitRomeTx` memberi bantalan pada estimasi sebesar 1,3x sebagai margin.

Diukur di Hadrian, dengan harga gas sekitar 10,4 gwei pada saat itu:

| Penulisan                                                | `eth_estimateGas` | Gas yang digunakan |
| -------------------------------------------------------- | ----------------- | ------------------ |
| Transfer native ke alamat yang belum pernah digunakan    | 1,086,961         | 1,086,961          |
| Transfer native ke alamat yang sudah ada                 | 21,000            | 10,001             |
| Transfer wUSDC ke alamat yang belum pernah digunakan     | 2,544,921         | 2,544,921          |
| Bungkus gas menjadi wUSDC (`withdraw_to_ata`)            | 21,000            | 10,001             |
| Pemberian wrapper (`approve_spl` pada precompile Helper) | 21,000            | 10,001             |
| Deploy kontrak 10 byte                                   | 1,147,921         | 1,147,921          |

Ini adalah pengukuran tunggal pada satu chain, bukan batas. Angka-angka ini bergantung pada akun mana yang harus dibuat oleh suatu panggilan, jadi estimasikan setiap penulisan alih-alih menyalinnya.

### `forge script --broadcast` memerlukan `--skip-simulation`

`forge script` menetapkan batas gas broadcast-nya dari sebuah **lokal** simulasi, yang kekurangan alokasi terhadap model gas Rome. Tambahkan `--skip-simulation` agar Foundry menggunakan `eth_estimateGas` chain sebagai gantinya:

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

`forge create`, `cast send`, dan Hardhat tidak terpengaruh — mereka sudah mengestimasi di chain.

### `eth_getLogs` dibatasi rentang (\~12.000 blok)

Seperti Infura, Alchemy, dan RPC produksi lainnya, `eth_getLogs` menolak rentang blok yang terlalu lebar (error `-32005`). Batasi kueri Anda:

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

Sebuah `queryFilter` tanpa rentang akan memindai seluruh riwayat dan akan melampaui batas — berikan `fromBlock`/`toBlock`. Penegasan event berbasis receipt (misalnya menunggu tx dan membaca log-nya) tidak terpengaruh.

### Biaya

`eth_gasPrice` mengembalikan harga sebenarnya yang berasal dari oracle; wallet (termasuk MetaMask) menggunakannya dan menampilkan biaya yang benar. Field biaya yang dikirim diterima secara permisif — transaksi legacy dan EIP-1559 sama-sama masuk dengan default standar tooling.


---

# 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/id/referensi/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.
