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

    推薦する

    韓流ブームが来ています。 DAC がトレンドにどう逆らうか見てみましょう。

    ポイントツーポイントの価値伝達の世界的な流動性と適時性により、デジタル通貨の開発はかつてないほど注目...

    ビットワイズ:ハリスの発言でBTCが5%上昇、それは何を意味するのか

    月曜日の午後にこのメモを書いている時点で、暗号通貨市場は劇的に上昇しています。ビットコインは過去24...

    Turedealはブロックチェーンを活用して中古高級品の取引を促進

    中国の中古高級品取引は急速に発展しつつある。ブロックチェーンは、中古高級品の流通管理を解決し、業界の...

    約1億ドルの現金を持つ暗号通貨投資家は、米国の選挙にどのような影響を与えるのでしょうか?

    暗号通貨ロビー団体は米国の政治候補者に警告を発している。「我々の側に立たなければ、選挙で敗北する危険...

    ウー・ジハンの初ライブ放送:不安定な変動の世界では、ビットコインは決して安全な避難場所ではない

    3月25日夜、智光大学は「世界各地の鉱夫との初のインタビュー」を開催し、Chain NodeとYiz...

    ビットコインは7月に70%急騰、専門家は中国が規制対象に含めるべきだと示唆

    7月に入るとビットコインは上昇し始めました。記者はビットコイン(中国)のKラインチャートから、ビット...

    ビットコインと金の類似点は何ですか?

    貴金属、ビットコイン、その他の商品などの投資は、大国経済のパフォーマンスと逆相関関係にあるため、従来...

    アーサー・ヘイズ:旧通貨システムの終焉と金とビットコインの復活

    炭化水素エネルギーに関する最後の大きなショックは、アラブの供給国が西側諸国を襲ったときだった。湾岸諸...

    イーサリアムのクジラが減少し、取引プラットフォーム上のイーサリアムの残高は9か月ぶりの低水準に落ち込んだ。

    BlockBeatsによると、9月21日、Glassnodeのデータによると、暗号通貨取引プラット...

    2021年を振り返る:暗号業界で最も重要な10の出来事 ウー氏は年末の振り返りでこう語った(1)

    潮は満ち引きを繰り返し、私たちは2021年に別れを告げ、2022年を迎えます。ウー氏は、著者は | ...

    基礎知識を超えて、リスク管理の問題点を見てみましょう

    著者はこれまで、インターネット金融業界におけるいくつかの主要なリスク管理の革新について執筆しており、...

    スペースレース2が始まります!スリングショットのルールの説明

    SR2 Slingshot は、Filecoin Space Race ネットワーク (テストネッ...

    火の中の涅槃:ブロックチェーン、ビッグデータなど。金融テクノロジー業界の AlphaGo は誰でしょうか?

    2016 年 3 月は特別な月になるはずでした。世界的に有名なアルファ碁とイ・セドルの対決は、機械...

    ビットメインのマイニングマシン遅延補償ポリシーが強化され、業界のアフターサービス基準の構築を支援

    今年4月以降、仮想通貨の価格が底打ちして反発し、マイニングマシン市場も急速に回復しました。大手鉱山機...