القيود
الحدود والقيود المهمة عند البناء على 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
Modexp (0x05)
معطّل — يمكن تفعيله عبر راية ميزة
BN254 ecPairing (0x08)
تكلفة CU عالية — يتطلب عادةً الوضع التكراري (حوالي 200 ألف CU)
CPI precompile (0xFF...08)
يجب التصريح عن الحسابات مسبقًا في معاملة سولانا
قيود أوراكل
الحد الافتراضي لعدم الحداثة
60 ثانية
بيانات الجولات التاريخية
غير مدعوم — getRoundData(roundId) يتسبب في revert
Switchboard EMA
غير مدعوم — latestEMAData() يتسبب في revert على SwitchboardV3
إزاحات المحلل
تم التحقق منها تجريبيًا — يجب إعادة التحقق قبل إعادة النشر
توصيات التصميم
اجعل عمق CPI ضحلًا. صمّم العقود لتقليل التداخل. إذا كنت تستدعي Jupiter الذي يستدعي Raydium الذي يستدعي SPL Token، فأنت عند 3 مستويات — وهذا قريب جدًا من الحد.
فضّل الوضع الذري. صمّم العمليات بحيث تقع ضمن حوالي 1.4 مليون CU. يضيف الوضع التكراري زمن استجابة إضافيًا (أقفال 3-4 ثوانٍ) وتعقيدًا.
صرّح عن الحسابات مسبقًا. يجب أن تكون جميع حسابات سولانا التي يلمسها CPI معروفة عند إنشاء المعاملة. لا يمكن اكتشاف الحسابات ديناميكيًا داخل استدعاء CPI.
استخدم
transfer_checked. إذا كنت تبني أي شيء يتعامل مع رموز Token-2022، فاستخدم دائمًاtransfer_checkedلضمان تشغيل الخطافات.اختبر استهلاك CU. استخدم
eth_estimateGasأثناء التطوير. حسّن باستخدام Yul للمسارات الساخنة. انظر تحسين CU.
ما التالي
ميزانية الحساب — تكاليف CU التفصيلية لكل عملية
تكامل الرموز — نموذج الجسر بين ERC-20 و SPL
دليل تحسين CU — تقنيات تحسين عملية
آخر تحديث
هل كان هذا مفيدا؟