你的位置:beat365体育亚洲中文版在线登录-首页 > 纪检监察 > 能干 Filecoin:Lotus竟然数据惩办之Provider首先化 | BTC

能干 Filecoin:Lotus竟然数据惩办之Provider首先化 | BTC

时间:2022-07-09 03:00 点击:199 次

能干 Filecoin:Lotus竟然数据惩办之Provider首先化 | BTC

因为 StorageProvider 对象被存储矿工 API 对象所依赖,是以在启动存储矿工的过程中,DI 容器会调用 StorageProvider 函数(node/modules/storageminer.go)来创建它。StorageProvider 函数历程如下:\r\n\r\n\t调用 NewFromLibp2pHost 函数,生成 StorageMarketNetwork 对象。\r\n
net := smnet.NewFromLibp2pHost(h)\r\n
\r\n\r\n\t调用 NewLocalFileStore 函数,生成 FileStore 存储对象。\r\n
store, err := piecefilestore.NewLocalFileStore(piecefilestore.OsPath(r.Path()))\r\n
\r\nNewLocalFileStore 函数(go-fil-markets 类库 filestore/filestore.go)历程如下:\r\n
base := filepath.Clean(string(basedirectory))\r\ninfo, err := os.Stat(string(base))

if !info.IsDir() {\r\n    return nil, fmt.Errorf(%s is not a directory, base)\r\n}

return &fileStore{string(base)}, nil\r\n

\r\nNewLocalFileStore 函数使用的旅途为仓库目次。即碎屑的临时目次便是仓库目次。\r\n\t调用 CustomDealDecisionLogic 函数,复返一个函数对象。在函数对象中调用咱们提供的回调函数,进行自界说来回逻辑判断。\r\n
opt := storageimpl.CustomDealDecisionLogic(func(ctx context.Context, deal storagemarket.MinerDeal) (bool, string, error) {

})\r\n

\r\n\r\n\t生成并复返 StorageProvider 对象。\r\n
p, err := storageimpl.NewProvider(net, namespace.Wrap(ds, datastore.NewKey(/deals/provider)), ibs, store, pieceStore, dataTransfer, spn, address.Address(minerAddress), ffiConfig.SealProofType, storedAsk, opt)

return p, nil\r\n

\r\nNewProvider 函数惩办如下:\r\n\r\n\t生成 PieceIOWithStore 对象。\r\n
carIO := cario.NewCarIO()\r\npio := pieceio.NewPieceIOWithStore(carIO, fs, bs)\r\n
\r\n\r\n\t生成 Provider 对象。\r\n
h := &Provider{\r\n    net:                  net,\r\n    proofType:            rt,\r\n    spn:                  spn,\r\n    fs:                   fs,\r\n    pio:                  pio,\r\n    pieceStore:           pieceStore,\r\n    conns:                connmanager.NewConnManager(),\r\n    storedAsk:            storedAsk,\r\n    actor:                minerAddress,\r\n    dataTransfer:         dataTransfer,\r\n    dealAcceptanceBuffer: DefaultDealAcceptanceBuffer,\r\n    pubSub:               pubsub.New(providerDispatcher),\r\n}\r\n
\r\n\r\n\t生成 fsm 情状组对象。\r\n
deals, err := NewProviderStateMachine(\r\n    ds,\r\n    &providerDealEnvironment{h},\r\n    h.dispatch,\r\n)

h.deals = deals\r\n

\r\nfsm 情状组对象使用的成立参数如下:\r\n
return fsm.New(ds, fsm.Parameters{\r\n    Environment:     env,\r\n    StateType:       storagemarket.MinerDeal{},\r\n    StateKeyField:   State,\r\n    Events:          providerstates.ProviderEvents,\r\n    StateEntryFuncs: providerstates.ProviderStateEntryFuncs,\r\n    FinalityStates:  providerstates.ProviderFinalityStates,\r\n    Notifier:        notifier,\r\n})\r\n
\r\n\r\n\t环境对象为 providerDealEnvironment。\r\n\t情状对象为 MinerDeal。\r\n\t情状字段为 State。\r\n\t事件集聚为 ProviderEvents,参考 storagemarket/impl/providerstates/provider_fsm.go 文献。\r\n\t情状惩办函数集聚 为 ProviderStateEntryFuncs,情状机的情状惩办器字据对应的情状赢得到指定的函数进行惩办。\r\n\t辨别情状集聚为 ProviderFinalityStates。\r\n\t示知对象为 Provider 对象的 dispatch 步调。\r\n\r\n\r\n\t使用成立选项,成立 Provider 对象。\r\n
h.Configure(options...)\r\n
\r\n\r\n\t斥地数据传输监听对象。\r\n
dataTransfer.SubscribeToEvents(dtutils.ProviderDataTransferSubscriber(deals))\r\n
\r\n当首先数据传输、传输收尾、传输造作时会发送 ProviderEventDataTransferInitiated、ProviderEventDataTransferCompleted、ProviderEventDataTransferFailed 等事件到 fsm 情状组。\r\n\t复返 Provider 对象。\r\n\r\n\r\n

在存储矿工启动过程自动调用 HandleDeals 函数(node/modules/storageminer.go)。在这个函数中,调用 StorageProvider 对象的 Start 步调,从而启动这个对象。

Start 步调实施过程如下:\r\n\r\n\t调用 StorageMarketNetwork 汇集对象的 SetDelegate 斥地代理/寄予为自己。\r\n

err := p.net.SetDelegate(p)\r\n
\r\n汇集对象的兑现为 libp2pStorageMarketNetwork 结构体(storagemarket/network/libp2p_impl.go)。它的 SetDelegate 步调骨子如下:\r\n
impl.receiver = r\r\nimpl.host.SetStreamHandler(storagemarket.DealProtocolID, impl.handleNewDealStream)\r\nimpl.host.SetStreamHandler(storagemarket.AskProtocolID, impl.handleNewAskStream)\r\nreturn nil\r\n
\r\n上头永别斥地汇集对象的 handleNewDealStream 步调惩办 DealProtocolID 合同,暗示存储;handleNewAskStream 步调 惩办 AskProtocolID 合同,暗示 ask。

handleNewDealStream 步调骨子如下:\r\n

// 客户端 peer id\r\nremotePID := s.Conn().RemotePeer()  

buffered := bufio.NewReaderSize(s, 16)

// 对流进行包装\r\nds := &dealStream{remotePID, impl.host, s, buffered}

// 调用 StorageProvider 对象的 HandleDealStream 步调,惩办客户端存储申请\r\nimpl.receiver.HandleDealStream(ds)\r\n

\r\n\r\n\t在协程中调用 StorageProvider 对象的 restartDeals 步调,再行进行来回惩办。restartDeals 步调历程如下:\r\n\r\n\t从 fsm 情状组对象中赢得扫数的来回对象。\r\n
var deals []storagemarket.MinerDeal\r\nerr := c.deals.List(&deals)\r\n
\r\n\r\n\t遍历扫数的来回对象,进行底下的惩办:\r\n\r\n\t要是刻下来回对象仍是辨别,则进行下一个惩办。\r\n\t要是刻下来回对象的聚积仍是关闭,则进行下一个惩办。\r\n\t发送首先来回事件给 fsm 情状组。\r\n
err = c.deals.Send(deal.ProposalCid, storagemarket.ProviderEventRestart)\r\n
\r\n来回提案的 Cid 暗示了情状机的称呼/编号。\r\n\r\n\r\n\r\n\r\n\t复返空值。\r\n

据天外体育音书,利物浦后卫本-戴维斯收到了来自英冠球队的和蔼,布莱克本和斯托克城都有益引进这名英格兰后卫。 据悉,尽管和利物浦的合约还有三年,但球员本次未随队进入亚洲行,这

查看更多->

因为 StorageProvider 对象被存储矿工 API 对象所依赖,是以在启动存储矿工的过程中,DI 容器会调用 StorageProvider 函数(node/modules/storageminer.go)来创建它。StorageProvider 函数历程如下:\r\n\r\n\t调用

查看更多->

PCB网城讯 7月5日下昼,广东省电路板行业协会(GPCA)常务副通知长陈世荣、高工刘晓军应邀到访深圳市触点蓝天科技(深圳)有限公司(以下简称 触点科技 ),受到触点科技董事长李勇生、总司理吴

查看更多->

官网:www.bjgfgg.com

邮箱:2e26e7@www.bjgfgg.com

联系:41752790

地址:纪检监察电子工业园4075号

Powered by beat365体育亚洲中文版在线登录-首页 RSS地图 HTML地图


beat365体育亚洲中文版在线登录-首页-能干 Filecoin:Lotus竟然数据惩办之Provider首先化 | BTC