Skip to main contentA-REX Core

आरेख · 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 तक घटाया जाता हैलागू
हुक checkOP_TRANSFEROP_FORCED_TRANSFERइनपुट और आउटपुट के लिए OP_TRANSFORM
हुक onExecutedहाँहाँहाँ