主题
fabric-smart-client · 架构
FSC Stack(平台分层)
Fabric platform 构建于 View platform 之上;Fabric-x platform 又构建于 Fabric platform 之上,仅替换 Fabric-x 专属组件(如交易处理)。来源:docs/core-concepts.md:106-133、docs/platform/fabric-x/README.md:11。
platform 顶层目录
来源:platform/。
| 目录 | Go 文件数 | 用途 |
|---|---|---|
platform/common | ~85 | 共享驱动、配置服务、身份等 |
platform/view | ~409 | 核心运行时:View / Context / Session / ViewManager / Registry |
platform/fabric | ~378 | Fabric 集成(SDK / driver / services) |
platform/fabricx | ~86 | Fabric-x 支持(实验阶段) |
View Platform 核心组件
来源:platform/view/view/、platform/view/services/view/(见下表各文件:行号)。
| 组件 | 文件 | 行号 |
|---|---|---|
View 接口 | platform/view/view/view.go | 10-14 |
Context 接口 | platform/view/view/context.go | 95-138 |
Session 接口 | platform/view/view/session.go | 65-85 |
Identity 类型(identity.Identity 别名,底层 []byte) | platform/view/view/identity.go | 14 |
ViewManager 接口 | platform/view/services/view/grpc/server/vm.go | 16-25 |
Registry 结构体 | platform/view/services/view/registry.go | 26-33 |
View 接口(view.go:10-14):
go
type View interface {
Call(context Context) (interface{}, error)
}Context 接口(context.go:95-138)暴露:
SpanStarter(嵌入;OpenTelemetry 集成)GetService(v interface{}) (interface{}, error)ID() stringRunView(view View, opts ...RunViewOption) (interface{}, error)Me() Identity/IsMe(id Identity) boolInitiator() ViewGetSession(caller View, party Identity, boundToViews ...View) (Session, error)/GetSessionByID(id string, party Identity) (Session, error)Session() Session(响应远程调用时创建的会话,否则为 nil)Context() context.ContextOnError(callback func())
Registry 与 Factory
来源:platform/view/services/view/registry.go、platform/view/services/view/factory.go。
go
// registry.go:26-33
type Registry struct {
factoriesSync sync.RWMutex
viewsSync sync.RWMutex
views map[string][]*viewEntry
initiators map[string]string
factories map[string]Factory
}| 方法 | 行号 | 用途 |
|---|---|---|
RegisterFactory(id string, factory Factory) | 45-52 | 按 ID 注册 View 工厂 |
NewView(id string, in []byte) | 54-70 | 通过工厂创建新 View 实例 |
RegisterResponder(responder view.View, initiatedBy any) | 81-83 | 注册响应者 View |
RegisterResponderWithIdentity(responder view.View, id view.Identity, initiatedBy any) | 86-95 | 带身份的响应者注册 |
GetResponder(initiatedBy any) | 99-130 | 检索响应者 View |
GetRegistry(sp services.Provider) | 237 | 从 services Provider 取 Registry 单例 |
Factory 接口(factory.go):
go
type Factory interface {
NewView(in []byte) (view.View, error)
}View 服务(gRPC)
来源:platform/view/services/view/grpc/server/protos/service.proto。
ViewService(service.proto:16-24)暴露两个 RPC:ProcessCommand(SignedCommand)与双向流StreamCommand(stream SignedCommand)。- 命令消息(
commands.proto):InitiateView、CallView等。 ViewManager接口(vm.go:16-25):NewView/InitiateView/InitiateContext/DeleteContext。
通信服务
来源:platform/view/services/comm/。
| 子目录 | 用途 |
|---|---|
comm/host | WebSocket / libp2p 主机 |
comm/provider | 会话提供者 |
comm/session | JSON 序列化会话 |
comm/messages.proto | ViewPacket 等消息 |
其它核心服务
来源:platform/view/services/。
| 目录 | 用途 |
|---|---|
config | 配置服务 |
id | 身份服务(ECDSA / X.509 / KMS) |
storage | KVS / DB 驱动 / 绑定 |
sig | 签名服务 |
endpoint | 端点解析器 |
events | 事件系统 |
grpc | gRPC 基础设施 |
tracing | OpenTelemetry 追踪 |
web | Web 服务器与客户端 |
metrics | Prometheus 指标 |
Common driver 接口
来源:platform/common/driver/。
| 文件 | 接口 / 类型 |
|---|---|
kvs.go | SignerInfoStore、AuditInfoStore、BindingStore、MetadataStore、EnvelopeStore、EndorseTxStore |
config.go | ConfigService |
sigservice.go | SigService、SigningIdentity、Signer、Verifier |
committer.go | TransactionFilter、FinalityListener |
vault.go | Vault、VaultStore、VaultReader、QueryExecutor |
finality.go | ListenerManager、FinalityEvent |
rwset.go | RWSet、GetStateOpt |
types.go | NamedDriver、PersistenceType |
iterator.go | ValidationCode、ValidationCodeProvider |
pagination.go | Pagination、PageIterator |
网络拓扑
来源:docs/core-concepts.md:90-97。
"FSC Node" 运行 FSC 栈,形成 "FSC Network"(与一个或多个 Fabric 网络并存)