【莱特币官网】精通 Filecoin:Lotus 真实数据处理之 Client 初始化
摘要:前言随着 Filecoin/Lotus 公链越来越接近启动,真实数据的处理也越来越重要了。根据官方的设计,真实数据的有效
前言
随着 Filecoin/Lotus 公链越来越接近启动,真实数据的处理也越来越重要了。根据官方的设计,真实数据的有效算力是自填自挖算力的 10倍,鉴于真实数据的比重是如此之在,从今天起,我们就来了聊下真实的相关处理情况,今天为本部分的第一篇。
当前情况下官方的机器人会给存储矿工发送经过验证的真实数据,未来随着基础设施的完善,也会有其他方式来发送真实数据,比如客户端自己指定某个矿工来发送数据。接下来我们从客户端开始来研究下 Lotus 是怎么处理真实数据。
当客户端要存储真实数据时,他会调用 lotus client deal > 命令发送数据到指定的矿工。
正文
当 Lotus daemon 接收到这个请求之后就开始了交易处理。Lotus daemon 会调用 go-file-markets 类库的 StorageClient 对象对交易进行处理。
因为 StorageClient 对象被 Lotus API 对象所依赖,所以在启动 Lotus 的过程中,DI 容器会调用 StorageClient 函数(node/modules/client.go)来创建它。
StorageClient 函数流程如下:
- 调用
NewFromLibp2pHost函数,生成StorageMarketNetwork对象。net?:=?smnet.NewFromLibp2pHost(h) - 调用
NewClient函数,生成Client对象。c,?err?:=?storageimpl.NewClient(net,?ibs,?>scn即node对象,也是环境对象返回的节点对象,这个对象是ClientNodeAdapter对象(markets/storageadapter/client.go)由 DI 容器调用NewClientNodeAdapter函数而创建。NewClient函数内容如下:- 生成两个 IO 对象。
carIO?:=?cario.NewCarIO()
pio?:=?pieceio.NewPieceIO(carIO,?bs) - 生成
Client对象。c?:=?&Client{
????net:?????????????net,
????> - 生成 fsm 状态组对象。
statemachines,?err?:=?newClientStateMachine(
????ds,
????&clientDealEnvironment{c},
????c.dispatch,
)c.statemachines?=?statemachines
fsm 状态组对象使用的配置参数如下:
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。 - 状态对象为
ClientDeal。 - 状态字段为
State。 - 事件集合为
ClientEvents,参考 storagemarket/impl/clientstates/client_fsm.go 文件。 - 状态处理函数集合 为
ClientStateEntryFuncs,状态机的状态处理器根据对应的状态获取到指定的函数进行处理。 - 终止状态集合为
ClientFinalityStates。 - 通知对象为
Client对象的dispatch方法。
- 生成两个 IO 对象。
- 使用配置选项,配置
Client对象。c.Configure(options...) - 设置数据传输监听对象。
>当传输结束、传输错误时会发送
ClientEventDataTransferComplete、ClientEventDataTransferFailed等事件到 fsm 状态组。 - 返回
Client对象。 - 在 DI 容器的
OnStart钩子函数中调用Client对象的Start方法。Start方法调用自身的restartDeals方法开始进行重新交易。 - 返回
Client对象。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

币圈观察



