主题
BUS-09 跨行 P2P 转账
BUS-09.1 目标与 DTS 依据
验证跨行个人转账端到端执行 DTS 规范的准备—签名—提交契约:付款钱包(银行 A 服务的 P1)向收款钱包(银行 B 服务的 P2)转账,WalletNode 预留输入并构建 ZKAT 证明与规范 prepared request,付款人资产持有银行的受保护 Idemix Holder 对准确 prepared request 签名,账本提交记账赋予最终性,双方经权威状态查询取得一致结果并可对账。
跨行口径:本原型中「跨行」指付款钱包与收款钱包分别由不同银行(A/B)建立并服务、由付款人侧银行作为平台调用方完成授权与提交;钱包本身机构中立(§7.4),不因跨行而改变账本处理路径。
| 追溯项 | 依据 |
|---|---|
| DTS 功能场景 | §14.3 场景 6「P2P 转账」(A 类核心,§14.6 完整场景卡) |
| DTS 章节 | §13 交易生命周期(§13.3 状态、§13.4 取消)、§14.6 全节、§15.3 转账与交易模块、§9.5/9.6 可用余额与输入锁 |
| DTS 测试目录 | TC-P2P-001–009 |
| 需求依据 | 《技术描述》附录 1 §§4.3.2、4.8、6.1.4;附录 2 §1.1.2 |
| 追溯登记 | 附录 A |
BUS-09.2 参与角色
| 角色 | 职责 |
|---|---|
| 付款人 P1 及银行 A 渠道 | 确认收款人、金额并发出指令 |
| 银行 A(付款人资产持有银行) | 平台调用方:发起 Prepare、核验业务结果、驱动 Idemix Holder 签名、Submit |
| 银行 A 受保护 Idemix Holder | 对准确 prepared request 签名 |
| WalletNode / 归属分片 | 选择并预留输入、构建 ZKAT 证明与规范 prepared request、保存 NBKR 私有审计包、Submit 时重新校验 |
| 收款人 P2 及银行 B 渠道 | 解析收款数据、展示最终入账 |
| 权威账本 | 排序、确定性验证、提交记账(FINAL 唯一来源) |
BUS-09.3 前置条件
- BUS-06 已通过:P1(银行 A)、P2(银行 B)钱包均
ACTIVE且可发送/接收; - BUS-10 已通过(或先行执行):P1 钱包持有充足可用余额;
- 银行 A 关系 Idemix 凭据有效;收款人解析方式(钱包 ID/获批别名)已约定;
- 限额与风险测试配置已记录;
- 记录转账前基线:P1、P2 钱包账本余额与 UTXO 清单。
BUS-09.4 测试数据
| 数据项 | 要求 | 记录值 |
|---|---|---|
| 转账金额 | 小于 P1 可用余额且触发找零 | 待执行时填写 |
| 付款钱包 | P1(银行 A,类别 10) | 待执行时填写 |
| 收款钱包 | P2(银行 B,类别 10) | 待执行时填写 |
| 参与方业务引用 | 银行 A 侧稳定引用,重复用例复用 | 待执行时填写 |
| 超额金额 | 大于 P1 可用余额,用于余额不足用例 | 待执行时填写 |
| 第二笔小额转账 | 用于提交前取消用例 | 待执行时填写 |
BUS-09.5 执行步骤(对应 §14.6.5 主流程)
| 步骤 | 执行方 | 操作 | 预期结果 | 实际结果 | 证据编号 | 状态 |
|---|---|---|---|---|---|---|
| 1 | P1/银行 A 渠道 | 选择收款人 P2、输入金额、复核并确认 | 参与方本地 CREATED;不影响余额 | 待执行 | 待填写 | 待执行 |
| 2 | 银行 A | 携稳定业务引用发起 PrepareTransfer | 平台受理 SUBMITTED → ACCEPTED;网关认证、授权、结构校验通过 | 待执行 | 待填写 | 待执行 |
| 3 | 归属分片 | 解析钱包、检查状态/限额/风险/可用余额,选择并预留 UTXO,保存准备状态 | 返回 tx_id、选定输入引用、待签请求及业务结果;被选 UTXO 进入交易范围输入锁;账本无变化 | 待执行 | 待填写 | 待执行 |
| 4 | 银行 A | 对照付款指令核验收款人、金额、费用与汇总 | 业务核验通过并记录 | 待执行 | 待填写 | 待执行 |
| 5 | 银行 A Holder | 对准确 prepared request 执行 Idemix 签名 | 签名绑定该 prepared transaction | 待执行 | 待填写 | 待执行 |
| 6 | 银行 A | SubmitTransfer:提交同一 tx_id、preparation 引用、关系/member 引用及 Idemix 签名 | 平台取回 preparation,验证调用方、交易绑定、凭据、签名、已保存 ZKAT 证明、策略与当前账本状态 | 待执行 | 待填写 | 待执行 |
| 7 | 平台/账本 | 审计、背书、广播;账本排序、确定性验证并提交记账 | ORDERED → COMMITTED/FINAL;付款输入原子花费,生成 P2 收款 UTXO 与 P1 找零 UTXO | 待执行 | 待填写 | 待执行 |
| 8 | 银行 A | 以 tx_id 执行经认证状态查询 | 返回 FINAL、最终性时间与账本引用 | 待执行 | 待填写 | 待执行 |
| 9 | 银行 B | 查询 P2 钱包与交易状态 | P2 入账金额正确;双方看到同一交易 ID 与同一终态 | 待执行 | 待填写 | 待执行 |
| 10 | 验收方 | 余额核对 | P1 减少额 = P2 增加额 = 转账金额;找零回到 P1;与基线 UTXO 差异一致 | 待执行 | 待填写 | 待执行 |
BUS-09.6 预期核对点
- 状态机(§14.6.8):
CREATED(参与方本地)→SUBMITTED→ACCEPTED→ 准备态 →ORDERED→COMMITTED/FINAL;TIMEOUT不是终态;任何渠道不得赋予最终性; - 一次借记一次贷记:同一指令不产生重复借贷;账本提交是唯一余额变更点,准备/受理/索引均不改变正式余额(§14.6.11);
- 可用余额语义(§9.5):Prepare 后 P1 可用余额 = 账本余额 − 被输入锁锁定输出;不存在「预留余额」呈现;
- 授权绑定:Idemix 签名、ZKAT 证明、preparation 三者共同绑定同一
tx_id,任何一项被替换即拒绝; - 审计(§14.6.15):指令引用、机构身份、Request ID、输入预留、签名验证、账本引用、状态查询全链路可追溯,无 Idemix Secret/ZKAT 开值入日志。
BUS-09.7 负向与异常用例(对应 §14.6.17 + TC-P2P)
| 用例 | 操作 | 预期结果 | 实际结果 | 证据编号 | 状态 |
|---|---|---|---|---|---|
TC-P2P-002 | 以超额金额发起转账 | REJECTED;不花费、不锁定 UTXO | 待执行 | 待填写 | 待执行 |
TC-P2P-003 | 触发限额/策略拒绝(测试配置) | REJECTED 或 UNDER_REVIEW;不提交记账 | 待执行 | 待填写 | 待执行 |
| 未知收款人 | 使用不存在/无权解析的收款标识 | 安全拒绝,无越权数据披露 | 待执行 | 待填写 | 待执行 |
TC-P2P-004 | 篡改 prepared request 后提交,或用被停用凭据签名 | REJECTED;安全与审计事件;不提交记账 | 待执行 | 待填写 | 待执行 |
TC-P2P-005a | 对同一 tx_id 重复 Submit | 返回既有权威结果;不产生第二次转账 | 待执行 | 待填写 | 待执行 |
TC-P2P-005b | 对同一 tx_id 提交变更后的载荷 | 稳定拒绝;不创建新操作 | 待执行 | 待填写 | 待执行 |
TC-P2P-006 | Submit 后掐断响应(结果未知),随后查询 | 交易保持权威终态;查询返回 FINAL;不创建替代交易 | 待执行 | 待填写 | 待执行 |
| 提交前取消 | 第二笔转账 Prepare 后取消 | CANCELLED;输入锁安全释放;账本无影响 | 待执行 | 待填写 | 待执行 |
| 最终后取消 | 对已 FINAL 交易发起取消 | 拒绝;原状态保持权威 | 待执行 | 待填写 | 待执行 |
| 钱包受限 | 将 P2 置 SUSPENDED 后发起转账,验后恢复 | 受治理拒绝;恢复 ACTIVE 后可正常转账 | 待执行 | 待填写 | 待执行 |
BUS-09.8 执行信息、结果与签署
| 项目 | 记录 |
|---|---|
| 原型版本与镜像摘要 | 待执行时填写 |
| 测试环境 | 待执行时填写 |
| 执行日期与参与人员 | 待执行时填写 |
tx_id/账本引用 | 待执行后填写 |
| P1/P2 钱包 ID 与前后余额 | 待执行后填写 |
| 执行结果 | 待执行 |
| 问题/偏差(附录 F 编号) | 待填写 |
| 复测结论 | 待填写 |
| 甲方业务代表签署 | 待填写 |
| 服务商执行代表签署 | 待填写 |