Skip to main contentA-REX Foundation

الورقة البيضاء · 13

تحليل الأداء

الغاز المقيس للتنفيذ المرجعي مع عدم وجود خطافات ومع خطاف واحد ومع خطافين؛ وما الذي يحدد الكلفة؛ وإرشادات النشر.

المنهج

الأرقام أدناه ناتجة عن تشغيل scripts/gas-report-standard.js على شبكة Hardhat داخل العملية مقابل التنفيذ المرجعي المترجَم (solc 0.8.22، وviaIR، وoptimizer.runs = 1 لـ ARexToken)، في سبتمبر 2026. وتعني "دافئ" أن زوج المُرسِل/المستلم/المعرّف هو نفسه في التحويل السابق (خانات التخزين التي جرى لمسها بالفعل في الكتلة). الخطافات: EligibilityHook (CHECK + ELIGIBILITY) وExpiryHook (CHECK). ولإعادة إنتاج النتائج استخدم:

npx hardhat run scripts/gas-report-standard.js

النتائج

xychart-beta
    title "غاز التحويل الدافئ بحسب عدد الخطافات (بالآلاف)"
    x-axis ["بلا خطافات", "الأهلية", "الأهلية + انتهاء الصلاحية"]
    y-axis "الغاز (k)" 0 --> 140
    bar [66.8, 91.2, 119.6]

تنمو الكلفة خطيًا مع عدد الخطافات: فكل خطاف هو استدعاء check خارجي واحد لكل معرّف، إضافةً إلى canSend وcanReceive في حالة خطاف الأهلية. ويعرض الجدول كل عملية.

العملية0 خطافات1 خطاف2 خطافات
createBatch (معرّف جديد، وسك 1000)264,096283,831299,396
safeTransferFrom (الأول، بارد)80,687108,266136,682
safeTransferFrom (دافئ)66,79091,166119,582
transform تقسيم من 1 إلى 2 (معرّفان جديدان)564,422595,707636,858
setFrozenTokens54,18854,18854,188
forcedTransfer80,15289,90999,569
burn66,62183,00193,395

تحويل دافئ بخطاف واحد بالضبط من كل نوع (الكلفة الحدّية للقاعدة):

xychart-beta horizontal
    title "الغاز الحدّي لخطاف واحد في تحويل دافئ (بالآلاف)"
    x-axis ["DeliveryHook", "Traceability (إصدار فقط)", "EligibilityHook", "ExpiryHook", "SeasonalHook", "PerishabilityHook"]
    y-axis "الغاز المضاف (k)" 0 --> 35
    bar [12.3, 17.4, 24.4, 25.2, 27.5, 31.0]

يضيف TraceabilityHook في وضع الحفظ 184.5k ويُستبعد من الرسم البياني لأغراض المقياس.

الخطافالغازΔ مقارنةً ببلا خطاف
EligibilityHook91,166+24,376
ExpiryHook92,023+25,233
SeasonalHook94,324+27,534
PerishabilityHook97,813+31,023
DeliveryHook (بلا تسليم نشط)79,076+12,286
TraceabilityHook، الإصدار فقط84,152+17,362
TraceabilityHook، مع الحفظ251,273+184,483

ما الذي يحدد الكلفة

  • يكلّف التحويل بلا خطافات نحو 67k وهو دافئ، أي ERC-1155 إضافةً إلى تتبّع المعروض وقراءات وجود الدفعة وحالتها وتجميدها وما يلزم لإدارة المسار (تخزين بيانات التحويل مؤقتًا والقفل). وهذا هو الحد الأدنى.
  • يضيف كل خطاف نحو 25–30k إلى التحويل: استدعاء check واحد (دالة عرض بين العقود)، إضافةً إلى استدعاءي canSend وcanReceive في خطافات الأهلية. والكلفة خطية في عدد الخطافات وفي عدد المعرّفات في التحويل المجمّع. ولو جرى فحص كل عقد قواعد لكل قدرة بـ supportsInterface قبل استدعائه لأضاف ذلك عدة استدعاءات ثابتة لكل معرّف؛ وهذه الكلفة الإضافية غير موجودة لأن الأعلام تُخزَّن مؤقتًا عند التسجيل.
  • يهيمن التخزين على كلفة createBatch: هيكل Batch (ست كلمات إضافةً إلى نص) وخانات الرصيد والمعروض في ERC-1155. وهي كلفة تُدفع مرة واحدة لكل دفعة.
  • تنشئ transform معرّفات جديدة: فالتقسيم إلى اثنتين يدفع كلفة سجلَّي دفعة وعمليتَي سك وعملية حرق واحدة، إضافةً إلى استدعاءات الخطافات في كل مرحلة (OP_TRANSFORM). والتقسيم إلى n يكلّف تقريبًا n × createBatch إضافةً إلى عملية حرق؛ ودمج n في واحدة يكلّف تقريبًا n من عمليات الحرق إضافةً إلى createBatch واحدة.
  • الإنفاذ رخيص: فالتجميد خانة واحدة؛ والتحويل القسري يكلّف ما يكلّفه التحويل إضافةً إلى كتابة تخفيض التجميد والحدث.
  • transferCheck / canTransfer دالتا عرض: مجانيتان خارج السلسلة، وتسلكان مسار الشيفرة نفسه الذي تسلكه المعاملة.

ما يتيحه التصميم

تصميم فحص القدراتA-REX Core (ARexToken)
تحويل مع n من عقود القواعدالمعرّفات × الوحدات × (فحوص supportsInterface + استدعاء الخطاف) قبل أن يعمل أي منطقالمعرّفات × الخطافات × 1 استدعاء (+2 لخطافات الأهلية)؛ والأعلام مخزّنة مؤقتًا عند التسجيل
الرفضتراجع بنص (يُنسخ إلى الذاكرة، وغير قابل للفهرسة)خطأ مخصص مع عنوان الخطاف وكود bytes32
النسبغير متاحنحو 280k لكل دفعة ناتجة
التجميد / التحويل القسريغير متاح54k / 80k

يصف عمود "تصميم فحص القدرات" التصميم الذي تحل A-REX Core محله (ADR-004، وADR-005)؛ وعمود A-REX Core وحده هو المقيس.

إرشادات النشر

  • الكلفة النقدية هي gas × gas price × token price، ويتغير العاملان الأخيران بمراتب من الحجم بين السلاسل والأيام. وعلى سبيل التوضيح فقط، عند 0.01 gwei و3,000 دولار أمريكي لكل ETH تكلّف عملية تحويل دافئة بخطافين (119,582 غازًا) نحو 0.0036 دولار أمريكي، وتكلّف createBatch (264,096 غازًا) نحو 0.008 دولار أمريكي؛ وعند 20 gwei على الشبكة الرئيسية لـ Ethereum تكلّف العمليتان نفسهما نحو 7.2 و15.8 دولارًا أمريكيًا. فقِس على السلسلة المستهدفة قبل الالتزام بنموذج اقتصاديات الوحدة.
  • التحويلات المجمّعة: توزّع safeBatchTransferFrom التكاليف الثابتة على عدة معرّفات؛ لكن كلفة الخطافات تظل تتناسب مع عدد المعرّفات.
  • ترتيب الخطافات: ضع الخطافات الرخيصة ذات معدل الرفض المرتفع أولًا؛ فالرفض يوقف المسار قبل أن تعمل الخطافات الأعلى كلفة.
  • عدد الخطافات: ثلاثة إلى خمسة تكفي معظم جهات الإصدار؛ وكل خطاف إضافي كلفة قابلة للقياس عن كل تحويل وسطح حوكمة.
  • البيانات الوصفية: أبقِ uri قصيرًا (CID أو Digital Link)؛ فالنص يُخزَّن على السلسلة.
  • القراءات خارج السلسلة: استخدم transferCheck قبل الإرسال؛ فالمعاملة التي تتراجع تكلّف غازًا مع ذلك.

معدل المعالجة

الرمز نفسه ليس عنق الزجاجة؛ بل السلسلة. فالتحويل الواحد معاملة واحدة؛ والتحويل التصنيعي بـ n من المخرجات معاملة واحدة تتضمن n من عمليات السك. وتتطلب فهرسة النسب قراءة أحداث BatchTransformed، التي تُصدر مرة واحدة لكل عملية مع قوائم الكميات كاملة، ولذلك لا يحتاج المفهرس إلى إعادة بناء أي شيء من أحداث كل تحويل على حدة.

حجم العقد

يُنشر ARexToken بحجم 24,136 بايت (الحد 24,576)، مترجَمًا مع optimizer.runs = 1. أما العقود الأخرى فصغيرة: ARexAttestations 2,708؛ والخطافات بين 1,358 (ExpiryHook) و6,215 (DeliveryHook)، وTraceabilityHook 4,076؛ والامتدادات بين 3,716 و4,588. وإضافة وظائف إلى الرمز نفسه مقيّدة بالحجم بحكم التصميم — وهذا هو الغرض من الخطافات والعقود المرافقة.