Skip to content

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 通道armacbdc-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.typepostgresconf/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_requestsledger_transactions,见 settlement_repo.go:334ledger_indexer_repo.go:206)。

表(schema 文件)用途
settlement_requestssettlement_request.go结算请求生命周期(ISSUANCE / REDEMPTION)
wallet_lifecycles + wallet_status_logs + wallet_metas钱包创建 / 关闭 / 状态 / 元数据
institutionsinstitution.go机构主记录
auth_clients(实体 AuthClientclient.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
MaxIdleConns15
MaxOpenConns50
ConnMaxLifetime30m
ConnMaxIdleTime5m
auto-migrateclient.Schema.Create(ctx)ent_client.go:55

Auditor 索引:FinalityCaptureWorker

来源:cbdc-chain/apps/auditor · sidecar + workercbdc-biz/app/auditor/internal/worker/

参数(实测自 cbdc-biz/conf/auditor/core.yaml:47-53,参考 auditor · conf):

  • batch_size: 200
  • flush_interval: 1s
  • queue_depth: 10000
  • append_timeout: 5s
  • retry_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-71cbdc-biz/conf/institution-001/core.yaml:35-36

模式配置后端
memorytoken_selector.mode: memory(institution-001 默认)进程内存
distributedtoken_selector.redis.{addr,password,db,max_tokens_per_bucket}Redis

institution-001 当前启用 mode: memorydistributed 模式的 Redis 配置示例(addr: host.docker.internal:6379)在 conf/institution-001/core.yaml:27-34 以注释形式预留。

数据流:写入路径

数据流:读取路径

查询入口数据源
钱包余额AuditorService.GetBalancecbdc-biz/app/auditor/internal/service/auditor.go:28-40Token SDK TMS(链上 + 本地 TokenDB)
钱包余额(Institution)InstitutionOpsService.GetWalletBalanceapp/institution/internal/service/wallet_service.go:101
交易历史AuditorService.GetHistory / ListTransactionsToken SDK AuditDB / TTXDB
链上索引(fast read)BizHub IndexerService.ListLedgerTransactions / GetLedgerTransactionapi/cbdc-biz/v1/bizhub/indexer.proto:42-46BizHub ledger_transactions
结算请求BizHub SettlementService.QueryRequestsettlement_service.go:78BizHub settlement_requests
资产标记InstitutionOpsService.GetAssetMarksapp/institution/internal/service/mark_service.go:51本地 pkg/common/marked 缓存 + BizHub asset_marks

配置同步链路

来源:各应用 main.go*.Init 调用与 syncutil.StartPeriodicSynccbdc-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-192cbdc-biz/pkg/common/revocation/

缓存实现刷新
撤销列表pkg/common/revocationrefreshInterval = 30spkg/common/revocation/cache.go:32,于 main.go:186 初始化)
资产标记pkg/common/markedsyncutil.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 不同)。