Skip to main contentA-REX Foundation

المخططات · 03

مسار التحويل

كل تغيير في الأرصدة في الرمز المرجعي يمر عبر دالة واحدة. والترتيب أدناه ثابت؛ وتعيد transferCheck وcanTransfer تشغيله بوصفهما دالتي عرض.

تسلسل عملية تحويل مع خطافين

sequenceDiagram
    autonumber
    participant U as الحامل / المشغّل
    participant T as ARexToken._update
    participant E as EligibilityHook (CHECK, ELIGIBILITY)
    participant X as ExpiryHook (CHECK)
    participant R as TraceabilityHook (EXECUTED)
    U->>T: safeTransferFrom(from, to, id, amount, data)
    T->>T: قفل (إعادة الدخول) · غير موقوف مؤقتًا
    T->>E: canSend(from) / canReceive(to)
    E-->>T: true / true
    T->>T: الدفعة موجودة · الحالة != RETIRED · amount ≤ balance − frozen
    T->>E: check(OP_TRANSFER, operator, from, to, id, amount, data)
    E-->>T: OK
    T->>X: check(OP_TRANSFER, …)
    X-->>T: OK
    T->>T: super._update (الأرصدة، المعروض)
    T->>R: onExecuted(OP_TRANSFER, …)
    R-->>T: إصدار حدث بصيغة EPCIS
    T->>T: فتح القفل
    T-->>U: TransferSingle

ما يحدث عند الرفض

flowchart LR
    A["تُرجع check كودًا ≠ 0"] --> B["revert ARexHookRejected(hook, code)"]
    B --> C["لا يتغير أي رصيد"]
    B --> D["لا يُصدَر TransferSingle"]
    B --> E["تحوّل الواجهة الأمامية الكود إلى رسالة<br/>مثلًا keccak256('AREX:BATCH_EXPIRED')"]

ترتيب التقييم ومن يستطيع تجاوز ماذا

الخطوةتحويل الحاملforcedTransfer (ENFORCER_ROLE)transform
القفلنعمنعمنعم
الإيقاف المؤقتيمنعلا يمنعيمنع
canSend / canReceiveنعميُتجاوزنعم (المدخلات من from، والمخرجات إلى to)
الرصيد المجمّديُفرَضيُخفَّض إلى balance − amountيُفرَض
check في الخطافاتOP_TRANSFEROP_FORCED_TRANSFEROP_TRANSFORM للمدخلات والمخرجات
onExecuted في الخطافاتنعمنعمنعم