> 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/ar/almfahym-alasasyh/constraints.md).

# القيود

الحدود عند البناء على Rome EVM — حجم معاملة Solana، وميزانية \~1.4M CU، وحدود الحسابات، وتخطيط التخزين، وكيف يتجاوز Rome كل ذلك.

الحدود والقيود المهمة عند البناء على Rome EVM. يساعدك فهم هذه القيود على تصميم عقود تعمل بشكل موثوق.

## قيود معاملات سولانا

| القيد                    | القيمة                  | التأثير                                                                                            |
| ------------------------ | ----------------------- | -------------------------------------------------------------------------------------------------- |
| حجم المعاملة             | 4 كيلوبايت (4,096 بايت) | يرسل Rome معاملات Solana v1؛ وتُرحَّل معاملات EVM الأكبر إلى حسابات حافظة (بشفافية)                |
| وحدات الحوسبة لكل معاملة | حوالي 1.4 مليون CU      | العمليات التي تتجاوز هذا تستخدم الوضع التكراري، الذي له حدوده الخاصة (أدناه)                       |
| الحسابات لكل معاملة      | 64 عنوانًا              | حد معاملة v1؛ كل ما تلمسه معاملة EVM وعمليات CPI التابعة لها، بما في ذلك حسابات Rome نفسها، يُحتسب |
| الحد الأقصى لحجم الحافظة | 80 كيلوبايت             | الحد الأقصى لحجم RLP لمعاملة EVM واحدة                                                             |

## حدود تنفيذ EVM

| القيد                               | القيمة                                                 | ملاحظات                                                                                                                                                                                   |
| ----------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| خانات تخزين العقد                   | 256 لكل حساب تخزين                                     | يمكن إنشاء عدة حسابات تخزين لكل عقد                                                                                                                                                       |
| تعليمات التشغيل لكل تكرار           | متكيف                                                  | تُحزَّم ضمن ميزانية CU لكل معاملة سولانا (VmIt)                                                                                                                                           |
| مدة صلاحية قفل الحساب               | 3 ثوانٍ (4 ثوانٍ عندما تلامس الجلسة أكثر من 28 حسابًا) | أثناء التنفيذ التكراري؛ تُجدَّد في كل خطوة                                                                                                                                                |
| طول الجلسة التكرارية                | 160 خطوة                                               | بعد تجاوز الحد، تقوم الخطوة التالية بإطلاق أقفال الجلسة وتنهيها دون اعتماد أي شيء                                                                                                         |
| الأرجل المخططة بواسطة Rust Rome SDK | 128                                                    | السقف الأعلى للمؤلف التكراري؛ تُحسَم الاستدعاءات الفعلية في عدد أقل بكثير                                                                                                                 |
| المعاملات لكل خطة موقعة من المحفظة  | 64                                                     | الحد الأقصى `rome_submitSignedV1Plan` يقبلها في استدعاء واحد؛ انظر [الاستدعاءات المُرحَّلة والاستدعاءات الطويلة](/ar/adlh-almtw-ryn/call-evm-from-solana.md#relayed-calls-and-long-calls) |
| محافظ الخزانة                       | 64                                                     | محافظ مجمع الرسوم                                                                                                                                                                         |
| حد حجم العقد                        | 24 كيلوبايت                                            | كما في Ethereum (EIP-170، 24,576 بايت)                                                                                                                                                    |

## قيود CPI

| القيد                        | القيمة                                                                      | ملاحظات                                                                                                           |
| ---------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| عمق CPI                      | 4 مستويات كحد أقصى                                                          | حد عمق CPI في سولانا                                                                                              |
| الحسابات لكل استدعاء CPI     | ضمن حد المعاملة البالغ 64 عنوانًا                                           | مشتركة مع كل حساب آخر تلمسه المعاملة                                                                              |
| عمق CPI + خطاف النقل         | يستخدم مستويات CPI                                                          | قد تتجاوز خطافات النقل من داخل CPI العمق المسموح                                                                  |
| مسار واحد لكل عقد            | قديم (`0xff…07/08/09`, `0x42…16`) **أو** المخزن مؤقتًا (`0xff…04/05/06/0b`) | يُرفض خلط الاستدعاءات المُعدِّلة من كليهما في معاملة واحدة                                                        |
| CPI القديم في الوضع التكراري | غير مسموح                                                                   | يفشل CPI على المسار القديم في معاملة تكرارية مع `CpiProhibitedInIterativeTx`؛ آثار المسار المخزن مؤقتًا مسموح بها |

**يُعد عمق CPI القيد الأكثر أهمية.** يستهلك Rome EVM مستوى CPI واحدًا عندما يستدعي سولانا برنامج Rome. إذا استدعى عقد Solidity الخاص بك بعد ذلك برنامج سولانا آخر عبر CPI، فهذا هو المستوى 2. وإذا استدعى ذلك البرنامج برنامجًا آخر، فهذا هو المستوى 3. لديك 4 مستويات كحد أقصى إجمالًا.

```
المستوى 0: Solana Runtime → برنامج Rome EVM
المستوى 1: برنامج Rome EVM → هدف CPI الخاص بك (مثل Jupiter)
المستوى 2: Jupiter → برنامج آخر (مثل Raydium)
المستوى 3: Raydium → SPL Token (العمق الأقصى)
```

## قيود خطاف النقل في Token-2022

| القيد                            | التأثير                                                                    |
| -------------------------------- | -------------------------------------------------------------------------- |
| خطاف واحد لكل mint               | لدى mint في Token-2022 خانة واحدة فقط لخطاف النقل                          |
| `transfer_checked` فقط           | لا تعمل الخطافات على `transfer`. تستخدم عمليات جسر Rome `transfer_checked` |
| السَكّ/الحرق غير مربوط بالخطافات | يتم التحكم به عبر سلطة السَكّ، لا عبر الخطافات                             |

## قيود الغاز والتسعير

| القيد                  | ملاحظات                                               |
| ---------------------- | ----------------------------------------------------- |
| مصدر تسعير الغاز       | مجمع Meteora DAMM، الإصدار 1 أو 2 (رمز الغاز SPL)     |
| معامل مضاعفة سعر الغاز | قابل للتهيئة لكل وكيل (`gas_price_mul`)               |
| الحد الأدنى لسعر الغاز | يُحدد عبر إعدادات الوكيل                              |
| تقدير الغاز            | يتم تنفيذه خارج السلسلة عبر محاكي Mollusk قبل الإرسال |

## قيود خاصة بالشبكة

| البيئة            | معرّف السلسلة | معرّف برنامج rome-evm                         |
| ----------------- | ------------- | --------------------------------------------- |
| Hadrian (testnet) | 200010        | `RPTWwELXAY4KC9ZPHhaxp7Sq1hHtU3HNEgLbSegCcWf` |
| Rubicon (mainnet) | 7531          | `RomePq9X3iAoTr813HR7uRarafFDUJty6GdiEceYpzX` |

## قيود البرنامج المسبق

| البرنامج المسبق                    | القيد                                                                                                                     |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Modexp (0x05)                      | **معطّل** — يفشل الاستدعاء مع `تم تعطيل استدعاء big_mod_exp` حتى تفعّل سولانا `big_mod_exp` استدعاء نظام                  |
| BN254 ecPairing (0x08)             | حوالي 22 ألف CU بالإضافة إلى 12.8 ألف لكل زوج حسب تسعير البرنامج؛ يمكن لفحص من أربعة أزواج أن يندرج ضمن معاملة ذرية واحدة |
| البرنامج المسبق لـ CPI (0xFF...08) | يجب التصريح بالحسابات مسبقًا في معاملة سولانا                                                                             |

## التحقق من المعاملة

| القاعدة                      | الأثر                                                                                                                                                            |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| قابلية تغيير التوقيع (EIP-2) | معاملة موقعة يكون `s` فوق نصف ترتيب المنحنى مرفوضة                                                                                                               |
| بنية RLP                     | تُرفض المعاملة التي تحمل قائمة RLP فيها بايتات زائدة بعد آخر عنصر                                                                                                |
| تعليمة تشغيل غير منفذة       | يوقف المعاملة بأكملها (`IncompatibleVersionEVM(opcode)`); لا يتم اعتماد أي شيء ولا يمكن لعقدٍ مستدعي ابتلاعه                                                     |
| احتساب الغاز                 | لا يملك Rome جدول غاز لكل تعليمة تشغيل: الغاز الممرر إلى `CALL`/`CREATE` لا يُفرض، ولا توجد علاوة 2300 غاز — لا تعتمد على حماية إعادة الدخول القائمة على العلاوة |

## قيود أوراكل

| القيد                                | القيمة                                                    |
| ------------------------------------ | --------------------------------------------------------- |
| الحد الأقصى الافتراضي للقدم          | 60 ثانية                                                  |
| بيانات الجولات التاريخية             | غير مدعوم — `getRoundData(roundId)` يفشل                  |
| المتوسط المتحرك الأسي لـ Switchboard | غير مدعوم — `latestEMAData()` يفشل على SwitchboardV3      |
| إزاحات المحلل                        | تم التحقق منه تجريبيًا — يجب إعادة التحقق قبل إعادة النشر |

## توصيات التصميم

1. **اجعل عمق CPI ضحلًا.** صمّم العقود لتقليل التعشيق إلى أدنى حد. إذا كنت تستدعي Jupiter الذي يستدعي Raydium الذي يستدعي SPL Token، فأنت عند 3 مستويات — وهذا قريب جدًا من الحد.
2. **فضّل الوضع الذري.** صمّم العمليات لتناسب حوالي 1.4 مليون CU. يضيف الوضع التكراري زمن تأخير (أقفال لمدة 3-4 ثوانٍ)، وحدًا أقصى قدره 160 تكرارًا لكل جلسة، ومطالبة للمحفظة لكل جزء على مسار سولانا عندما توقّع المحفظة الأجزاء بنفسها. الاستدعاء الذي ينفّذ CPIs على المسار القديم لا يمكنه العمل تكراريًا إطلاقًا.
3. **صرّح بالحسابات مسبقًا.** يجب أن تكون جميع حسابات سولانا التي يلمسها CPI معروفة عند إنشاء المعاملة (ويكتشفها محاكاة الوكيل). لا يمكن الاكتشاف الديناميكي للحسابات داخل استدعاء CPI، ويجب أن يتوافق العدد الإجمالي مع حد 64 عنوانًا.
4. **اختر مسارًا واحدًا للبرنامج المسبق لكل عقد.** استدعاء برنامج سولانا مخصص (`invoke_signed`) يكون على المسار القديم ومتاحًا ذريًا فقط؛ انظر [دمج برنامج سولانا](/ar/adlh-almtw-ryn/integrate-solana-program.md).
5. **استخدم `transfer_checked`.** إذا كنت تبني أي شيء يتعامل مع رموز Token-2022، فاحرص دائمًا على استخدام `transfer_checked` لضمان تشغيل الخطافات.
6. **اختبر استهلاك CU.** قِس وحدات الحوسبة الحقيقية في سولانا من إيصال المعاملة (`computeUnitsConsumed`) — EVM `gasUsed` ليس بديلًا دقيقًا لوحدات CU في سولانا. حسّن باستخدام Yul للمسارات الساخنة.

## ما التالي

* [ميزانية الحوسبة](/ar/almfahym-alasasyh/compute-budget.md) — تكاليف CU التفصيلية لكل عملية
* [التوافق التشغيلي للرموز](/ar/almfahym-alasasyh/token-interop.md) — نموذج الجسر بين ERC-20 ↔ SPL
* [مرجع البرنامج المسبق](/ar/almrja/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/ar/almfahym-alasasyh/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.
