Skip to content

01 · 系统整体架构

顶层目录树(实测)

来源:ls cbdc-chain/

cbdc-chain/
├── cbdc-biz/         业务应用(5 个 app + rtgs-mock 工具)
├── cbdc-network/     Fabric-X 网络编排(Makefile 驱动)
├── cbdc-infra/       基础设施镜像(Makefile 仅 build-cbdc-tool 有实际构建 recipe)
├── cbdc-stress/      压测工具(纯 Go)
├── open-docs/        公开 VitePress 文档
├── tests/            独立 go.mod(cbdc-chain-tests)
├── scripts/          start-kms-system.sh / check-auditor-key.sh
├── docs/             历史设计文档(与代码脱节,本 wiki 不依赖)
└── README.md

cbdc-chain/README.md:32-33 描述的 retail/ / wholesale/ 实际不存在(已修正);此外 ARCHITECTURE.md 描述的 cbdc-monitoring/ 目录在仓库中也不存在。

cbdc-infra 的 Makefile 中只有 build-cbdc-tool 写了真正的构建命令(cbdc-infra/Makefile:18-22,产出 cbdc-tool 镜像)。build-allcbdc-infra/Makefile:15)虽把 build-ca-server-kms 列为前置目标,但 Makefile 未定义该目标的 recipe,make build-all 不会构建出 cbdc-ca-server-kms。该镜像由 compose 以 ${CA_SERVER_KMS_IMAGE} 形式引用并直接拉取(cbdc-biz/docker/compose-local-run-infra.yml:25,容器内跑 fabric-ca-server,编译带 pkcs11 tag 经 PKCS#11 委托 KMS)。

5 个业务应用 + 1 个工具

来源:ls cbdc-biz/app/ls cbdc-biz/cmd/、各 cmd/<name>/main.gocbdc-biz/conf/<role>/core.yaml

应用入口gRPCFSC P2P配置
Endorsercbdc-biz/app/endorser/cmd/endorser/main.go93009301cbdc-biz/conf/endorser1/core.yaml:7, 24
Issuercbdc-biz/app/issuer/cmd/issuer/main.go91009101cbdc-biz/conf/issuer/core.yaml:9, 30
Auditorcbdc-biz/app/auditor/cmd/auditor/main.go97509751cbdc-biz/conf/auditor/core.yaml:16, 67
Institution-001cbdc-biz/app/institution/cmd/institution/main.go95009501cbdc-biz/conf/institution-001/core.yaml:8, 46
BizHubcbdc-biz/app/bizhub/cmd/bizhub/main.go9000cbdc-biz/conf/bizhub/core.yaml:50
rtgs-mock(工具)cbdc-biz/cmd/rtgs-mock/main.gocompose-rtgs-mock.yml 启动;用于本地模拟 RTGS

详见各 app 深度页:auditor / bizhub / endorser / institution / issuer

5 个 app 的运营方与职责

来源:综合各应用 cmd/<app>/main.gocbdc-biz/conf/<role>/core.yamlpkg/views/*

应用运营方技术栈主要职责关键代码
institution-001商业银行(per-bank 一个实例)Kratos + FSC + Token SDK托管用户钱包;发起转账 / 赎回;对外 REST(/api/v1/wallets/* / /api/v1/transfers/*);UTXO 选币;钱包审批轮询cbdc-biz/app/institution/cmd/institution/main.gopkg/views/{transfer,accept_transfer}.gopkg/token_selector/
bizhub中央银行Kratos + gRPC跨机构清算编排;发行 / 赎回 RPC 路由;RTGS 网关;三 Worker(Pending / Retry / Timeout)cbdc-biz/app/bizhub/cmd/bizhub/main.go:42-54internal/biz/settlement_biz.gopkg/rtgs/
issuer中央银行Kratos + FSC持 Issuer 钱包;IssueCashView 真签;调审计 + 背书;Broadcastcbdc-biz/app/issuer/cmd/issuer/main.gopkg/views/issue.go
endorser中央银行Kratos + FSC部署 TMS(DeployTMSs());注册 AuditResponderView + AuditAndEndorseView 两个响应视图(main.go:107cbdc-biz/app/endorser/internal/biz/endorser.gopkg/views/{endorsement,audit}.go
auditor监管 / 央行审计部Kratos + FSC持 Auditor 私钥签 σ;只读聚合(ttxdb.QueryTransactionsParams);持仓 NewHoldingsFilter;FinalityCaptureWorker 索引cbdc-biz/app/auditor/internal/biz/auditor.gointernal/worker/finality_capture_worker.go

辅助工具:cbdc-biz/cmd/rtgs-mock/main.go(本地 RTGS 模拟,由 compose-rtgs-mock.yml 启动)。

用户密钥托管

用户不持有链上私钥,由 institution 作为托管钱包持有(cbdc-biz/pkg/keystore/:PKCS12 / JKS 两种文件后端)。owner 身份用 Idemix(零知识身份),issuer 用 ECDSA P-256。源头身份由 cbdc-ca-server-kms 镜像(sign-ca 打包的 fabric-ca-server,编译带 pkcs11 tag)通过 PKCS#11 委托给 sign-kms 签发(KMS_TOKEN_LABEL / KMS_USER_PIN 鉴权)。

9 个外部包 + cbdc-chain 的归属

角色包 / 仓库出处
身份 CAfabric-ca上游
身份 CA(容器化)sign-caSign
密钥管理sign-kmsSign
Fabric-X 工具集fabric-x上游
排序服务fabric-x-orderer上游
提交服务fabric-x-committer上游
客户端 SDKfabric-x-sdk上游
应用框架fabric-smart-client上游
Token UTXOfabric-token-sdk上游(cbdc-biz 取 v0.11.0cbdc-biz/go.mod:17
业务实现cbdc-chainSign

三层运行视图

依据:

  • bizhub 的上游 gRPC 客户端:upstream.issuer.addr: ${UPSTREAM_ISSUER_ADDR}cbdc-biz/conf/bizhub/core.yaml:75)与 institutions[].endpoint.addr: ${INSTITUTION_001_ADDR}cbdc-biz/conf/bizhub/core.yaml:26);env 默认 UPSTREAM_ISSUER_ADDR=issuer:9100 / INSTITUTION_001_ADDR=institution-001:9500cbdc-biz/.env.example:87-88)。
  • 各应用反向连 bizhub:biz.bizhub_addr: ${BIZHUB_ADDR}cbdc-biz/conf/{endorser1,issuer,auditor,institution-001}/core.yaml)。
  • FSC P2P 端口分配规律:业务端口 + 1。

与外部 monitoring 系统的关系

当前仓库内未发现可观测性栈

ARCHITECTURE.md 描述过 cbdc-monitoring/(VictoriaMetrics 全家桶),但 cbdc-chain/ 顶层无该目录。应用代码侧实现:

  • cbdc-biz/pkg/signet/ — Sign 的 OpenTelemetry 封装(trace + middleware)
  • cbdc-biz/pkg/observability/ — 日志 / 指标辅助
  • core.yaml 中的 observability.tracing.endpoint 字段(默认从 env OTLP_ENDPOINT 注入)

具体监控栈的部署形态需查公司其他仓库或运维配置,本仓库内不包含

关键代码入口

用途文件
启动业务应用cbdc-biz/app/<app>/cmd/<app>/main.go
FSC 节点启动cbdc-biz/pkg/common/nodesdk/
跨包 Viewcbdc-biz/pkg/views/(含 transfer.go / accept_transfer.go / issue.go / redeem.go / audit.go / endorsement.go / finality_registry.go / token_optimization.go / audit_metrics.go / warmup.go
一键启动脚本cbdc-chain/scripts/start-kms-system.sh

go.mod 关键依赖

来源:cbdc-biz/go.modcbdc-chain · 概述)。

依赖版本用途
github.com/hyperledger-labs/fabric-smart-clientv0.11.0(go.mod:16FSC 框架
github.com/hyperledger-labs/fabric-token-sdkv0.11.0(go.mod:17Token UTXO
github.com/hyperledger/fabric-cav1.5.16CA 客户端
github.com/go-kratos/kratos/v2v2.9.2gRPC + Wire DI
entgo.io/entv0.14.6BizHub ORM
github.com/redis/go-redis/v9v9.18.0Token Selector 分布式后端
github.com/lib/pqv1.10.9PostgreSQL

go.mod 仅有四条 replacecbdc-biz/go.mod:309-315),均把 go.opentelemetry.io/otel/log 等 OTel 包钉到旧的 Record-signature 版本(v0.6.0 / v0.5.0),等待上游 FSC 补丁;fabric-token-sdkfabric-smart-client 已直接取 v0.11.0,无 Built-by-Sign 分支 replace。

下一步