आरेख · 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: बैच मौजूद है · status != 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 | हाँ | हाँ | हाँ |