Skip to content

fabric-smart-client · 架构

FSC Stack(平台分层)

Fabric platform 构建于 View platform 之上;Fabric-x platform 又构建于 Fabric platform 之上,仅替换 Fabric-x 专属组件(如交易处理)。来源:docs/core-concepts.md:106-133docs/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 别名,底层 []byteplatform/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.goplatform/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

  • ViewServiceservice.proto:16-24)暴露两个 RPC:ProcessCommand(SignedCommand) 与双向流 StreamCommand(stream SignedCommand)
  • 命令消息(commands.proto):InitiateViewCallView 等。
  • 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.goSignerInfoStoreAuditInfoStoreBindingStoreMetadataStoreEnvelopeStoreEndorseTxStore
config.goConfigService
sigservice.goSigServiceSigningIdentitySignerVerifier
committer.goTransactionFilterFinalityListener
vault.goVaultVaultStoreVaultReaderQueryExecutor
finality.goListenerManagerFinalityEvent
rwset.goRWSetGetStateOpt
types.goNamedDriverPersistenceType
iterator.goValidationCodeValidationCodeProvider
pagination.goPaginationPageIterator

网络拓扑

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

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