Filecoin をマスターする: Lotus Real データ処理プロバイダーの初期化

Filecoin をマスターする: Lotus Real データ処理プロバイダーの初期化

StorageProviderオブジェクトは Storage Miner API オブジェクトに依存しているため、ストレージ マイナーの起動プロセス中に、DI コンテナーはStorageProvider関数 (node/modules/storageminer.go) を呼び出してそれを作成します。 StorageProvider関数のフローは次のとおりです。
  1. NewFromLibp2pHost関数を呼び出して、 StorageMarketNetworkオブジェクトを生成します。

    ネット:= smnet.NewFromLibp2pHost(h)
  2. NewLocalFileStore関数を呼び出して、 FileStoreストレージ オブジェクトを生成します。

    ストア、エラー:= piecefilestore.NewLocalFileStore(piecefilestore.OsPath(r.Path()))

    NewLocalFileStore関数 (go-fil-markets ライブラリ filestore/filestore.go) のプロセスは次のとおりです。

    ベース:=ファイルパス.Clean(文字列(ベースディレクトリ))
    情報、エラー:= os.Stat(文字列(ベース))

if !info.IsDir() { return nil, fmt.Errorf("%s はディレクトリではありません", base) }

return &fileStore{string(base)}, nil NewLocalFileStore関数で使用されるパスは、ウェアハウス ディレクトリです。つまり、フラグメントの一時ディレクトリはウェアハウス ディレクトリです。

  • CustomDealDecisionLogic関数を呼び出し、関数オブジェクトを返します。関数オブジェクトで提供されるコールバック関数を呼び出して、カスタムトランザクションロジックの判断を実行します。

     opt := storageimpl.CustomDealDecisionLogic(func(ctx context.Context, deal storagemarket.MinerDeal) (bool, string, error) {})
  • StorageProviderオブジェクトを生成して返します。

     p, err := storageimpl.NewProvider(net, namespace.Wrap(ds, datastore.NewKey("/deals/provider")), ibs, store, pieceStore, dataTransfer, spn, address.Address(minerAddress), ffiConfig.SealProofType, storedAsk, opt) 戻り値 p, nil

    NewProvider関数はこれを次のように処理します。

    • 環境オブジェクトはproviderDealEnvironmentです。

    • 状態オブジェクトはMinerDealです。

    • 状態フィールドはStateです。

    • イベント コレクションはProviderEventsです。storagemarket/impl/providerstates/provider_fsm.go ファイルを参照してください。

    • 状態処理関数コレクションはProviderStateEntryFuncsであり、ステートマシンの状態プロセッサは対応する状態に応じて指定された関数を取得して処理します。

    • 最終状態コレクションはProviderFinalityStatesです。

    • 通知オブジェクトは、 Providerオブジェクトのdispatchメソッドです。

    • PieceIOWithStoreオブジェクトを生成します。

       carIO := cario.NewCarIO()
      pio := pieceio.NewPieceIOWithStore(carIO, fs, bs)
    • Providerオブジェクトを生成します。

       h := &プロバイダー{
          ネット:ネット、
          証明タイプ: rt,
          spp: spp,
          フェス: フェス、
          ピオ: ピオ、
          ピースストア: ピースストア,
          接続: connmanager.NewConnManager(),
          保存された質問: 保存された質問、
          俳優: minerAddress、
          データ転送: データ転送、
          取引承認バッファ: デフォルト取引承認バッファ、
          pubSub: pubsub.New(providerDispatcher)、
      }
    • fsm 状態グループ オブジェクトを生成します。

      取引、エラー:= NewProviderStateMachine(
          ds、
          &providerDealEnvironment{h},
          h.ディスパッチ、
      )h.deals = 取引

      fsm 状態グループ オブジェクトで使用される構成パラメータは次のとおりです。

       fsm.New(ds, fsm.Parameters{ を返します。
          環境: env,
          状態タイプ: storagemarket.MinerDeal{},
          StateKeyField: "州"、
          イベント: providerstates.ProviderEvents、
          状態エントリ関数: providerstates.ProviderStateEntryFuncs、
          ファイナリティ状態: providerstates.ProviderFinalityStates、
          通知者: 通知者、
      })
    • 構成オプションを使用してProviderオブジェクトを構成します。

       h.Configure(オプション...)
    • データ転送監視対象を設定します。

       dataTransfer.SubscribeToEvents(dtutils.ProviderDataTransferSubscriber(取引))

      データ転送が開始、終了、または失敗すると、 ProviderEventDataTransferInitiatedProviderEventDataTransferCompletedProviderEventDataTransferFailedなどのイベントが fsm ステータス グループに送信されます。

    • Providerオブジェクトを返します。






      HandleDeals関数 (node/modules/storageminer.go) は、ストレージ マイナーの起動プロセス中に自動的に呼び出されます。この関数では、 StorageProviderオブジェクトのStartメソッドを呼び出してオブジェクトを起動します。

      Startメソッドの実行プロセスは次のとおりです。

      1. StorageMarketNetworkネットワーク オブジェクトのSetDelegate呼び出して、プロキシ/デリゲートをそれ自体に設定します。

        エラー:= p.net.SetDelegate(p)

        ネットワーク オブジェクトは、 libp2pStorageMarketNetwork構造体 (storagemarket/network/libp2p_impl.go) として実装されます。 SetDelegateメソッドの内容は次のとおりです。

        実装レシーバー = r
        impl.host.SetStreamHandler(storagemarket.DealProtocolID、impl.handleNewDealStream) を実装します。
        impl.host.SetStreamHandler(storagemarket.AskProtocolID、impl.handleNewAskStream) を実装します。
        nilを返す

        ネットワーク オブジェクトのhandleNewDealStreamメソッドは、ストレージを意味するDealProtocolIDプロトコルを処理するために上記で設定されています。 handleNewAskStreamメソッドはAskProtocolIDプロトコル (ask を意味する) を処理するように設定されています。

        handleNewDealStreamメソッドの内容は次のとおりです。

         // クライアントピアID
        remotePID := s.Conn().RemotePeer() buffered := bufio.NewReaderSize(s, 16) // ストリームをラップします ds := &dealStream{remotePID, impl.host, s, buffered} // StorageProvider オブジェクトの HandleDealStream メソッドを呼び出して、クライアントのストレージ要求を処理します impl.receiver.HandleDealStream(ds)
      2. トランザクションを再処理するには、コルーチンでStorageProviderオブジェクトのrestartDealsメソッドを呼び出します。 restartDealsメソッドのプロセスは次のとおりです。

        • 現在のトランザクション オブジェクトが終了した場合は、次のプロセスに進みます。

        • 現在のトランザクション オブジェクトの接続が閉じられている場合は、次のプロセスに進みます。

        • 初期トランザクション イベントを fsm ステータス グループに送信します。

          エラー = c.deals.Send(deal.ProposalCid、storagemarket.ProviderEventRestart)

          トランザクション提案の Cid は、ステート マシンの名前/番号を表します。

        • fsm 状態グループ オブジェクトからすべてのトランザクション オブジェクトを取得します。

           var deals []storagemarket.MinerDeal
          エラー:= c.deals.List(&deals)
        • すべてのトランザクション オブジェクトを走査し、次の処理を実行します。

      3. null 値を返します。







      この記事へのリンク: https://www.8btc.com/article/630375
      転載の際は出典を明記してください

    <<:  ファイルコインとイーサリアム: 近いけれど遠い良き友人

    >>:  Matrixportのビットコインオプション取引プラットフォームbit.comが正式に開始

    推薦する

    新しいアプリケーションがブロックチェーンの普及を加速させる

    ブロックチェーン技術の潜在的な用途について、4大会計事務所の一つであるデロイトは、ブロックチェーンが...

    ビットメインとジェームズ・ボンドの「武将戦争」が再浮上

    ビットメインでの権力闘争はまだ終わっていない。昨年、上級管理職から追放された元取締役のチャン・ケトゥ...

    ロシアメディア:ビットコインマイニングでどれくらいのお金が稼げるのか? 10分の1は電気代に充てられ、残りの純利益は

    中国小康網は2月27日、ラオマー・アマーケットの分析部門責任者アルチョム・デイエフ氏が記者団に対し、...

    NEMエコシステム企業Tingjinkeがスポット決済ソリューションの導入に選定

    NEMブロックチェーン技術を活用して金融システムのパフォーマンスを最適化し、オーバーヘッドを削減シン...

    コメディアンのルイス・CKは、ビットコインでアルバムを購入できると語る

    Coindesk:アメリカの有名なコメディアン、ルイスCKのパフォーマンスの音声が最近公開されました...

    チリ初のビットコイン取引所SurBTCがチリ災害被災者への寄付キャンペーンを開始

    メディアの報道によると、現地時間16日にチリでマグニチュード8.2の強い地震が発生した。 13人が死...

    家を買うこととコインを買うことについての私の気持ちを話します

    リスクを負える資金の一部をコインの保有に使うというのは、ビットコイン愛好家の間ではコンセンサスとなっ...

    ニューサイエンティスト:ビットコイン採掘の二酸化炭素排出量は予想より低い

    新たな研究は、ビットコイン(BTC)のマイニングと気候変動は相容れないという見解に異議を唱えている。...

    信頼性の低い詐欺と思われるドージコインに関するマスク氏の大胆な示唆の意図は何だろうか?

    意図的であろうと無意識であろうと、ドージコインの波紋を繰り返し巻き起こすマスク氏の意図は何だろうか?...

    グラフィックチュートリアル: DODO を採掘して最初の採掘ボーナスを獲得する方法を教えます

    8月30日、分散型取引プラットフォーム「Uniswap」の取引量が初めてCoinbaseを上回った。...

    ビットコインマイニング産業:2024年の予測

    2023年は間違いなくビットコインマイナーにとって救いの年となるでしょう。これは、2022年の不況で...

    Filecoinの流通供給を理解する

    このブログ投稿の目的は、Filecoin トークンがどのように流通供給に入るかを明らかにし、さまざま...

    Twitter で Vitalik Buterin が逃れられなかったフィッシング リンクをどうやって防ぐことができるでしょうか?

    イーサリアムの創設者ヴィタリック・ブテリン氏のツイッターアカウントがハッカーの標的となり、フィッシン...

    北京、ブロックチェーンや仮想通貨を装った違法資金調達の疑いで特別取り締まりを開始

    6月13日、北京市2019年「手を携えてネットワークを構築し、共同で防止・管理する」違法資金調達反対...

    WISeKey、ブロックチェーンID認証アプリをリリース

    レイジコメント:WISeKey International Holdings Ltd.は、ブロックチ...