请求生命周期
商业试点为每个请求持久化一套失败关闭状态机。
等待审批 -> 已审批 -> 已授权 -> 已执行
| |
+-> 已拒绝 +-> 已过期
系统可以在请求保持“已授权”的同时追加 validation_completed 证据事件。它只证明外部验证回执已生成,不代表交易已经构造、广播或确认。
状态转换负责人
| 转换 | 所需角色 | 主要检查 |
|---|---|---|
| 提交 | 发起人 | 精确策略范围、金额、精度、目标和幂等性 |
| 审批 | 合格审批人 | 人员资格、禁止重复、发起人与审批人分离 |
| 拒绝 | 合格审批人 | 请求尚未终止,并记录拒绝原因 |
| 授权 | 安全管理员 | 达到审批门限,绑定精确策略和证据 |
| 执行 | 执行人 | 有效授权证书、有效期和适配器幂等性 |
| 查看/导出 | 审计人或已认证操作员 | 不改变状态 |
重试与幂等
- 请求 ID 从租户和幂等上下文确定性派生。
- 完全相同的重试返回已有记录。
- 相同幂等键下修改业务字段会失败并返回冲突。
- 外部适配器必须先按稳定请求 ID 对账,再考虑重新提交。
- 终态请求不能再次审批、拒绝、授权或执行。
失败模型
| 类别 | 常见 API 结果 | 操作方式 |
|---|---|---|
| 非法或不符合策略的输入 | 400 | 修改请求,不要原样重试 |
| 凭据缺失或无效 | 401 | 使用正确的私密凭据重新认证 |
| 角色错误或人员不合格 | 403 | 转交策略指定的角色处理 |
| 请求不存在 | 404 | 核对请求 ID 和环境 |
| 幂等或状态冲突 | 409 | 获取已有记录并进行对账 |
| 服务方结果不确定 | 请求保持可对账 | 重提之前先查询服务方或链上状态 |
| 授权过期 | 终态 expired 证据 | 按当前策略创建新请求 |
错误响应的精确格式尚未承诺在所有候选版本间保持稳定。合作方应优先依据 HTTP 类别和稳定请求状态处理,并保留经过长度限制的诊断信息供审查。