http://www.7klian.com

精通 Filecoin:Lotus 真实数据处理之 Client 初始化

NewClient 函数内容如下:

c.Configure(options...)

配置数据传输监听工具。

状态字段为 State
net := smnet.NewFromLibp2pHost(h)

挪用 NewClient 函数,生成 Client 工具。

当客户端要存储真实数据时,他会挪用 lotus client deal dataCid minerId price duration 呼吁发送数据到指定的矿工。

StorageClient 函数流程如下:

dataTransfer.SubscribeToEvents(dtutils.ClientDataTransferSubscriber(statemachines))

当传输竣事、传输错误时会发送 ClientEventDataTransferCompleteClientEventDataTransferFailed 等事件到 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))

scnnode 工具,也是情况工具返回的节点工具,这个工具是 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 工具对生意业务举办处理惩罚。

跟着 Filecoin/Lotus 公链越来越靠近启动,真实数据的处理惩罚也越来越重要了。按照官方的设计,真实数据的有效算力是自填自挖算力的 10倍,,鉴于真实数据的比重是如此之在,从本日起,我们就来了聊下真实的相关处理惩罚环境,本日为本部门的第一篇。

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 工具。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

标签: Filecoin Cl 能干 Lotus 真实

相关文章阅读

随机文章阅读