> 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/ja/ji-ben-gai-nian/constraints.md).

# 制約

Rome EVMで構築する際の制限 — Solanaトランザクションサイズ、約140万CUの予算、アカウント上限、ストレージレイアウト、そしてRomeがそれぞれにどう対処するか。

Rome EVM 上で構築する際の重要な制限と境界です。これらの制約を理解すると、信頼性の高いコントラクトを設計できます。

## Solana トランザクションの制限

| 制約                         | 値               | 影響                                                                           |
| -------------------------- | --------------- | ---------------------------------------------------------------------------- |
| トランザクションサイズ                | 4 KB（4,096 バイト） | Rome は Solana v1 トランザクションを送信します。より大きい EVM トランザクションはホルダーアカウントにステージングされます（透過的） |
| トランザクションあたりの compute units | 約 1.4M CU       | これを超える操作は反復モードを使用します。反復モードには独自の上限があります（以下参照）                                 |
| トランザクションあたりのアカウント数         | 64 アドレス         | v1 トランザクションの上限です。Rome 自身のアカウントを含め、EVM トランザクションとその CPI が触れるものはすべてカウントされます     |
| 最大ホルダーサイズ                  | 80 KB           | 単一の EVM トランザクションに対する最大 RLP サイズ                                               |

## EVM 実行制限

| 制約                        | 値                                  | 注記                                                                                                                                     |
| ------------------------- | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| コントラクトのストレージスロット          | ストレージアカウント 1 つあたり 256              | コントラクトごとに複数のストレージアカウントを作成できます                                                                                                          |
| 各反復あたりのオペコード数             | 適応的                                | 各 Solana トランザクションの CU 予算に合わせて詰め込まれます（VmIt）                                                                                             |
| アカウントロック TTL              | 3 秒（セッションが 28 アカウントを超えて触れる場合は 4 秒） | 反復実行中。各ステップで更新されます                                                                                                                     |
| 反復セッションの長さ                | 160 ステップ                           | 上限を超えると、次のステップでセッションのロックが解除され、何もコミットせずに終了します                                                                                           |
| Rust 版 Rome SDK が計画するレッグ  | 128                                | イテレーティブ・コンポーザーの上限。実際の呼び出しははるかに少ない回数で完了します                                                                                              |
| ウォレット署名済みプランあたりのトランザクション数 | 64                                 | 最大で `rome_submitSignedV1Plan` 1 回の呼び出しで受け付けます。参照: [リレイされた呼び出しと長時間呼び出し](/ja/gaido/call-evm-from-solana.md#relayed-calls-and-long-calls) |
| 財務ウォレット                   | 64                                 | 手数料プールウォレット                                                                                                                            |
| コントラクトサイズの上限              | 24 KB                              | Ethereum と同じです（EIP-170、24,576 バイト）                                                                                                     |

## CPI 制約

| 制約                      | 値                                                                    | 注記                                                                                        |
| ----------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| CPI 深度                  | 最大 4 レベル                                                             | Solana の CPI 深度制限                                                                         |
| CPI 呼び出しあたりのアカウント数      | 64 アドレスのトランザクション上限内                                                  | トランザクションが触れる他のすべてのアカウントと共有されます                                                            |
| CPI + Transfer Hook の深度 | CPI レベルを使用します                                                        | CPI 内部からの transfer hook は深度を超える可能性があります                                                   |
| コントラクトごとに 1 つのトラック      | レガシー（`0xff…07/08/09`, `0x42…16`) **または** キャッシュ済み（`0xff…04/05/06/0b`) | 両方からの状態変更呼び出しを 1 つのトランザクションで混在させることは拒否されます                                                |
| 反復モードでのレガシー CPI         | 許可されません                                                              | 反復トランザクション内のレガシー・トラック CPI は次のエラーで失敗します `CpiProhibitedInIterativeTx`；キャッシュ済みトラックの効果は許可されます |

**CPI 深度が最も重要な制約です。** Solana が Rome プログラムを呼び出すと、Rome EVM は CPI レベルを 1 つ消費します。Solidity コントラクトが次に CPI 経由で別の Solana プログラムを呼び出すと、それはレベル 2 です。そのプログラムがさらに別のプログラムを呼び出すと、レベル 3 です。合計で最大 4 レベルまでです。

```
レベル 0: Solana Runtime → Rome EVM Program
レベル 1: Rome EVM Program → あなたの CPI 対象（例: Jupiter）
レベル 2: Jupiter → 別のプログラム（例: Raydium）
レベル 3: Raydium → SPL Token（最大深度）
```

## Token-2022 の Transfer Hook 制約

| 制約                    | 影響                                                          |
| --------------------- | ----------------------------------------------------------- |
| ミント 1 つにつきフック 1 つ     | Token-2022 のミントには、転送フックのスロットが 1 つだけあります                     |
| `transfer_checked` のみ | フックは通常の `transfer`では発火しません。Rome のブリッジ操作は `transfer_checked` |
| ミント/バーンにはフックされません     | フックではなくミント権限で制御されます                                         |

## ガスと価格の制約

| 制約       | 注記                                     |
| -------- | -------------------------------------- |
| ガス価格のソース | Meteora DAMM プール、v1 または v2（SPL ガストークン） |
| ガス価格倍率   | プロキシごとに設定可能（`gas_price_mul`)           |
| 最低ガス価格   | プロキシ設定で指定されます                          |
| ガス見積もり   | 送信前に Mollusk エミュレータを使ってオフチェーンで実施されます   |

## ネットワーク固有の制約

| 環境              | チェーンID | rome-evm プログラム ID                             |
| --------------- | ------ | --------------------------------------------- |
| Hadrian（テストネット） | 200010 | `RPTWwELXAY4KC9ZPHhaxp7Sq1hHtU3HNEgLbSegCcWf` |
| Rubicon（メインネット） | 7531   | `RomePq9X3iAoTr813HR7uRarafFDUJty6GdiEceYpzX` |

## プリコンパイル制約

| プリコンパイル                | 制約                                                                                                     |
| ---------------------- | ------------------------------------------------------------------------------------------------------ |
| Modexp（0x05）           | **無効** — 呼び出しは次のエラーで revert します `big_mod_exp call is disabled` Solana が次を有効化するまで `big_mod_exp` システムコール |
| BN254 ecPairing（0x08）  | プログラムの料金設定では、およそ 22K CU に加えて 1 ペアあたり 12.8K。4 ペアのチェックなら 1 つのアトミックトランザクションに収まります                         |
| CPI プリコンパイル（0xFF...08） | アカウントは Solana トランザクションで事前に宣言しておく必要があります                                                                |

## トランザクション検証

| ルール           | 影響                                                                                                              |
| ------------- | --------------------------------------------------------------------------------------------------------------- |
| 署名の可変性（EIP-2） | 署名済みトランザクションで、 `s` が楕円曲線の位数の半分を超えているものは拒否されます                                                                   |
| RLP 形状        | RLP リストの最後の項目を越えて余分なバイト列が付いているトランザクションは拒否されます                                                                   |
| 未実装のオペコード     | トランザクション全体を中止します（`IncompatibleVersionEVM(opcode)`）；何もコミットされず、呼び出し元コントラクトでもそれを握りつぶせません                           |
| ガス計測          | Rome にはオペコードごとのガススケジュールがありません: 〜に渡されるガス `CALL`/`CREATE` は強制されず、2300 ガスのスタイペンドもありません — スタイペンドに依存した再入防止に頼らないでください |

## オラクル制約

| 制約              | 値                                                   |
| --------------- | --------------------------------------------------- |
| デフォルトの最大古さ      | 60 秒                                                |
| 過去のラウンドデータ      | 非対応 — `getRoundData(roundId)` revert します            |
| Switchboard EMA | 非対応 — `latestEMAData()` SwitchboardV3 では revert します |
| パーサーのオフセット      | 経験的に検証済み — 再デプロイ前に再検証が必要です                          |

## 設計上の推奨事項

1. **CPI 深度は浅く保ってください。** 入れ子を最小限にするようコントラクトを設計してください。Jupiter が Raydium を呼び、さらに Raydium が SPL Token を呼ぶ場合、3 レベルになります — 制限に危険なほど近いです。
2. **アトミックモードを優先してください。** 操作は約 1.4M CU に収まるよう設計してください。反復モードでは遅延（3〜4 秒のロック）、セッションあたり最大 160 回の反復、さらにウォレットがレッグ自体に署名する場合は Solana ランでレッグごとにウォレットのプロンプトが発生します。レガシー・トラックの CPI を行う呼び出しは、反復実行できません。
3. **アカウントは事前に宣言してください。** CPI によって触れられるすべての Solana アカウントは、トランザクション作成時点で判明している必要があります（プロキシのエミュレーションがそれらを検出します）。CPI 呼び出し内での動的なアカウント検出は不可能であり、合計は 64 アドレス上限に収める必要があります。
4. **コントラクトごとに 1 つのプリコンパイル・トラックを選んでください。** カスタム Solana プログラム（`invoke_signed`）の呼び出しはレガシー・トラックで、アトミック専用です。参照: [Solana プログラムを統合する](/ja/gaido/integrate-solana-program.md).
5. **使用してください `transfer_checked`.** Token-2022 トークンに触れるものを構築する場合は、常に `transfer_checked` を使用して、フックが確実に発火するようにしてください。
6. **CU 消費をテストしてください。** トランザクションレシートから実際の Solana compute units を測定してください（`computeUnitsConsumed`）— EVM `gasUsed` は Solana CU の正確な代替指標ではありません。ホットパスは Yul で最適化してください。

## 次は

* [Compute Budget](/ja/ji-ben-gai-nian/compute-budget.md) — 操作ごとの詳細な CU コスト
* [Token Interop](/ja/ji-ben-gai-nian/token-interop.md) — ERC-20 ↔ SPL ブリッジングモデル
* [プリコンパイル参照](/ja/rifarensu/precompiles.md) — すべてのセレクタとそのディスパッチクラス


---

# 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/ja/ji-ben-gai-nian/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.
