Диаграммы · 04
Родословная через transform
transform — единственный способ получить партию из партии. Он сжигает входы, эмитирует выходы и фиксирует родителей; BatchTransformed соответствует EPCIS 2.0 TransformationEvent один к одному.
Разделение, объединение и переработка — одна операция
flowchart LR
subgraph SPLIT["Переформирование партий (разделение) · роль не нужна · тот же товар и единица измерения · количество сохраняется"]
W1["#1 пшеница 250 т"] --> W2["#2 пшеница 60 т"]
W1 --> W3["#3 пшеница 40 т"]
end
subgraph MERGE["Переформирование партий (объединение)"]
M1["#4 кофе 10 т"] --> M3["#6 кофе 25 т"]
M2["#5 кофе 15 т"] --> M3
end
subgraph PROC["Переработка · TRANSFORMER_ROLE · меняется товар или количество"]
P1["#2 пшеница 60 т"] --> P2["#7 мука 45 т"]
endРодителей можно запрашивать ончейн
flowchart TB
F7["parentsOf(7) → [2]"] --> F2["parentsOf(2) → [1]"] --> F1["parentsOf(1) → []"]Отзыв проходит по parentsOf назад до источника, а по событиям BatchTransformed — вперёд до каждого производного лота. Аудит массового баланса сравнивает количества входов и выходов каждого этапа переработки с сертифицированным соотношением.
Правила, которые обеспечивает эталонная реализация
| Правило | Где |
|---|---|
Входы должны существовать, не быть погашенными и принадлежать from (или вызывающему, одобренному from) | transform, _update |
| Переформирование партий (тот же товар, та же единица измерения, Σ входов = Σ выходов) не требует роли | проверка isRebatch |
Всё остальное требует TRANSFORMER_ROLE | transform |
Каждый выход фиксирует parents = inputIds и issuer = msg.sender | хранилище |
Хуки видят OP_TRANSFORM для входов и выходов | контекст _update |