> 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/konsep-inti/constraints.md).

# Batasan

Batas saat membangun di Rome EVM — ukuran transaksi Solana, anggaran \~1.4M CU, batas akun, tata letak storage, dan bagaimana Rome mengatasi masing-masing.

Batas dan pembatasan penting saat membangun di atas Rome EVM. Memahami batasan ini membantu Anda merancang kontrak yang bekerja dengan andal.

## Batas Transaksi Solana

| Batasan                | Nilai             | Dampak                                                                                                          |
| ---------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------- |
| Ukuran transaksi       | 4 KB (4.096 byte) | Rome mengirim transaksi Solana v1; tx EVM yang lebih besar ditempatkan sementara di akun penampung (transparan) |
| Unit komputasi per tx  | \~1,4M CU         | Operasi yang melebihi ini menggunakan mode iteratif, yang memiliki batasannya sendiri (di bawah)                |
| Akun per tx            | 64 alamat         | Batas transaksi v1; semuanya yang disentuh oleh tx EVM dan CPI-nya, termasuk akun milik Rome sendiri, dihitung  |
| Ukuran maksimum holder | 80 KB             | Ukuran RLP maksimum untuk satu transaksi EVM                                                                    |

## Batas Eksekusi EVM

| Batasan                                          | Nilai                                                | Catatan                                                                                                                                                                                                  |
| ------------------------------------------------ | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Slot penyimpanan kontrak                         | 256 per akun penyimpanan                             | Beberapa akun penyimpanan dapat dibuat per kontrak                                                                                                                                                       |
| Opcode per iterasi                               | Adaptif                                              | Dibungkus ke dalam anggaran CU tiap tx Solana (VmIt)                                                                                                                                                     |
| TTL penguncian akun                              | 3 dtk (4 dtk saat sesi menyentuh lebih dari 28 akun) | Selama eksekusi iteratif; diperbarui pada setiap langkah                                                                                                                                                 |
| Panjang sesi iteratif                            | 160 langkah                                          | Setelah melewati batas, langkah berikutnya melepaskan kunci sesi dan mengakhirinya tanpa mengomit apa pun                                                                                                |
| Tahap yang direncanakan oleh Rust Rome SDK       | 128                                                  | Batas atas composer iteratif; panggilan nyata selesai jauh lebih cepat                                                                                                                                   |
| Transaksi per rencana yang ditandatangani dompet | 64                                                   | Paling banyak `rome_submitSignedV1Plan` menerima dalam satu panggilan; lihat [Panggilan yang direlai dan panggilan panjang](/id/panduan-pengembang/call-evm-from-solana.md#relayed-calls-and-long-calls) |
| Dompet perbendaharaan                            | 64                                                   | Dompet kumpulan biaya                                                                                                                                                                                    |
| Batas ukuran kontrak                             | 24 KB                                                | Sama seperti Ethereum (EIP-170, 24.576 byte)                                                                                                                                                             |

## Batas CPI

| Batasan                        | Nilai                                                                    | Catatan                                                                                                          |
| ------------------------------ | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
| Kedalaman CPI                  | Maksimal 4 level                                                         | Batas kedalaman CPI Solana                                                                                       |
| Akun per panggilan CPI         | Dalam batas transaksi 64 alamat                                          | Berbagi dengan setiap akun lain yang disentuh transaksi                                                          |
| Kedalaman CPI + Transfer Hook  | Menggunakan level CPI                                                    | Transfer hook dari dalam CPI dapat melebihi kedalaman                                                            |
| Satu jalur per kontrak         | Legacy (`0xff…07/08/09`, `0x42…16`) **atau** cached (`0xff…04/05/06/0b`) | Mencampur panggilan yang memodifikasi dari keduanya dalam satu transaksi ditolak                                 |
| CPI legacy dalam mode iteratif | Tidak diizinkan                                                          | CPI jalur legacy dalam transaksi iteratif gagal dengan `CpiProhibitedInIterativeTx`; efek jalur cached diizinkan |

**Kedalaman CPI adalah batasan yang paling kritis.** Rome EVM menggunakan satu level CPI saat Solana memanggil program Rome. Jika kontrak Solidity Anda kemudian memanggil program Solana lain melalui CPI, itu level 2. Jika program itu memanggil yang lain lagi, itu level 3. Anda hanya memiliki maksimal 4 level total.

```
Level 0: Solana Runtime → Program Rome EVM
Level 1: Program Rome EVM → Target CPI Anda (mis., Jupiter)
Level 2: Jupiter → program lain (mis., Raydium)
Level 3: Raydium → SPL Token (kedalaman maksimum)
```

## Batasan Token-2022 Transfer Hook

| Batasan                 | Dampak                                                                                 |
| ----------------------- | -------------------------------------------------------------------------------------- |
| Satu hook per mint      | Sebuah mint Token-2022 memiliki slot transfer-hook tunggal                             |
| `transfer_checked` saja | Hook tidak aktif pada `transfer`. Operasi jembatan Rome menggunakan `transfer_checked` |
| Mint/burn tidak di-hook | Dikendalikan melalui otoritas mint, bukan hook                                         |

## Batasan Gas dan Penetapan Harga

| Batasan           | Catatan                                                         |
| ----------------- | --------------------------------------------------------------- |
| Sumber harga gas  | Pool Meteora DAMM, v1 atau v2 (token gas SPL)                   |
| Pengali harga gas | Dapat dikonfigurasi per proxy (`gas_price_mul`)                 |
| Harga gas minimum | Ditetapkan oleh konfigurasi proxy                               |
| Estimasi gas      | Dilakukan off-chain melalui emulator Mollusk sebelum pengiriman |

## Batasan Spesifik Jaringan

| Lingkungan        | ID rantai | Program ID rome-evm                           |
| ----------------- | --------- | --------------------------------------------- |
| Hadrian (testnet) | 200010    | `RPTWwELXAY4KC9ZPHhaxp7Sq1hHtU3HNEgLbSegCcWf` |
| Rubicon (mainnet) | 7531      | `RomePq9X3iAoTr813HR7uRarafFDUJty6GdiEceYpzX` |

## Batasan Precompile

| Precompile                 | Batasan                                                                                                                                   |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Modexp (0x05)              | **Dinonaktifkan** — pemanggilan akan revert dengan `panggilan big_mod_exp dinonaktifkan` hingga Solana mengaktifkan `big_mod_exp` syscall |
| BN254 ecPairing (0x08)     | Sekitar 22K CU ditambah 12,8K per pasangan menurut penetapan harga program; pemeriksaan empat pasangan muat dalam satu transaksi atomik   |
| Precompile CPI (0xFF...08) | Akun harus dideklarasikan terlebih dahulu dalam transaksi Solana                                                                          |

## Validasi Transaksi

| Aturan                              | Dampak                                                                                                                                                                                               |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Malleabilitas tanda tangan (EIP-2)  | Transaksi yang ditandatangani, yang `s` berada di atas setengah dari orde kurva akan ditolak                                                                                                         |
| Bentuk RLP                          | Transaksi yang daftar RLP-nya membawa byte sisa setelah item terakhirnya akan ditolak                                                                                                                |
| Opcode yang belum diimplementasikan | Menghentikan seluruh transaksi (`IncompatibleVersionEVM(opcode)`); tidak ada yang dikomit dan kontrak pemanggil tidak dapat menelannya                                                               |
| Pengukuran gas                      | Rome tidak memiliki jadwal gas per opcode: gas yang diteruskan ke `CALL`/`CREATE` tidak ditegakkan, dan tidak ada stipend 2300 gas — jangan bergantung pada perlindungan reentrancy berbasis stipend |

## Batasan Oracle

| Batasan                   | Nilai                                                                   |
| ------------------------- | ----------------------------------------------------------------------- |
| Maksimum kekunoan default | 60 detik                                                                |
| Data round historis       | Tidak didukung — `getRoundData(roundId)` revert                         |
| Switchboard EMA           | Tidak didukung — `latestEMAData()` revert pada SwitchboardV3            |
| Offset parser             | Divalidasi secara empiris — harus divalidasi ulang sebelum redeployment |

## Rekomendasi Desain

1. **Jaga kedalaman CPI tetap dangkal.** Rancang kontrak agar nesting seminimal mungkin. Jika Anda memanggil Jupiter yang memanggil Raydium yang memanggil SPL Token, Anda berada di 3 level — sangat dekat dengan batas.
2. **Utamakan mode atomik.** Rancang operasi agar muat dalam \~1,4M CU. Mode iteratif menambah latensi (kunci 3–4 detik), batas 160 iterasi per sesi, dan prompt dompet per tahap pada jalur Solana saat dompet menandatangani tahap itu sendiri. Panggilan yang membuat CPI jalur legacy sama sekali tidak dapat berjalan secara iteratif.
3. **Deklarasikan akun terlebih dahulu.** Semua akun Solana yang disentuh oleh CPI harus sudah diketahui saat transaksi dibuat (emulasi proxy menemukannya). Penemuan akun dinamis di dalam panggilan CPI tidak mungkin, dan totalnya harus muat dalam batas 64 alamat.
4. **Pilih satu jalur precompile per kontrak.** Memanggil program Solana kustom (`invoke_signed`) adalah jalur legacy dan hanya atomik; lihat [Integrasikan program Solana](/id/panduan-pengembang/integrate-solana-program.md).
5. **Gunakan `transfer_checked`.** Jika Anda membangun apa pun yang menyentuh token Token-2022, selalu gunakan `transfer_checked` untuk memastikan hook aktif.
6. **Uji konsumsi CU.** Ukur unit komputasi Solana yang nyata dari tanda terima transaksi (`computeUnitsConsumed`) — gas `gasUsed` bukan proksi yang akurat untuk CU Solana. Optimalkan dengan Yul untuk jalur panas.

## Apa Selanjutnya

* [Anggaran Komputasi](/id/konsep-inti/compute-budget.md) — biaya CU terperinci per operasi
* [Interop Token](/id/konsep-inti/token-interop.md) — model bridging ERC-20 ↔ SPL
* [Referensi precompile](/id/referensi/precompiles.md) — setiap selector dan kelas dispatch-nya


---

# 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/konsep-inti/constraints.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.
