# القيود

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

## حدود معاملات سولانا

| القيد                          | القيمة             | الأثر                                                     |
| ------------------------------ | ------------------ | --------------------------------------------------------- |
| حجم المعاملة                   | 1,232 بايت         | معاملات EVM الكبيرة تُقسَّم عبر حسابات الحامل (بشكل شفاف) |
| وحدات الحساب لكل معاملة        | حوالي 1.4 مليون CU | العمليات التي تتجاوز ذلك تستخدم الوضع التكراري            |
| الحسابات لكل معاملة (بدون ALT) | 28                 | استخدم جداول البحث عن العناوين لمزيد من الحسابات          |
| الحسابات لكل معاملة (مع ALT)   | 64+                | يُستخدم ALT تلقائيًا عند وجود أكثر من 28 حسابًا           |
| الحد الأقصى لحجم الحامل        | 80 كيلوبايت        | الحد الأقصى لحجم RLP لمعاملة EVM واحدة                    |

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

| القيد                      | القيمة             | ملاحظات                                              |
| -------------------------- | ------------------ | ---------------------------------------------------- |
| خانات تخزين العقد          | 256 لكل حساب تخزين | يمكن إنشاء عدة حسابات تخزين لكل عقد                  |
| الرموز التشغيلية لكل تكرار | \~500              | للوضع التكراري (VmIt)                                |
| مدة بقاء قفل الحساب        | 3-4 ثوانٍ          | أثناء التنفيذ التكراري                               |
| محافظ الخزانة              | 64                 | محافظ مجمع الرسوم                                    |
| حد حجم العقد               | 480 كيلوبايت       | تمت الزيادة من 24 كيلوبايت في Ethereum (وضع OP-Geth) |

## قيود CPI

| القيد                    | القيمة                   | ملاحظات                                     |
| ------------------------ | ------------------------ | ------------------------------------------- |
| عمق CPI                  | 4 مستويات كحد أقصى       | حد عمق CPI في سولانا                        |
| الحسابات لكل استدعاء CPI | محدود بحجم معاملة سولانا | عمليًا نحو 20 حسابًا لكل CPI                |
| عمق CPI + Transfer Hook  | يستخدم مستويات CPI       | قد تتجاوز خطافات النقل من داخل CPI حد العمق |

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

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

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

| القيد                             | الأثر                                                                                                  |
| --------------------------------- | ------------------------------------------------------------------------------------------------------ |
| خطاف واحد لكل mint                | موجّه Meta-Hook يحل هذه المشكلة (حتى 8 خطافات فرعية)                                                   |
| `transfer_checked` فقط            | لا تعمل الخطافات عند استخدام `transfer`. يجب على جسر Rome أن يستخدم `transfer_checked`                 |
| السكّ/الحرق غير مرتبطين بالخطافات | تتم السيطرة عليهما عبر سلطة السكّ، وليس عبر الخطافات                                                   |
| وضع الحالة الواحدة فقط            | OP-Geth لا يمكن الوصول إليه من داخل معاملة سولانا                                                      |
| الهروب عبر تغليف الرموز           | يمكن للمستخدمين تغليف الرموز لتجاوز الخطافات. ويُخفَّف ذلك عبر قائمة سوداء للمغلّف + PermanentDelegate |

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

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

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

| البيئة            | معرّف السلسلة | معرّف البرنامج                                |
| ----------------- | ------------- | --------------------------------------------- |
| محلي              | 1001          | مُعيَّن في `rome-setup` إعدادات               |
| Devnet (montispl) | 200002        | `RD2Gg7Lcnv62XmRHAzxh6fQQfMRzHtN5LeKPVBhYU5S` |
| Testnet (Martius) | 121214        | تحقق من إعدادات النشر                         |
| Testnet (Caelian) | 121215        | تحقق من إعدادات النشر                         |

## قيود Precompile

| Precompile                 | القيد                                                          |
| -------------------------- | -------------------------------------------------------------- |
| Modexp (0x05)              | **معطّل** — يمكن تفعيله عبر راية ميزة                          |
| BN254 ecPairing (0x08)     | تكلفة CU عالية — يتطلب عادةً الوضع التكراري (حوالي 200 ألف CU) |
| CPI precompile (0xFF...08) | يجب التصريح عن الحسابات مسبقًا في معاملة سولانا                |

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

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

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

1. **اجعل عمق CPI ضحلًا.** صمّم العقود لتقليل التداخل. إذا كنت تستدعي Jupiter الذي يستدعي Raydium الذي يستدعي SPL Token، فأنت عند 3 مستويات — وهذا قريب جدًا من الحد.
2. **فضّل الوضع الذري.** صمّم العمليات بحيث تقع ضمن حوالي 1.4 مليون CU. يضيف الوضع التكراري زمن استجابة إضافيًا (أقفال 3-4 ثوانٍ) وتعقيدًا.
3. **صرّح عن الحسابات مسبقًا.** يجب أن تكون جميع حسابات سولانا التي يلمسها CPI معروفة عند إنشاء المعاملة. لا يمكن اكتشاف الحسابات ديناميكيًا داخل استدعاء CPI.
4. **استخدم `transfer_checked`.** إذا كنت تبني أي شيء يتعامل مع رموز Token-2022، فاستخدم دائمًا `transfer_checked` لضمان تشغيل الخطافات.
5. **اختبر استهلاك CU.** استخدم `eth_estimateGas` أثناء التطوير. حسّن باستخدام Yul للمسارات الساخنة. انظر [تحسين CU](https://github.com/rome-protocol/docs/blob/main/developer-guides/cu-optimization.md).

## ما التالي

* [ميزانية الحساب](/ar/almfahym-alasasyh/compute-budget.md) — تكاليف CU التفصيلية لكل عملية
* [تكامل الرموز](/ar/almfahym-alasasyh/token-interop.md) — نموذج الجسر بين ERC-20 و SPL
* [دليل تحسين CU](https://github.com/rome-protocol/docs/blob/main/developer-guides/cu-optimization.md) — تقنيات تحسين عملية


---

# 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/ar/almfahym-alasasyh/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.
