المخططات · 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_TRANSFER | OP_FORCED_TRANSFER | OP_TRANSFORM للمدخلات والمخرجات |
onExecuted في الخطافات | نعم | نعم | نعم |