NewClient
函数内容如下:
c.Configure(options...)
配置数据传输监听工具。
状态字段为State
。net := smnet.NewFromLibp2pHost(h)
挪用 NewClient
函数,生成 Client
工具。
当客户端要存储真实数据时,他会挪用 lotus client deal dataCid minerId price duration
呼吁发送数据到指定的矿工。
StorageClient
函数流程如下:
dataTransfer.SubscribeToEvents(dtutils.ClientDataTransferSubscriber(statemachines))
当传输竣事、传输错误时会发送 ClientEventDataTransferComplete
、ClientEventDataTransferFailed
等事件到 fsm 状态组。
因为 StorageClient
工具被 Lotus API 工具所依赖,所以在启动 Lotus 的进程中,DI 容器会挪用 StorageClient
函数(node/modules/client.go)来建设它。
状态工具为
ClientDeal
。事件荟萃为
ClientEvents
,参考 storagemarket/impl/clientstates/client_fsm.go 文件。 在 DI 容器的 OnStart
钩子函数中挪用 Client
工具的 Start
要领。Start
要领挪用自身的 restartDeals
要领开始举办从头生意业务。
返回 Client
工具。
c := &Client{
net: net,
dataTransfer: dataTransfer,
bs: bs,
pio: pio,
discovery: discovery,
node: scn,
pubSub: pubsub.New(clientDispatcher),
pollingInterval: DefaultPollingInterval,
}
生成 fsm 状态组工具。
利用设置选项,设置 Client
工具。
Client
工具的 dispatch
要领。
当前环境下官方的呆板人会给存储矿工发送颠末验证的真实数据,将来跟着基本设施的完善,也会有其他方法来发送真实数据,好比客户端本身指定某个矿工来发送数据。接下来我们从客户端开始来研究下 Lotus 是怎么处理惩罚真实数据。
c, err := storageimpl.NewClient(net, ibs, dataTransfer, discovery, deals, scn, storageimpl.DealPollingInterval(time.Second))
scn
即 node
工具,也是情况工具返回的节点工具,这个工具是 ClientNodeAdapter
工具(markets/storageadapter/client.go)由 DI 容器挪用 NewClientNodeAdapter
函数而建设。statemachines, err := newClientStateMachine(
ds,
&clientDealEnvironment{c},
c.dispatch,
)
Client
工具。c.statemachines = statemachines
fsm 状态组工具利用的设置参数如下:
终止状态荟萃为ClientFinalityStates
。当 Lotus daemon 吸收到这个请求之后就开始了生意业务处理惩罚。Lotus daemon 会挪用 go-file-markets 类库的 StorageClient
工具对生意业务举办处理惩罚。
carIO := cario.NewCarIO()
pio := pieceio.NewPieceIO(carIO, bs)
生成 Client
工具。
挪用 NewFromLibp2pHost
函数,生成 StorageMarketNetwork
工具。
ClientStateEntryFuncs
,状态机的状态处理惩罚器按照对应的状态获取到指定的函数举办处理惩罚。return fsm.New(ds, fsm.Parameters{
Environment: env,
StateType: storagemarket.ClientDeal{},
StateKeyField: "State",
Events: clientstates.ClientEvents,
StateEntryFuncs: clientstates.ClientStateEntryFuncs,
FinalityStates: clientstates.ClientFinalityStates,
Notifier: notifier,
})
情况工具为 clientDealEnvironment
。
生成两个 IO 工具。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。