القيود

الحدود والقيود المهمة عند البناء على 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 مستويات كحد أقصى إجمالًا.

قيود خطاف التحويل في 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 للمسارات الساخنة. انظر تحسين CUarrow-up-right.

ما التالي

آخر تحديث

هل كان هذا مفيدا؟