Files
MemRelay/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/出库-上链不变量与审核流约束.md

35 lines
2.4 KiB
Markdown

---
title: 出库/上链不变量与审核流约束
type: rule
permalink: main/projects/d44c219a-0b31-4de1-b160-323eb34a4c6a/出库-上链不变量与审核流约束
stable_id: a9739d28-4318-492e-bad3-53e9ea2769a8
scope: project
project_id: d44c219a-0b31-4de1-b160-323eb34a4c6a
memory_type: rule
status: active
revision: 1
restored_from_commit: 6a6a895eafcca6052e81a14fca103a42635dd1c2
created_at: '2026-09-23T15:07:29.222015+00:00'
updated_at: '2026-09-23T15:07:29.222081+00:00'
tags:
- outbound
- blockchain
- audit
- business-rule
---
出库/上链(前后端一致硬校验):
1. 上链与出库完全解耦:上链只发行追溯码数字身份,链上不含出库时间/备注/图片;可先上链后出库。
2. 出库不可撤销但可修改:每码至多一个 `OutboundRecord`,出库时间必填;`OutboundImage` 独立存储、不限张数、分页读取。
3. 批量上链不逐件调用:按作品元数据分组,每个 publish 请求最多 5000 个 productId;分片全局串行保护 `baseTokenId`。
4. 不允许重复铸造:`PENDING/SUBMITTING/CONFIRMING/ONCHAIN/UNKNOWN` 均禁止新铸,只有明确 `FAILED` 可重试;重试复用已持久化的精确请求与 `operateId`。
5. 未知结果优先保链上安全:网络中断/超时/HTTP 408、409、425、429、5xx/响应不完整 → UNKNOWN,禁止换新 operateId 重铸;只能原参数同步、补录交易哈希,或超管填原因确认失败后重试。
- 批量选择语义 IDS(跨页手选)/ FILTER(筛选全集+排除 ID);`JobItem.traceCodeId` 刻意允许为空(保留失败占位),不要改回非空外键。
- 上链作品必须启用、审核通过且有真实主图;本地 `/uploads/` 主图在发行前以 BASE_URL 转绝对地址。
审核变更流:
- 修改已通过档案写 `artwork_revision` 快照,审核通过才覆盖正式数据,C 端期间展示上一版。
- 超级管理员创建/修改自动审批通过(提交人/审核人为本人,不进待审);普通运营进待审;模板无审核模型直接生效。
- 节点、证书、showcaseImages、traceLayout、showOutboundTimeline 均无独立写接口,必须随作品快照提交;快照应用后统一触发证书水印 Worker。
- 历史修订快照缺字段时:showcaseImages 按空数组、showOutboundTimeline 按 false、traceLayout **不覆盖**当前正式布局。
- 空修改前后端双重拦截(“内容未变化,无需提交审核”)。