主题
05 · 数据流与状态视图
本章只描述当前源码、迁移文件和开发配置能够直接证明的状态边界。
状态分层
| 状态域 | 当前权威位置 | 代码依据 |
|---|---|---|
| Token 所有权与交易终局 | Fabric-X ledger | dev/config/network/、Token View 广播与 finality 处理 |
| 各 FSC 节点视图与 Token 投影 | 节点独立 PostgreSQL | dev/config/token/*/core.yaml: fsc.persistences |
| 机构、钱包元数据、结算、费用、节点注册、链上索引 | BizHub 的 cbdc_biz | cbdc-bizhub/internal/data/ent/schema/ 与 migrations |
| 用户、角色、会话、审批、通知、系统审计 | Central 的 cbdc_central | cbdc-central/internal/data/ent/schema/ 与 migrations |
| Prepare/Submit 之间的待签交易 | Wallet Node 进程内 PendingTransactionStore | app/walletnode/internal/biz/biz.go |
Central 与 BizHub 不共享数据库。Central 通过 BizHub management RPC 管理机构及业务配置;不能再把 Central 描述为直接读写 cbdc_biz。
Token driver 与配置集
仓库存在两套有效配置,不能把 driver 写成全局固定值:
| 配置集 | Token driver | 公共参数文件 |
|---|---|---|
dev/config/token/* | zkatdlog | zkatdlognoghv1_pp.json |
cbdc-token/conf/* | fabtoken | fabtoken1_pp.json |
两套配置的 Fabric 网络驱动都是 fabricx。因此链上数据是否包含隐私承诺与证明,必须按实际加载的 core.yaml 判断。
FSC 节点本地库
开发控制器启动的四个 Token 节点分别使用:
| 节点 | 开发配置中的数据库 |
|---|---|
| Endorser | cbdc_endorser1 |
| Issuer | cbdc_issuer |
| Auditor | cbdc_auditor |
| Wallet Node | cbdc_institution |
cbdc-token/conf/walletnode-1/core.yaml 的独立模板使用 cbdc_walletnode,而 dev/config/token/walletnode-1/core.yaml 为兼容现有开发数据使用 cbdc_institution。文档或排障时应先确认正在加载哪套配置。
BizHub 数据模型
cbdc-bizhub/internal/data/ent/schema/ 当前有 20 个 schema 文件,覆盖:
- 机构与认证客户端;
- 钱包生命周期、状态日志、元数据、标签;
- 资产标记与限额、费用配置与费用交易、交易选择规则;
- 结算请求、审计拒绝、系统消息;
- 节点注册及注册表元数据;
- 链上交易索引与分片 cursor。
BizHub 使用显式版本化迁移。入口为 bizhub migrate,迁移记录由 bizhub_schema_migrations 管理;不应再写成应用启动时调用 Ent auto-migrate。
Central 数据模型
Central 使用独立的 cbdc_central。internal/data/ent/schema/ 中 9 个实体文件定义 14 个实体,主要包括用户、角色、权限关联、会话、WebAuthn credential、审批主体及步骤/决定、通知和系统审计日志。mixin.go 是共享 mixin,不是独立实体。
Central 同样通过 central migrate 执行版本化迁移。
交易写入路径
Facade 不是 Token 状态源。它校验银行侧 Ed25519 请求签名,从 BizHub 获取调用方和路由信息,再把请求转给 Wallet Node。
PendingTransactionStore 位于 Wallet Node 进程内,Submit 必须到持有对应 tx_id 的实例,除非部署层提供粘性路由或代码改为共享 pending store。
链上索引回流
Auditor 的 FinalityCaptureWorker 从 sidecar block source 读取区块,批量查询交易,再调用 BizHub IndexerService.AppendBatch。BizHub 在同一事务中写入 ledger_transactions 并推进 index_cursors。启动时 worker 通过 GetCursor 恢复位置。
该 worker 的 enabled 默认值由实际 Auditor 配置决定;源码中的集成说明明确支持关闭,因此不能假定所有部署都在写 BizHub 索引。
读取路径
| 查询 | 主要入口 | 数据源 |
|---|---|---|
| 钱包余额与钱包信息 | Facade WalletService → Wallet Node WalletNodeOpsService | Wallet Node 的 Token 投影与钱包服务 |
| 转账准备与提交 | Facade TransferService → Wallet Node | FSC View、Panurus、进程内 pending store |
| 银行侧交易列表 | Facade TransactionService → Wallet Node | Wallet Node 查询服务 |
| 审计余额/历史 | Auditor RPC | Auditor 的 Token/Audit 投影 |
| 机构、规则、结算和索引 | BizHub runtime / management API | cbdc_biz |
| 用户、审批、通知、系统审计 | Central API | cbdc_central |
配置同步与节点发现
cbdc-common/syncutil为资产标记、规则和费用等本地缓存提供周期同步框架。- Auditor 与 Endorser 通过
NewNodeRegistrarForNode把自身 P2P/View 地址注册到 BizHub。 - Issuer 与 Wallet Node 通过
NewNodeResolverSyncForNode拉取 Auditor/Endorser 快照并更新 FSC endpoint service。 - FSC P2P 当前走 WebSocket + TLS;证书同时带
clientAuth与serverAuth,并包含节点域名、短名与localhostSAN。