Skip to content

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~378Fabric 集成(SDK / driver / services)
platform/fabricx~86Fabric-x 支持(实验阶段)

View Platform 核心组件 ​

来源:platform/view/view/、platform/view/services/view/(见下表各文件:行号)。

组件文件行号
View 接口platform/view/view/view.go10-14
Context 接口platform/view/view/context.go95-138
Session 接口platform/view/view/session.go65-85
Identity 类型(identity.Identity 别名,底层 []byte)platform/view/view/identity.go14
ViewManager 接口platform/view/services/view/grpc/server/vm.go16-25
Registry 结构体platform/view/services/view/registry.go26-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() string
  • RunView(view View, opts ...RunViewOption) (interface{}, error)
  • Me() Identity / IsMe(id Identity) bool
  • Initiator() View
  • GetSession(caller View, party Identity, boundToViews ...View) (Session, error) / GetSessionByID(id string, party Identity) (Session, error)
  • Session() Session(响应远程调用时创建的会话,否则为 nil)
  • Context() context.Context
  • OnError(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/hostWebSocket / libp2p 主机
comm/provider会话提供者
comm/sessionJSON 序列化会话
comm/messages.protoViewPacket 等消息

其它核心服务 ​

来源:platform/view/services/。

目录用途
config配置服务
id身份服务(ECDSA / X.509 / KMS)
storageKVS / DB 驱动 / 绑定
sig签名服务
endpoint端点解析器
events事件系统
grpcgRPC 基础设施
tracingOpenTelemetry 追踪
webWeb 服务器与客户端
metricsPrometheus 指标

Common driver 接口 ​

来源:platform/common/driver/。

文件接口 / 类型
kvs.goSignerInfoStore、AuditInfoStore、BindingStore、MetadataStore、EnvelopeStore、EndorseTxStore
config.goConfigService
sigservice.goSigService、SigningIdentity、Signer、Verifier
committer.goTransactionFilter、FinalityListener
vault.goVault、VaultStore、VaultReader、QueryExecutor
finality.goListenerManager、FinalityEvent
rwset.goRWSet、GetStateOpt
types.goNamedDriver、PersistenceType
iterator.goValidationCode、ValidationCodeProvider
pagination.goPagination、PageIterator

网络拓扑 ​

来源:docs/core-concepts.md:90-97。

"FSC Node" 运行 FSC 栈,形成 "FSC Network"(与一个或多个 Fabric 网络并存)