Skip to content

cbdc-biz/app/institution

商业银行侧应用节点。本仓库 submodule cbdc-chain/,本页所有路径相对该 submodule 根。

基本事实

出处
路径cbdc-biz/app/institution/
独立 go.mod无(共用 cbdc-biz/go.mod目录无 go.mod
Go 文件数26(含 wire_gen.go,无 _test.go
独立 Dockerfilecbdc-biz/app/institution/Dockerfile
Wire DIcbdc-biz/app/institution/cmd/institution/wire.go
README / 文档[未核] 目录内无

子目录:

cbdc-biz/app/institution/
├── cmd/institution/{main.go,wire.go,wire_gen.go}
├── internal/
│   ├── biz/        6 个文件
│   ├── client/     1 个文件(BizHub gRPC 客户端)
│   ├── conf/       conf.proto + conf.pb.go
│   ├── server/     server.go + grpc.go + http.go + openapi.yaml
│   ├── service/    9 个文件
│   └── worker/     3 个文件(worker.go ProviderSet + 2 个 worker)
├── configs/
├── Dockerfile
└── Makefile

入口启动(main.go)

来源:cbdc-biz/app/institution/cmd/institution/main.go

注册的 4 对 FSC View(main.go:210-220):

ResponderInitiator业务含义
AcceptTransferViewTransferView跨机构转账
AcceptIdentityRequestViewPrepareTransferView两步转账·身份步
AcceptPreparedTransferViewSubmitSignatureView两步转账·签名步
AcceptCashViewIssueCashView央行发行 → 机构接收

Wire DI 依赖图

来源:cbdc-biz/app/institution/cmd/institution/wire.go:1-25wire_gen.go:28-42

wireApp 入参:*conf.Serverlog.Logger*node.Node*client.BizHubClients*conf.Bizwire.go:23)。

internal/biz

来源:cbdc-biz/app/institution/internal/biz/

文件行数关键 struct
biz.go127InstitutionBizL38-43):基础依赖 + pendingTxStore
wallet_biz.go308InstitutionWalletBizL32-43
transfer_biz.go325InstitutionTransferBizL27-33
transaction_biz.go86InstitutionTransactionBizL15-20
redeem_biz.go115InstitutionRedeemBizL18-33
transfer_metrics.go113OTel 转账指标 cbdc_institution_transfer_outcome_total(method × outcome)

InstitutionWalletBiz 关键方法

方法file:line职责
ListWalletIDswallet_biz.go:46查询 Token SDK 所有钱包 ID
QueryBalanceswallet_biz.go:61单钱包余额(金额列表)
BatchQueryBalanceswallet_biz.go:81并发批查询(16 并发上限)

InstitutionTransferBiz 关键方法

方法file:line职责
PrepareTokenOptimizationtransfer_biz.go:50UTXO 合并 / 分割(无签名)
PrepareTransfertransfer_biz.go:80常规转账准备
PrepareMarkedTransfertransfer_biz.go:169标记 token 转账(含 useAssetMark / attachMetadata
SubmitTransfertransfer_biz.go:239提交 X.509 签名并广播
CancelTransfertransfer_biz.go:285取消待处理(释放 token 锁)
Transfertransfer_biz.go:295传统一体化转账(一步完成)

InstitutionTransactionBiz 关键方法

方法file:line职责
CountTransactionstransaction_biz.go:23交易总数
ListTransactionstransaction_biz.go:49分页查询(filter:sender / recipient / 时间 / 状态 / 类型)

InstitutionRedeemBiz 关键方法

方法file:line职责
PrepareRedeemredeem_biz.go:36赎回准备(央行销毁 token)
SubmitRedeemredeem_biz.go:78提交赎回签名

共享方法(biz.go

方法file:line职责
GetInstitutionCodebiz.go:61返回 3 位机构代码
releasePendingTxbiz.go:76释放 token 选择器锁 + FSC 钱包锁
StorePendingTransactionbiz.go:101存待处理交易
GetPendingTransactionbiz.go:106取待处理交易
PopPendingTransactionbiz.go:116原子弹出(防重复执行)

internal/data

[未核]

institution 无 internal/data/ 目录。持久化由 Hyperledger Fabric Token SDK 的 TTX DB 与钱包管理器在 SDK 层处理,本 app 不直接管理 DB。

internal/service

来源:cbdc-biz/app/institution/internal/service/

聚合 struct InstitutionOpsServiceservice.go:21-51):

go
type InstitutionOpsService struct {
    pb.UnimplementedInstitutionOpsServiceServer
    base, walletBiz, transferBiz, transactionBiz, redeemBiz
    certProvider auth.CertificateProvider
    bizhub       *client.BizHubClients
}
文件RPC 方法file:line
wallet_service.goListWallets:23
GetWalletBalance:101
RegisterWallet:120
GetWalletCertificate:133
UpdateWalletCertificate:145
CreateWallet:166
GenerateWalletID:282
UpdateWalletStatus:298
ListWalletIDs:381
GetWalletInfo:413
BatchGetWalletInfo:430
BatchGetWalletBalances:553
RenewWalletCert:631
transfer_service.goPrepareTransfer:24
SubmitTransfer:101
CancelTransfer:125
redeem_service.goPrepareRedeem:14
SubmitRedeem:33
transaction_service.golistTransactionsLocal(内部):28
ListTransactions:148
GetTransaction:210
settlement_service.goCreateSettlementRequest:13
QuerySettlementRequest:33
ListSettlementRequests:50
SubmitRedeemSignature:74
approval_service.goListApprovals:13
GetApproval:36
mark_service.goManualMarkSync:17
GetAssetMarks:51
GetWalletMarks:64

对应 proto:cbdc-biz/api/cbdc-biz/v1/institution.protoservice InstitutionOpsService)。

internal/worker

来源:cbdc-biz/app/institution/internal/worker/

目录 3 个文件,含 2 个 worker 与 worker.go(Wire ProviderSetworker.go:13-17):

Worker用途
ApprovalWorker轮询 BizHub 审批队列(PollInterval 5s,approval_worker.go:78),执行 CREATE / CLOSE 钱包(approval_worker.go:121/:123
FinalityWorker监听链上交易最终性,watch 回调释放 token 锁(finality_worker.go:68 struct / :186 watch)

internal/conf

来源:cbdc-biz/app/institution/internal/conf/conf.proto

proto
message Biz {
  Server server = 1;
  string bizhub_addr = 2;        // 可选;省略则禁用钱包/结算
  string institution_code = 3;   // 必需;3 位机构代码,main.go:127 panic 校验
  TLS bizhub_tls = 4;
  Observability observability = 5;
  TokenSelector token_selector = 6;
}

message TokenSelector {
  string mode = 1;               // "memory" | "distributed"
  repeated uint64 bucket_boundaries = 2;
  RedisConfig redis = 3;
}

message TLS {
  bool enabled = 1;
  string server_name = 2;
  string ca_cert = 3;
  string client_cert = 4;
  string client_key = 5;
  bool insecure_skip_verify = 6;  // DEV ONLY
}

关键配置(来源 main.go:99-129conf.proto):

key必需默认 / 说明
biz.institution_code3 位机构码;缺则 panicmain.go:127
biz.bizhub_addr空时跳过 BizHub 客户端初始化
biz.token_selector.mode默认 memorydistributed 需 Redis
cbdc.symbol默认 SOMmain.go:100

configs

app 内 configs/config.yaml(Kratos 默认模板,非实际部署用

yaml
server:
  http:
    addr: 0.0.0.0:8000
  grpc:
    addr: 0.0.0.0:9000

实际部署用配置:cbdc-biz/conf/institution-001/core.yaml

用途出处
gRPC(biz.server.addr0.0.0.0:9500cbdc-biz/conf/institution-001/core.yaml:8
FSC P2P(fsc.p2p.listenAddress/ip4/0.0.0.0/tcp/9501cbdc-biz/conf/institution-001/core.yaml:46
HTTP(硬编码,不读 config):9502internal/server/http.go:38

端口来源差异

cbdc-biz/app/institution/configs/config.yaml 是 Kratos 脚手架默认模板(:8000 / :9000),与 Dockerfile EXPOSE 8000 9000 一致;但 compose-local-run.ymlcbdc-biz/conf/institution-001/ 挂载到容器 /confdocker/compose-local-run.yml:195),gRPC 监听走配置 9500、FSC P2P 9501,HTTP 硬编码在 server/http.go:389502;该 compose 发布 9500 / 9501 / 9502docker/compose-local-run.yml:199-202)。

Dockerfile

来源:cbdc-biz/app/institution/Dockerfile

dockerfile
FROM golang:1.26 AS builder                       # L1
COPY . /src                                       # L3
WORKDIR /src                                       # L4
RUN GOPROXY=https://goproxy.cn make build          # L6

FROM debian:stable-slim                            # L8
RUN apt-get update && apt-get install -y --no-install-recommends \
        ca-certificates netbase \
        && rm -rf /var/lib/apt/lists/ \
        && apt-get autoremove -y && apt-get autoclean -y   # L10-14
COPY --from=builder /src/bin /app                  # L16
WORKDIR /app                                       # L18
EXPOSE 8000                                        # L20
EXPOSE 9000                                        # L21
VOLUME /data/conf                                  # L22
CMD ["./server", "-conf", "/data/conf"]            # L24

特点:

  • 两阶段(golang:1.26debian:stable-slim
  • 国内 GOPROXY=https://goproxy.cn
  • 暴露 8000(HTTP)+ 9000(gRPC)
  • 配置挂载点 /data/conf

与其他 app 的关系

出站

方向协议出处
→ BizHub(7 个 gRPC 客户端)gRPCmain.go:227-238client/bizhub.go
→ 其他 Institution(4 对 View)FSC P2P viewregistrymain.go:210-220
→ Hyperledger Fabric Token SDKin-process全局 SDK

BizHubClients 含 7 项:CA / Wallet / ClientAuth / Settlement / InstitutionManage / Approval / Manage(struct 字段 internal/client/bizhub.go:43-49;构造调用点 main.go:231)。

入站

方向协议出处
← BizHub(审批轮询触发 CREATE/CLOSE 钱包)gRPC(被动)worker/approval_worker.go:78,121
← 其他 Institution(P2P 接收转账 / 身份 / 签名 / 发行)FSC P2PView Responder 注册
← Endorser / Issuer / Auditor 是否直连?[未核]

cbdc-biz/pkg/ 的关系

来源:main.gobiz/ / service/ import 段。

pkgfile:line用途
pkg/common/authservice/service.go:7X.509 证书提供者
pkg/common/feemain.go:14本地手续费引擎
pkg/common/markedmain.go:15标记 token SDK
pkg/common/nodesdkmain.go:16FSC 节点启动
pkg/common/syncutilmain.go:17周期同步
pkg/common/wallet_commonmain.go:19biz/biz.go:10钱包公共类型 + pending-tx 存储
pkg/common/biz-clientmain.go:13BizHub HTTP 客户端
pkg/common/tx_selectormain.go:18交易 / 手续费选择器
pkg/constantsmain.go:20InitToken("SOM")
pkg/identitybiz/wallet_biz.go:15身份解析
pkg/observabilitybiz/transfer_biz.go:12可观测性辅助
pkg/runtimemain.go:21启动日志 + pprof
pkg/schedulerworker/approval_worker.go:14定时任务
pkg/signetmain.go:22server/grpc.go:7OTel + 中间件
pkg/token_selectormain.go:23Token 选择器管理
pkg/viewsmain.go:24biz/transfer_biz.go:13FSC 视图定义 + FinalityRegistry

测试

[未核]

本 app 目录下 0 个 _test.go 文件。

跨 app 测试涉及 institution 行为的,主要在 tests/transfer/tests/e2e/(具体覆盖范围 [未核])。

看代码推荐路径

  1. cmd/institution/main.go:70-251 → 启动序列全貌。
  2. cmd/institution/wire_gen.go:28-42 → 依赖注入图。
  3. internal/biz/biz.go:38-127pendingTxStorereleasePendingTx 机制。
  4. internal/biz/transfer_biz.go:80-285 → 两步转账(prepare → submit)。
  5. internal/service/wallet_service.go → 钱包创建(CreateWallet:166)与关闭审批(UpdateWalletStatus:298submitWholesaleCloseApproval:331)工作流。
  6. internal/worker/approval_worker.go:78,121 → BizHub 审批轮询与 CREATE/CLOSE 派发。
  7. pkg/views/(外部)→ 4 对 View 的实现。

[未核] 与已知缺口

  • transfer_metrics.go(113 行)暴露 cbdc_institution_transfer_outcome_total,按 method(prepare/submit)与 outcome 维度计数;完整指标清单未逐项展开。
  • 与 Endorser / Issuer / Auditor 是否存在直连调用(core.yaml fsc.endpoint.resolvers 列出 auditor/issuer/endorser1/institution-001 的 P2P 端点)。