Skip to main contentA-REX Core

Диаграммы · 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
        Терминальный. Никакой эмиссии, никаких переводов, никаких преобразований.
        Сжигание остаётся возможным (списание, доставка).
    end note

От состояния до уборки урожая до переработанного товара

timeline
    title Один лот пшеницы: от форвардного контракта до муки
    До уборки урожая : createBatch с producedAt = 0 (форвард или дебиторская задолженность по урожаю)
                : ExpiryHook может блокировать переводы до уборки урожая (allowPreHarvest = false)
    Уборка урожая : setBatchMetadata с хешем документа об уборке урожая
            : producedAt задаётся переформированием партий через transform или при создании
    Хранение : AttestationHook требует аттестацию складской расписки
            : setFrozenTokens для обременения; forcedTransfer при дефолте
    Переработка : transform([пшеница], [60 т]) → [мука] (45 т) ролью TRANSFORMER_ROLE
               : событие BatchTransformed = EPCIS TransformationEvent
    Доставка : DeliveryHook блокирует единицы; расчёт — это перевод с data = deliveryId
             : setBatchStatus(255, "DELIVERED") либо burn получателем