> 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

Batasan dan kendala penting saat membangun di atas Rome EVM. Memahami kendala ini membantu Anda merancang kontrak yang bekerja dengan andal.

## Batas Transaksi Solana

| Kendala                  | Nilai         | Dampak                                                   |
| ------------------------ | ------------- | -------------------------------------------------------- |
| Ukuran transaksi         | 1.232 byte    | Tx EVM besar dibagi ke beberapa akun holder (transparan) |
| Unit komputasi per tx    | \~1,4 juta 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 maksimum holder   | 80 KB         | Ukuran RLP maksimum untuk satu transaksi EVM             |

## Batas Eksekusi EVM

| Kendala                  | Nilai                    | Catatan                                            |
| ------------------------ | ------------------------ | -------------------------------------------------- |
| Slot penyimpanan kontrak | 256 per akun penyimpanan | Beberapa akun penyimpanan dapat dibuat per kontrak |
| Opcode per iterasi       | Adaptif                  | Dikemas sesuai anggaran CU tiap tx Solana (VmIt)   |
| TTL penguncian akun      | 3-4 detik                | Selama eksekusi iteratif                           |
| Dompet treasury          | 64                       | Dompet kumpulan biaya                              |
| Batas ukuran kontrak     | 24 KB                    | Sama seperti Ethereum (EIP-170, 24.576 byte)       |

## Kendala CPI

| Kendala                       | Nilai                          | Catatan                                               |
| ----------------------------- | ------------------------------ | ----------------------------------------------------- |
| Kedalaman CPI                 | Maksimal 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          | Hook transfer dari dalam CPI dapat melebihi kedalaman |

**Kedalaman CPI adalah kendala 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, itu level 3. Anda hanya memiliki total maksimal 4 level.

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

## Kendala Transfer Hook Token-2022

| Kendala                  | Dampak                                                                                                |
| ------------------------ | ----------------------------------------------------------------------------------------------------- |
| Satu hook per mint       | Mint Token-2022 memiliki satu slot transfer-hook                                                      |
| `transfer_checked` hanya | Hook tidak terpicu pada transfer biasa `transfer`. Operasi bridge Rome menggunakan `transfer_checked` |
| Mint/burn tidak di-hook  | Dikendalikan melalui otoritas mint, bukan hook                                                        |

## Kendala Gas dan Penetapan Harga

| Kendala           | 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 | Diatur oleh konfigurasi proxy                                   |
| Estimasi gas      | Dilakukan off-chain melalui emulator Mollusk sebelum pengiriman |

## Kendala Spesifik Jaringan

| Lingkungan        | Chain ID | ID Program rome-evm                           |
| ----------------- | -------- | --------------------------------------------- |
| Lokal             | 1001     | Stack pengembangan lokal                      |
| Hadrian (devnet)  | 200010   | `RPTWwELXAY4KC9ZPHhaxp7Sq1hHtU3HNEgLbSegCcWf` |
| Martius (testnet) | 121214   | `RomeTaTNPJNBxtB3Wong9geVTtkEFJfUqgktQVq3iSX` |

## Kendala Precompile

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

## Kendala Oracle

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

## 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 sesuai dalam \~1,4 juta 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 dinamis 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 terpicu.
5. **Uji konsumsi CU.** Ukur unit komputasi Solana yang sebenarnya dari tanda terima transaksi (`computeUnitsConsumed`) — EVM `gasUsed` bukan proksi yang akurat untuk CU Solana. Optimalkan dengan Yul untuk jalur panas.

## Langkah 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


---

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