आरेख · 02
बैच जीवनचक्र
बैच कैसे अस्तित्व में आता है, चलता है, स्टेटस बदलता है, अन्य बैच बन जाता है और लेजर से बाहर जाता है। केवल निश्चित स्टेटस 0 (ACTIVE) और 255 (RETIRED, अंतिम) हैं; बीच की हर चीज़ जारीकर्ता परिभाषित करता है।
स्थितियाँ और संक्रमण
stateDiagram-v2
[*] --> ACTIVE : createBatch (ISSUER_ROLE)
[*] --> ACTIVE : transform आउटपुट
ACTIVE --> ACTIVE : safeTransferFrom · burn · forcedTransfer
ACTIVE --> Custom : setBatchStatus(1..254) (STATUS_ROLE)
Custom --> Custom : setBatchStatus (STATUS_ROLE)
Custom --> ACTIVE : setBatchStatus(0)
ACTIVE --> RETIRED : setBatchStatus(255, reason)
Custom --> RETIRED : setBatchStatus(255, reason)
RETIRED --> RETIRED : केवल burn
RETIRED --> [*] : totalSupply == 0
note right of RETIRED
अंतिम। कोई मिंट नहीं, कोई ट्रांसफ़र नहीं, कोई transform नहीं।
बर्न संभव रहते हैं (बट्टे खाते, डिलीवरी)।
end noteकटाई-पूर्व से प्रसंस्कृत वस्तु तक
timeline
title एक गेहूँ लॉट, फ़ॉरवर्ड कॉन्ट्रैक्ट से आटे तक
कटाई-पूर्व : producedAt = 0 के साथ createBatch (फ़ॉरवर्ड या फ़सल प्राप्य)
: ExpiryHook कटाई तक ट्रांसफ़र ब्लॉक कर सकता है (allowPreHarvest = false)
कटाई : कटाई दस्तावेज़ के हैश के साथ setBatchMetadata
: producedAt री-बैच transform द्वारा या निर्माण के समय सेट होता है
भंडारण : AttestationHook वेयरहाउस रसीद एटेस्टेशन अनिवार्य करता है
: ग्रहणाधिकार के लिए setFrozenTokens; चूक पर forcedTransfer
प्रसंस्करण : TRANSFORMER_ROLE द्वारा transform([wheat], [60 t]) → [flour] (45 t)
: BatchTransformed इवेंट = EPCIS TransformationEvent
डिलीवरी : DeliveryHook इकाइयाँ लॉक करता है; निपटान data = deliveryId के साथ ट्रांसफ़र है
: प्राप्तकर्ता द्वारा setBatchStatus(255, "DELIVERED") या burn