主题
05 · 数据流与状态视图
CBDC 系统中"状态"由 4 个存储分担。本章只描述代码与配置中可定位的事实。
4 个数据存储
链上:Fabric-X Ledger
权威源头。所有 token 状态以 UTXO 形式存在区块中。
| 项 | 出处 |
|---|---|
| Token 驱动 | cbdc-biz/conf/<role>/core.yaml: token.tms.mytms.driver: zkatdlog |
| 块流订阅 | Committer Sidecar Deliver gRPC(fabric-x-committer · 核心流程) |
| Fabric 通道 | arma(cbdc-biz/conf/endorser1/core.yaml: fabric.default.channels[0].name) |
zkatdlog 驱动下,链上的 token output 是承诺值 + ZK proof(fabric-token-sdk · 概述)。
应用本地:FSC + Token SDK
来源:各 cbdc-biz/conf/<role>/core.yaml: fsc.persistences.default。
| 配置项 | 值(来自 endorser1) |
|---|---|
fsc.persistences.default.type | postgres(conf/endorser1/core.yaml:28) |
fsc.persistences.default.opts.dataSource | ...dbname=cbdc_endorser1...(:30) |
每个 FSC 节点(endorser1 / issuer / auditor / institution-001)连接独立 PostgreSQL 库:cbdc_endorser1 / cbdc_issuer / cbdc_auditor / cbdc_institution(dataSource 内 dbname=,各 conf/<role>/core.yaml)。Token SDK 在其上维护 TTXDB / TokenDB / AuditDB 等存储(具体表结构由 Token SDK 内部定义,见 fabric-token-sdk · 模块详解)。
BizHub PostgreSQL:18 张 ent 表
来源:cbdc-biz/app/bizhub/internal/data/ent/schema/、cbdc-chain/apps/bizhub。
表名为 ent 默认复数形式:18 个 schema 文件均无 Annotations() / Table 覆盖,ent 对 snake_case 实体名做复数化(原生 SQL 实证 settlement_requests、ledger_transactions,见 settlement_repo.go:334、ledger_indexer_repo.go:206)。
| 表(schema 文件) | 用途 |
|---|---|
settlement_requests(settlement_request.go) | 结算请求生命周期(ISSUANCE / REDEMPTION) |
wallet_lifecycles + wallet_status_logs + wallet_metas | 钱包创建 / 关闭 / 状态 / 元数据 |
institutions(institution.go) | 机构主记录 |
auth_clients(实体 AuthClient,client.go) | 客户端凭证 |
asset_marks + asset_mark_limits | 资产标记定义 + 限额 |
wallet_tags | 钱包标签 |
approval_requests | 审批流 |
fee_configs + fee_transactions | 费用配置 + 历史 |
tx_selector_groups | 规则组(嵌套) |
audit_rejection_logs | 审计拒绝日志 |
account_types | 账户类型代码表 |
index_cursors | 链上索引分片光标(FinalityCaptureWorker 持久化点) |
ledger_transactions | 链上交易索引(由 FinalityCaptureWorker 写入) |
auditor_rulesets | 审计规则集 |
DB client 设置(cbdc-biz/app/bizhub/internal/data/ent_client.go:16-63):
| 字段 | 值 |
|---|---|
| 驱动 | PostgreSQL(lib/pq) |
MaxIdleConns | 15 |
MaxOpenConns | 50 |
ConnMaxLifetime | 30m |
ConnMaxIdleTime | 5m |
| auto-migrate | client.Schema.Create(ctx)(ent_client.go:55) |
Auditor 索引:FinalityCaptureWorker
来源:cbdc-chain/apps/auditor · sidecar + worker、cbdc-biz/app/auditor/internal/worker/。
参数(实测自 cbdc-biz/conf/auditor/core.yaml:47-53,参考 auditor · conf):
batch_size: 200flush_interval: 1squeue_depth: 10000append_timeout: 5sretry_initial: 0.1s/retry_max: 30s/restart_backoff: 5s
测试覆盖(auditor · 测试):
internal/worker/finality_capture_worker_test.go— 547 行internal/worker/lookup_ttx_test.go— 82 行internal/sidecar/sidecar_test.go— 39 行
UTXO 选币:Token Selector
来源:cbdc-biz/pkg/token_selector/config.go:61-71、cbdc-biz/conf/institution-001/core.yaml:35-36。
| 模式 | 配置 | 后端 |
|---|---|---|
memory | token_selector.mode: memory(institution-001 默认) | 进程内存 |
distributed | token_selector.redis.{addr,password,db,max_tokens_per_bucket} | Redis |
institution-001 当前启用 mode: memory;distributed 模式的 Redis 配置示例(addr: host.docker.internal:6379)在 conf/institution-001/core.yaml:27-34 以注释形式预留。
数据流:写入路径
数据流:读取路径
| 查询 | 入口 | 数据源 |
|---|---|---|
| 钱包余额 | AuditorService.GetBalance(cbdc-biz/app/auditor/internal/service/auditor.go:28-40) | Token SDK TMS(链上 + 本地 TokenDB) |
| 钱包余额(Institution) | InstitutionOpsService.GetWalletBalance(app/institution/internal/service/wallet_service.go:101) | 同 |
| 交易历史 | AuditorService.GetHistory / ListTransactions | Token SDK AuditDB / TTXDB |
| 链上索引(fast read) | BizHub IndexerService.ListLedgerTransactions / GetLedgerTransaction(api/cbdc-biz/v1/bizhub/indexer.proto:42-46) | BizHub ledger_transactions 表 |
| 结算请求 | BizHub SettlementService.QueryRequest(settlement_service.go:78) | BizHub settlement_requests 表 |
| 资产标记 | InstitutionOpsService.GetAssetMarks(app/institution/internal/service/mark_service.go:51) | 本地 pkg/common/marked 缓存 + BizHub asset_marks 表 |
配置同步链路
来源:各应用 main.go 中 *.Init 调用与 syncutil.StartPeriodicSync(cbdc-chain/apps/institution)。
syncutil.StartPeriodicSync(interval, fn) 按调用方传入的 interval 周期执行;规范默认周期 DefaultSyncInterval = 1 分钟,用于 marked / tx_selector / auditor / fee 后台同步(pkg/common/syncutil/periodic.go:11)。
Auditor 缓存与撤销列表
来源:cbdc-biz/app/auditor/cmd/auditor/main.go:176-192、cbdc-biz/pkg/common/revocation/。
| 缓存 | 实现 | 刷新 |
|---|---|---|
| 撤销列表 | pkg/common/revocation | refreshInterval = 30s(pkg/common/revocation/cache.go:32,于 main.go:186 初始化) |
| 资产标记 | pkg/common/marked | 由 syncutil.StartPeriodicSync 触发 |
| 审计规则 | pkg/common/auditor | 同 |
本地开发下 Auditor 与 BizHub 共用同一 cbdc_local_db PostgreSQL 实例,但分属不同库:cbdc_auditor(FSC)与 cbdc_bizhub(ent,compose-local-run.yml:54-55)。
[未核]
ledger_transactions表与 Token SDK AuditDB 之间的数据重叠度(两者都索引链上交易,但 schema 不同)。