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が正式に開始

    推薦する

    ビットコイン価格は欧州と米国で変動、一方人民元価格は力強く反発

    金曜日(10月9日)のアジアセッションではビットコインの価格のほとんどが変動し、全体的なパフォーマ...

    紛失または盗難されたビットコインは回復できますか?済南の裁判所が「ビットコイン損失事件」で判決を下した!

    ビットコインは、P2P 形式の仮想暗号化デジタル通貨です。特定の金融機関によって発行されるものではな...

    イーサリアム、デジタル通貨時価総額ランキングで3位に

    クレイジー解説:イーサリアムの価格は過去2週間上昇し続けており、これは一連の関連協力に関する情報の開...

    HaoBTC ビットコインブロックチェーンデイリー: 注目度は日々低下

    ブロックチェーンニュースエクスプレス : 1. Brexit後、EUの新たな提案は匿名のビットコイン...

    プライベートジェットチャーターオペレーターflyExclusiveが4つの暗号通貨のサポートを発表

    3月11日、プライベートジェットチャーター運営会社のflyExclusiveは、暗号通貨決済サービス...

    上がり続けろ!ビットコインは来週、史上最高値を更新するかもしれない!

    Bitpushのデータによると、時価総額が最大の暗号通貨であるビットコインは金曜日も急騰を続け、価...

    強気相場は頂点を脱出、注目すべき重要なシグナル

    最近の記事のコメントには、今投資する価値のあるプロジェクトをいくつか推薦してほしいという読者が常にい...

    ロシアはビットコイン合法化を祝うよう呼びかける

    数週間前、ロシア当局はビットコインの使用は法的観点から合法であると発表した。人口1億4600万人のロ...

    ETC をもう一度見てみましょう: その価値は何でしょうか?

    先週、イーサリアムクラシック(ETC)が久しぶりにニュースになりました。時価総額が30億ドルを維持し...

    1475年の最初のオフラインサロンは大成功でした。あなたが気にするものはすべてここにあります!

    《IPFSに入り、1475に出会う》 主催者: 1475 2020年7月20日午後、1475は「I...

    Coinnet 探索ビデオ: 14nm マイナーが 12 月末にリリース予定

    BW.COMが10月19日に報じたところによると、BW.COMは最近インタビュー動画を公開した。 B...

    R3 CEO: 馬明哲氏はホワイトボードを使って分散型台帳技術の進化を描いている

    R3CEV ブロックチェーン アライアンスのメンバーは、アジア、ヨーロッパ、北米から来ています。明ら...

    アルトコインは最終的に失敗する

    アルトコインが成功できない理由新しいアイデアは、先見の明のある人や先駆者だけでなく、ペテン師や愚か者...

    ビットコインが13,000ドルを突破、その秘密とは?

    ビットコインが大暴れ中! 6月26日13時20分、ビットコインの価格は一時13,000ドルを突破し、...