> 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/memulai/architecture.md).

# Arsitektur

Rome menyematkan interpreter bytecode EVM di dalam program on-chain Solana. Pengguna berkomunikasi dengan Rome Proxy melalui JSON-RPC Ethereum standar, dan proxy mengirim transaksi mereka langsung ke program Rome EVM di Solana. Tidak ada lapisan eksekusi terpisah untuk disinkronkan — state EVM *adalah* state Solana.

## Ikhtisar sistem

<figure><img src="/files/69882e14d0cf389b0b1503b00663b14e6b8a9f91" alt="User to Rome Proxy to the Rome EVM program on Solana, with Hercules indexing back"><figcaption></figcaption></figure>

## Komponen

### Program Rome EVM (on-chain)

Inti dari Rome — sebuah program BPF Solana yang berisi interpreter bytecode EVM lengkap (fork dari SputnikVM). Program ini:

* Menerima transaksi EVM yang diserialisasi sebagai instruksi Solana
* Menjalankan bytecode Solidity di dalam runtime Solana
* Memetakan setiap alamat Ethereum (H160) ke PDA Solana
* Menyediakan precompile untuk memanggil ke Solana (CPI, System, Helper, Withdraw) bersama precompile Ethereum standar
* Menyimpan state EVM (saldo, nonce, kode, storage) sebagai data akun Solana

### Rome Proxy (server JSON-RPC)

Server JSON-RPC Ethereum standar pada port 9090 — titik masuk untuk chain publik. Ini menerjemahkan panggilan API Ethereum menjadi aktivitas Solana:

* `eth_sendRawTransaction` → serialisasikan tx EVM → kirim instruksi Solana
* `eth_call` → emulasikan eksekusi off-chain melalui emulator Mollusk SVM
* `eth_estimateGas` → simulasi untuk estimasi gas
* `eth_getBalance`, `eth_getCode`, `eth_getBlockByNumber`, receipt, log → disajikan dari state terindeks

Ini juga menyediakan ekstensi Rome: `rome_emulateTx`, `rome_emulateRegRollup`, `rome_mintId`, `rome_buildInfo`, `rome_getResources`, dan lainnya.

### Hercules (pengindeks)

Memantau program Rome EVM di Solana dan merekonstruksi blok yang kompatibel dengan Ethereum — transaksi, receipt, log, dan perubahan state — didukung oleh PostgreSQL. Pada chain publik, ini berjalan dalam mode slot-aligned, sehingga nomor blok dipetakan ke slot Solana dan slot yang sama menghasilkan blok yang sama di pengindeks mana pun. Proxy menyajikan blok-blok ini ke wallet dan explorer.

### Precompile

Rome mengimplementasikan precompile Ethereum standar (ecrecover, SHA-256, RIPEMD-160, identity, modexp, operasi kurva BN254, blake2f) dengan semantik setara mainnet, ditambah precompile non-EVM yang masuk ke Solana: **CpiProgram** (`0xFF…08`, CPI arbitrer), **System** (`0xFF…07`, derivasi PDA dan helper base58), **HelperProgram** (`0xFF…09`, pembuatan ATA/PDA, transfer SPL, gas↔lamports), dan **Withdraw** (`0x42…16`). Lihat [Alamat Kontrak](/id/referensi/contract-addresses.md) referensi untuk tabel lengkap.

## Mode eksekusi

Rome mengeksekusi transaksi EVM dengan salah satu dari dua cara:

### Atomik (VmAt)

Satu transaksi Solana. Seluruh transaksi EVM dieksekusi dalam budget komputasi satu transaksi Solana (\~1,4 juta unit komputasi). Digunakan untuk sebagian besar operasi — transfer, panggilan kontrak biasa, swap.

### Iteratif (VmIt)

Untuk pekerjaan yang melebihi budget satu transaksi. Eksekusi dibagi ke beberapa transaksi Solana:

1. Setiap langkah (satu transaksi Solana) menjalankan sebanyak mungkin opcode EVM yang muat dalam budget komputasinya — ukuran langkah bersifat adaptif, bukan tetap
2. State VM diserialisasi Borsh ke dalam sebuah `StateHolder` akun di antara langkah-langkah
3. Akun dikunci TTL selama beberapa detik saat eksekusi
4. Digunakan untuk operasi berat seperti pairing BN254

## Pemetaan akun

Setiap alamat Ethereum dipetakan secara deterministik ke sebuah PDA Solana yang diturunkan dari chain ID dan alamat di bawah program Rome EVM. PDA tersebut memiliki saldo akun (sebagai akun token SPL), kode kontrak, slot storage, dan nonce — semuanya sebagai data akun Solana.

## Akun penampung

Transaksi Solana dibatasi hingga 1.232 byte, tetapi transaksi EVM (terutama deployment kontrak) bisa jauh lebih besar. Rome menempatkan transaksi besar ke dalam **akun penampung**: transaksi dipecah menjadi potongan-potongan yang ditulis secara berurutan ke dalam penampung (hingga 80 KB), lalu dirakit dan dieksekusi on-chain. SDK Rome menangani ini secara transparan.

## Gas dan penetapan harga

Setiap chain memiliki token gas sendiri — token SPL apa pun. Penetapan harga gas membaca pool Meteora DAMM (v1 atau v2, dapat dikonfigurasi) untuk mengonversi antara token gas dan SOL untuk biaya transaksi Solana yang mendasarinya.

## Apa selanjutnya

* [Jaringan](/id/jaringan/networks.md) — sambungkan ke Martius atau Hadrian
* [Quickstart](/id/memulai/quickstart.md) — deploy kontrak pertama Anda
* [Model Eksekusi](/id/konsep-inti/execution-model.md) — penjelasan mendalam tentang eksekusi atomik vs iteratif


---

# 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 dynamically by asking a question.

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

```
GET https://docs.rome.builders/id/memulai/architecture.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
