示意图 · 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 上下文 |