# Batasan

Batasan dan limit 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         | 1.232 byte | Tx EVM besar dibagi ke beberapa akun holder (transparan) |
| Unit komputasi per tx    | \~1,4M CU  | Operasi yang melebihi ini menggunakan mode iteratif      |
| Akun per tx (tanpa ALT)  | 28         | Gunakan Address Lookup Tables untuk lebih banyak         |
| Akun per tx (dengan ALT) | 64+        | ALT digunakan otomatis saat > 28 akun                    |
| Ukuran holder maksimal   | 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       | \~500                    | Untuk mode iteratif (VmIt)                         |
| TTL penguncian akun      | 3-4 detik                | Selama eksekusi iteratif                           |
| Dompet treasury          | 64                       | Dompet pool biaya                                  |
| Batas ukuran kontrak     | 480 KB                   | Dinaikkan dari 24 KB milik Ethereum (mode OP-Geth) |

## Batasan CPI

| Batasan                       | Nilai                          | Catatan                                               |
| ----------------------------- | ------------------------------ | ----------------------------------------------------- |
| Kedalaman CPI                 | Maks. 4 level                  | Batas kedalaman CPI Solana                            |
| Akun per panggilan CPI        | Dibatasi oleh ukuran tx Solana | Secara praktis \~20 akun per CPI                      |
| Kedalaman CPI + Transfer Hook | Menggunakan level CPI          | Transfer hook dari dalam CPI dapat melebihi kedalaman |

**Kedalaman CPI adalah batasan yang paling kritis.** Rome EVM mengonsumsi satu level CPI ketika Solana memanggil program Rome. Jika kontrak Solidity Anda kemudian memanggil program Solana lain melalui CPI, itu level 2. Jika program itu memanggil yang lain, itu level 3. Total maksimum hanya 4 level.

```
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          | Meta-Hook Router menyelesaikan ini (hingga 8 sub-hook)                                                          |
| `transfer_checked` saja     | Hook tidak aktif pada `transfer`biasa. Jembatan Rome HARUS menggunakan `transfer_checked`                       |
| Mint/burn tidak di-hook     | Dikendalikan melalui mint authority, bukan hook                                                                 |
| Hanya mode state tunggal    | OP-Geth tidak dapat dijangkau dari dalam tx Solana                                                              |
| Pelarian pembungkusan token | Pengguna dapat membungkus token untuk melewati hook. Diminimalkan melalui blacklist wrapper + PermanentDelegate |

## Batasan Gas dan Penetapan Harga

| Batasan           | Catatan                                                         |
| ----------------- | --------------------------------------------------------------- |
| Sumber harga gas  | Pool Meteora DAMM V1 (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        | Chain ID | Program ID                                    |
| ----------------- | -------- | --------------------------------------------- |
| Lokal             | 1001     | Ditetapkan di `rome-setup` config             |
| Devnet (montispl) | 200002   | `RD2Gg7Lcnv62XmRHAzxh6fQQfMRzHtN5LeKPVBhYU5S` |
| Testnet (Martius) | 121214   | Periksa konfigurasi deployment                |
| Testnet (Caelian) | 121215   | Periksa konfigurasi deployment                |

## Batasan Precompile

| Precompile                 | Batasan                                                         |
| -------------------------- | --------------------------------------------------------------- |
| Modexp (0x05)              | **Dinonaktifkan** — dapat diaktifkan melalui feature flag       |
| BN254 ecPairing (0x08)     | Biaya CU tinggi — biasanya memerlukan mode iteratif (\~200K CU) |
| CPI precompile (0xFF...08) | Akun harus dideklarasikan di awal dalam transaksi Solana        |

## Batasan Oracle

| Batasan                      | Nilai                                                                   |
| ---------------------------- | ----------------------------------------------------------------------- |
| Kedaluwarsa maksimum 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 untuk meminimalkan nesting. 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 (penguncian 3-4 detik) dan kompleksitas.
3. **Deklarasikan akun di awal.** Semua akun Solana yang disentuh oleh CPI harus sudah diketahui saat transaksi dibuat. Penemuan akun secara dinamis di dalam panggilan CPI tidak dimungkinkan.
4. **Gunakan `transfer_checked`.** Jika Anda membangun apa pun yang menyentuh token Token-2022, selalu gunakan `transfer_checked` untuk memastikan hook aktif.
5. **Uji konsumsi CU.** Gunakan `eth_estimateGas` selama pengembangan. Optimalkan dengan Yul untuk jalur panas. Lihat [Optimasi CU](https://github.com/rome-protocol/docs/blob/main/developer-guides/cu-optimization.md).

## Apa Selanjutnya

* [Anggaran Komputasi](/id/konsep-inti/compute-budget.md) — biaya CU terperinci per operasi
* [Interoperabilitas Token](/id/konsep-inti/token-interop.md) — model bridging ERC-20 ↔ SPL
* [Panduan Optimasi CU](https://github.com/rome-protocol/docs/blob/main/developer-guides/cu-optimization.md) — teknik optimasi praktis


---

# Agent Instructions: 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:

```
GET https://docs.rome.builders/id/konsep-inti/constraints.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
