Arsitektur

Rome Protocol menyematkan interpreter bytecode EVM di dalam program on-chain Solana. Halaman ini menjelaskan bagaimana komponen-komponennya saling terhubung.

Ikhtisar Sistem

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                        Lapisan Pengguna                         โ”‚
โ”‚   MetaMask / ethers.js / Hardhat / Foundry                      โ”‚
โ”‚   (JSON-RPC Ethereum Standar)                                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ–ผ                     โ–ผ
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚  Rome Proxy    โ”‚    โ”‚   OP-Geth      โ”‚
   โ”‚  (:9090)       โ”‚    โ”‚   (:8545)      โ”‚
   โ”‚  JSON-RPC      โ”‚    โ”‚   RPC EVM      โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚                     โ”‚
           โ”‚              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”
           โ”‚              โ”‚    Rhea     โ”‚  (meneruskan tx geth ke Solana)
           โ”‚              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ”‚                     โ”‚
           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ–ผ
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚                    Runtime Solana                             โ”‚
   โ”‚                                                              โ”‚
   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
   โ”‚   โ”‚              Program Rome EVM                     โ”‚       โ”‚
   โ”‚   โ”‚                                                   โ”‚       โ”‚
   โ”‚   โ”‚   Interpreter Bytecode EVM (fork SputnikVM)       โ”‚       โ”‚
   โ”‚   โ”‚   Pemetaan Akun: H160 โ†’ Solana PDA               โ”‚       โ”‚
   โ”‚   โ”‚   Precompile: ecrecover, BN254, SPL, CPI, dll.   โ”‚       โ”‚
   โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
   โ”‚                           โ”‚ CPI                               โ”‚
   โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
   โ”‚   โ”‚Token SPL  โ”‚ Jupiter   โ”‚ Kamino    โ”‚ Meteora   โ”‚  ...     โ”‚
   โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                      โ–ฒ
                      โ”‚ Mengindeks event
               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”
               โ”‚  Hercules   โ”‚  (pengindeks blok โ†’ Engine API โ†’ OP-Geth)
               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Komponen

Program Rome EVM (On-Chain)

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

  • Menerima transaksi EVM yang diserialisasi dari instruksi Solana

  • Menjalankan bytecode Solidity di dalam runtime Solana

  • Memetakan alamat Ethereum (H160) ke Solana PDA

  • Menyediakan antarmuka precompile untuk CPI, Token SPL, Program Sistem

  • Mengelola state EVM (penyimpanan kontrak, saldo, nonce) sebagai data akun Solana

Rome Proxy (Server JSON-RPC)

Server JSON-RPC Ethereum standar pada port 9090 yang menerjemahkan panggilan API Ethereum menjadi transaksi Solana:

  • eth_sendRawTransaction โ†’ serialisasi tx EVM โ†’ kirim instruksi Solana

  • eth_call โ†’ emulasikan eksekusi EVM di luar chain (melalui emulator SVM Mollusk)

  • eth_estimateGas โ†’ simulasi eksekusi untuk estimasi gas

  • eth_getBalance, eth_getCode, dll. โ†’ baca dari data akun Solana

Ekstensi Rome: rome_emulateTx, rome_emulateRegRollup, rome_mintId, rome_buildInfo, rome_getResources.

OP-Geth (Lapisan RPC EVM Opsional)

Klien Go-Ethereum yang dimodifikasi yang menyediakan kompatibilitas penuh RPC Ethereum. Dalam mode op-geth:

  1. Pengguna mengirim transaksi ke OP-Geth (:8545)

  2. Rhea meneruskan transaksi ke Rome Proxy โ†’ Solana

  3. Hercules mengindeks event Solana dan memasok blok EVM ke OP-Geth melalui Engine API (:8551)

Dalam mode single-state, pengguna terhubung langsung ke Rome Proxy (:9090), sepenuhnya melewati OP-Geth.

Hercules (Pengindeks)

Memantau program Rome EVM di Solana dan menghasilkan data blok yang kompatibel dengan EVM:

  • Memantau event program Rome di Solana

  • Merekonstruksi blok EVM dengan receipt transaksi, log, dan perubahan state

  • Memasok blok ke OP-Geth melalui Engine API untuk kompatibilitas standar block explorer

  • Didukung oleh PostgreSQL

Rhea (Jembatan Mempool)

Menjembatani mempool OP-Geth ke Solana:

  • Membaca transaksi tertunda dari mempool OP-Geth

  • Membungkusnya sebagai instruksi Solana yang menargetkan program Rome EVM

  • Mengirim ke Solana untuk dieksekusi

Mode Eksekusi

Rome mendukung dua mode eksekusi untuk transaksi EVM:

Eksekusi Atomik (VmAt)

Satu transaksi Solana. Seluruh transaksi EVM dieksekusi dalam anggaran komputasi satu transaksi Solana (~1,4 juta unit komputasi). Digunakan untuk sebagian besar operasi โ€” transfer, panggilan kontrak sederhana, swap.

Eksekusi Iteratif (VmIt)

Untuk operasi intensif komputasi yang melebihi anggaran satu transaksi. Eksekusi EVM dipecah ke beberapa transaksi Solana:

  1. Setiap langkah mengeksekusi ~500 opcode EVM

  2. State VM diserialisasi dengan Borsh ke sebuah StateHolder akun di antara langkah-langkah

  3. Akun dikunci TTL selama 3-4 detik saat eksekusi

  4. Digunakan untuk operasi berat seperti pairing BN254 (verifikasi bukti ZK)

Pemetaan Akun

Setiap alamat Ethereum (20 byte) dipetakan ke Solana PDA (32 byte) yang diturunkan dari program Rome EVM:

PDA ini memiliki:

  • Saldo ETH/token (sebagai akun token SPL)

  • Bytecode kontrak (disimpan dalam data akun Solana)

  • Slot penyimpanan kontrak (disimpan dalam data akun Solana)

  • Nonce

Akun Holder

Transaksi Solana dibatasi hingga 1.232 byte. Transaksi EVM (terutama deployment kontrak) bisa jauh lebih besar. Rome menanganinya dengan akun holder:

  1. Transaksi EVM berukuran besar dipecah menjadi potongan-potongan

  2. Potongan-potongan disusun secara berurutan ke dalam akun holder (maks. 80 KB)

  3. Setelah semua potongan ditulis, transaksi penuh dirangkai dan dieksekusi

  4. Ini dikelola secara transparan oleh Rome SDK

Gas dan Harga

Setiap aplikasi (chain ID) di Rome memiliki token gas sendiri โ€” token SPL apa pun. Penentuan harga gas menggunakan pool Meteora DAMM V1 untuk mengonversi antara token gas dan SOL untuk biaya transaksi Solana yang mendasarinya.

Mode Deployment

Mode
Aliran Data
Kasus Penggunaan

Mode OP-Geth

Pengguna โ†’ OP-Geth โ†’ Rhea โ†’ Proxy โ†’ Solana; Hercules mengindeks balik

Kompatibilitas penuh dengan RPC Ethereum

Mode single-state

Pengguna โ†’ Proxy โ†’ Solana secara langsung

Penerapan lebih sederhana, latensi lebih rendah

Berikutnya

Terakhir diperbarui

Apakah ini membantu?