Skip to main contentA-REX Core

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

نظرة عامة على الحل

بنية A-REX Core: ثلاثة مستويات باتجاه اعتماد واحد، ومسار التحويل، والجهات الفاعلة، وكيفية نشر المكونات.

ثلاثة مستويات، واتجاه اعتماد واحد

تفصل A-REX بين ما يجب توحيده وما يجب فحسب أن يعمل:

الطبقات الأربع للمعيار

flowchart TB
    L3["الطبقة 3 · IARexAttest<br/>attest · revokeAttestation · isAttested · جهات إصدار موثوقة لكل موضوع"]
    L2["الطبقة 2 · IARexHook + IARexHookManager<br/>hookFlags · check → bytes32 · onExecuted · getHooks"]
    L1["الطبقة 1 · IARexBatch<br/>createBatch · batchOf · setBatchStatus · setBatchMetadata · transform · parentsOf"]
    L0["الطبقة 0 · ERC-1155 + ERC-165 + IERC7943MultiToken<br/>freeze · forcedTransfer · canSend · canReceive · canTransfer"]
    L3 --- L2 --- L1 --- L0
    classDef l3 fill:#edf5ff,stroke:#0f62fe,color:#161616
    classDef l2 fill:#d0e2ff,stroke:#0f62fe,color:#161616
    classDef l1 fill:#a6c8ff,stroke:#0f62fe,color:#161616
    classDef l0 fill:#78a9ff,stroke:#0043ce,color:#161616
    class L3 l3
    class L2 l2
    class L1 l1
    class L0 l0

مستويا المستودع واتجاه الاعتماد

flowchart LR
    STD["<b>المعيار</b><br/>standard/ · contracts/standard/<br/>معياري · CC0"]
    REF["<b>التنفيذ المرجعي</b><br/>ARexToken · ARexAttestations<br/>MIT"]
    DEMO["<b>العروض التوضيحية</b><br/>7 خطافات · 3 امتدادات<br/>MIT · غير معياري"]
    STD -->|يُنفَّذ بواسطة| REF -->|يُوضَّح بواسطة| DEMO
    DEMO -.->|تعتمد على الواجهات فقط| STD

لا يعتمد المعيار أبدًا على المرجع؛ ولا يعتمد الرمز أبدًا على الخطافات. أزل كل خطاف وكل امتداد، وسيبقى رمز مطابق قائمًا. وهذه هي الخاصية التي تتيح لطرف ثالث تنفيذ A-REX دون تبنّي أي شيء من هذا المستودع باستثناء ستة ملفات واجهات.

ما هي الدفعة

الدفعة هي معرّف رمز ERC-1155 له سجل:

struct Batch {
    address issuer;        // who created it (or performed the transformation)
    uint64  createdAt;
    uint8   status;        // 0 ACTIVE · 255 RETIRED (terminal) · 1..254 issuer-defined
    bytes32 commodity;     // keccak256("HS:100199"), keccak256("FAO:0111"), keccak256("GTIN:0779…")
    bytes32 unit;          // UN/CEFACT Rec. 20: "KGM", "TNE", "LTR", "BX"
    uint64  producedAt;    // 0 = not yet produced (pre-harvest)
    uint64  expiresAt;     // 0 = none
    bytes32 originRef;     // hash / reference to origin evidence — never coordinates
    bytes32 metadataHash;  // keccak256 of the off-chain document
    string  uri;           // where the document is
}

كل ما هو أغنى — الدرجة، والرطوبة، والبروتين، والتعبئة، ومعرّفات GS1، وكود دفعة التتبع، ومرجع إقرار EUDR، والتقارير المختبرية، وجدول حالات جهة الإصدار — يوجد في مستند البيانات الوصفية الذي تُلتزَم تجزئته على السلسلة. ويتبع المستند مخطط JSON Schema منشورًا متوائمًا مع EPCIS 2.0 ومع عناصر البيانات الرئيسية في FSMA 204.

مسار التحويل

يمرّ كل تغيير في الأرصدة — السك، والتحويل، والحرق، والتحويل القسري، والتحويل التصنيعي — عبر نقطة مرور واحدة في الرمز المرجعي. والترتيب ثابت وقابل للتدقيق:

flowchart TD
    A[safeTransferFrom / createBatch / burn / forcedTransfer / transform] --> B["قفل إعادة الدخول"]
    B --> C{"هل الحالة موقوفة مؤقتًا؟"}
    C -- نعم، وليس تحويلًا قسريًا --> X1[EnforcedPause]
    C -- لا --> D{"canSend للمُرسِل / canReceive للمستلم<br/>الاقتران المنطقي لخطافات ELIGIBILITY"}
    D -- false --> X2[ERC7943CannotSend / CannotReceive]
    D -- true --> E{"لكل معرّف: هل موجود؟ هل لم يُسحب من التداول؟<br/>هل الكمية ≤ الرصيد − المجمَّد؟"}
    E -- فشل --> X3[ARexBatchNotFound / ARexBatchRetired /<br/>ERC7943InsufficientUnfrozenBalance]
    E -- سليم --> F{"لكل معرّف، ولكل خطاف CHECK بالترتيب:<br/>check → الكود"}
    F -- الكود ≠ 0 --> X4["ARexHookRejected(hook, code)"]
    F -- كلها 0 --> G["تحديث الأرصدة · تتبّع إجمالي المعروض"]
    G --> H["لكل معرّف، ولكل خطاف EXECUTED: onExecuted"]
    H --> I["فتح القفل"]

تعيد دالتا عرض تشغيل المنطق نفسه دون تغيير الحالة: canTransfer (قيمة منطقية، كما يتطلب ERC-7943) وtransferCheck (أول كود رفض، لتتمكن واجهة المستخدم من إخبار المستخدم بالسبب).

تتجاوز التحويلات القسرية الإيقاف المؤقت وفحوص الأهلية — فالإنفاذ يجب أن يعمل حين يكون كل شيء آخر مجمّدًا — لكنها تشغّل الخطافات مع OP_FORCED_TRANSFER، ولذلك يمكن لخطاف أن يشترط مثلًا مرجع أمر قضائي في بيانات التحويل.

النسب

transform هي العملية الوحيدة للتقسيم والدمج والمعالجة:

graph LR
    W1["قمح #1<br/>250 طن · مزارع"] -- "transform (إعادة تكوين الدفعة)" --> W2["قمح #2<br/>100 طن · المشتري A"]
    W1 -- "transform (إعادة تكوين الدفعة)" --> W3["قمح #3<br/>150 طن · المشتري B"]
    W2 -- "transform (معالجة، TRANSFORMER_ROLE)" --> F4["دقيق #4<br/>75 طن · مطحنة"]
  • إعادة تكوين الدفعة (السلعة نفسها، ووحدة القياس نفسها، والكمية محفوظة) متاحة لأي حامل أو مشغّل معتمد: كتعاونية تقسّم دفعة صومعة بين أعضائها، أو مُصدِّر يدمج عمليات تسليم.
  • تتطلب المعالجة (أي شيء آخر) فضلًا عن ذلك TRANSFORMER_ROLE.
  • parentsOf(4) == [2]، وparentsOf(2) == [1]؛ وحدث BatchTransformed واحد لكل عملية، وهو TransformationEvent في EPCIS بحكم التصميم.

الإنفاذ

يستطيع ENFORCER_ROLE تجميد أي مقدار لأي حساب (setFrozenTokens، ويجوز أن يتجاوز الرصيد، كما يحدد ERC-7943) ونقل الرموز دون موافقة الحامل (forcedTransfer). وهذا ما يجعل رمز الدفعة قابلًا للاستخدام خارج العروض التوضيحية: مُقرِض ينفّذ على سند وارانت، أو محكمة تأمر بحجز حبوب مخزّنة، أو مستودع يستعيد دفعة بعد أن يفقد عميل مفاتيحه. وكل إجراء إنفاذ هو حدث.

الخطافات

الخطاف عقد له خمس دوال وخريطة بتات ثابتة للأعلام. ويخزّن الرمز الأعلام مؤقتًا عند التسجيل، فتكلّف عملية التحويل استدعاءً خارجيًا واحدًا لكل خطاف معنيّ، لا فحص واجهة واحدًا لكل قدرة في كل وحدة. ويعرف الخطاف الرمز المستدعي من msg.sender؛ ويمكن لنشر واحد أن يخدم رموزًا كثيرة.

تُوضّح الخطافات المرجعية القدرات الثلاث:

الخطافالقدرةما يثبته
EligibilityHookCHECK + ELIGIBILITYقوائم السماح والحظر والعقوبات تغذّي canSend / canReceive وتنتج أكواد دقيقة
ExpiryHookCHECKتقييد قابلية التلف وما قبل الحصاد مشتق بالكامل من سجل الدفعة
AttestationHookCHECK"يحتاج البن إلى إقرار EUDR مثبَت بإفادة قبل أن يجوز بيعه"
PerishabilityHookCHECKنماذج التدهور ودوال عرض القيمة؛ والدفعات المنتهية الصلاحية أو عديمة القيمة لا تنتقل
SeasonalHookCHECKنوافذ الحصاد والتداول لكل سلعة
DeliveryHookCHECK + EXECUTEDقفل الحيازة أثناء التسليم؛ والتسوية هي التحويل نفسه، ويُحدَّد بواسطة data
TraceabilityHookEXECUTEDسجل أحداث بصيغة EPCIS لكل عملية، إضافةً إلى أحداث التتبع الحرجة اليدوية

الامتدادات المرافقة (وليست خطافات): CommodityPriceOracle، وCarbonImmobilizationWrapper، وParametricInsurance.

الإفادات

يسجّل عقد مرافق (batch, topic) → (issuer, reference, validity). ولا يستطيع إصدار الإفادة إلا جهات الإصدار الموثوقة لموضوع ما؛ ويؤدي الإبطال وانتهاء الصلاحية وفقدان الثقة جميعًا إلى أن تُرجع isAttested القيمة false. والمواضيع من نوع bytes32، ولذلك تعمل مواضيع ادعاءات ERC-735 ومعرّفات مخططات Ethereum Attestation Service وتجزئات أسماء الشهادات جميعها دون جدول في المعيار.

الجهات الفاعلة والأدوار

الفاعلالدور المعتاد في الرمز المرجعيالإجراء المعتاد
المنصة المُنشِئة، أو التعاونية، أو صومعة الحبوبISSUER_ROLEcreateBatch
المزارع / الحامللا شيءالتحويل، وإعادة تكوين الدفعة، والحرق
المطحنة، أو شركة التعبئة، أو المعالِجTRANSFORMER_ROLEtransform للمعالجة
المستودع، أو المفتش، أو المنصةSTATUS_ROLEsetBatchStatus، setBatchMetadata
جهة منح الشهادات، أو المختبر، أو السلطةجهة إصدار موثوقة لموضوع ماattest
المُقرِض، أو الحارس المعيَّن بقرار قضائي، أو الامتثالENFORCER_ROLEsetFrozenTokens، forcedTransfer
الحوكمة (توقيع متعدد، وتأخير زمني)DEFAULT_ADMIN_ROLE، HOOK_ADMIN_ROLE، UPGRADER_ROLE، PAUSER_ROLEالأدوار، والخطافات، والترقيات، والإيقاف المؤقت

لا شيء في المعيار يثبّت هذه الأدوار؛ فهي الطريقة التي يمارس بها التنفيذ المرجعي بنود MUST ("مقيَّد بدور مخوَّل").

أشكال النشر

  • L2 عامة (Polygon وArbitrum وBase وOptimism): الأرخص والأكثر قابلية للتركيب؛ مناسبة لتداول السلع وتمويلها حيث تكون الأطراف المقابلة منشآت أعمال.
  • سلسلة EVM مقيّدة بتصاريح: حيث تشترطها سلطات حماية البيانات أو المؤسسة المحورية؛ ويشجّع EDPB صراحةً التصاميم المقيّدة بتصاريح. والمعيار محايد تجاه السلاسل.
  • هجينة: الدفعات على سلسلة عامة، والبيانات المقيّدة (مضلّعات قطع الأراضي، وهوية المنتِج) خلف تخزين خاضع للتحكم في الوصول يُشار إليه من البيانات الوصفية.

تُنشر الحزمة المرجعية بوحدة Ignition واحدة أو بسكربت واحد: وكيل الرمز، وسجل الإفادات، وخطافا الأهلية وانتهاء الصلاحية.

قرارات التصميم والبدائل التي تحل محلها

البديل الذي جرى النظر فيهA-REX Coreالسبب
واجهة نواة واسعة بتعدادات للسلعة والدرجة والحالةIARexBatch من 8 دوال مع أكواد مفتوحةلا شيء يُعاد نشره لمحصول أو نظام أو دورة حياة جديدة
واجهات قدرات تُفحص عند كل تحويلواجهة خطاف واحدة، مع تخزين الأعلام مؤقتًاالغاز خطي في عدد الخطافات، لا في المعرّفات × الوحدات × الفحوص
أسباب نصيةأكواد bytes32 وأخطاء محددة الأنواعمقروءة آليًا وقابلة للفهرسة
حالة دورة حياة يستطيع أي حامل تغييرهاالدور فقط؛ وRETIRED نهائيةالأمان
اشتراط أن يكون تاريخ الحصاد في الماضيالسماح بـ producedAt == 0تمويل ما قبل الحصاد
عدم وجود تقسيم / دمج / معالجةtransform + parentsOfالتتبع، وسحب المنتجات، وEPCIS
عدم وجود تجميد أو تحويل قسريERC-7943قابلية الإنفاذ
تخزين الإحداثيات على السلسلةمرجع المنشأ فقطGDPR / EDPB 02/2025
اشتراط عقدَي السجل والهويةلا يُشترط شيءلا حزمة هوية مفروضة