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

    推薦する

    Coinbase CEO: ビットコイン関連の特許を申請した理由

    編集者注: 原著者のブライアン・アームストロング氏はビットコイン会社 Coinbase の CEO ...

    [更新] グレイスケールは保有量を994BTCと1,787BCH増加

    最近、グレイスケールの保有資産は業界内外から注目を集めています。グレイスケールのマネージングディレク...

    ビットメインのモバイルマイニングファームANTBOXが業界展示会でデビュー

    最近、BitmainのモバイルマイニングファームANTBOX製品が業界展示会で発表され、現場のマイナ...

    蚌埠市のコミュニティの地下駐車場に「ビットコイン」工場が建設された疑いがある。関係部署が捜査に介入

    大湾ニュース:最近、蚌埠市の恒大玉井湾コミュニティの多くの住民が、コミュニティ内の16号ビルの地下駐...

    ブロックチェーン開発(パート2)最初のEthereumスマートコントラクトのデプロイと実行

    ブロックチェーン開発(パート2)最初のEthereumスマートコントラクトのデプロイと実行インターネ...

    BTC ハッシュレートは 2017 年の初めから 27 倍に増加しました。これは価格上昇を刺激できるでしょうか?

    この記事はAMBCryptoからのもので、原著者はAakash Athawasyaです。 Odail...

    ファイルコイン知識の普及: ウォレットと貸付プラットフォーム

    01ファイルコインウォレット暗号通貨では、ウォレットの重要性は誰もが知っています。分からない場合は...

    SC フルノードウォレットのアップグレードチュートリアル

    SC はブロック高 139000 でフォークし、公式がフルノード ウォレットをアップグレードしました...

    ビットコインマイナーは、この低収益環境で生き残るのは難しいと語る

    最近、ビットコインマイニング事業を運営するのは非常に心配なことになりそうです。暗号通貨市場の低迷によ...

    ETH カードマイナーセルフサービスソリューション

    簡単なマイナーで、ユーザーに価値を生み出します。ソフトウェア、システム、6G または 8G、A カー...

    HashPool Nervos CKB マイニング チュートリアル

    CKBは現在、5回目で最後のマイニングコンテストを開催しています。このマイニングコンテストの総報酬は...

    銀行から見たブロックチェーンアプリケーションの課題と機会

    ブロックチェーン技術は世界中の大手金融機関の注目を集め、研究されています。ゴールドマン・サックス、シ...

    ステーブルコインの年率27%に到達: Ethena Labsはどれだけ持続可能か?

    編集者注: 2月16日、イーサリアムベースのステーブルコインUSDeの開発者であるEthena La...

    この小規模な暗号通貨強気相場は続くのでしょうか?

    仮想通貨市場の投資家は数ヶ月ぶりに弱気相場を脱しつつある。イーサリアム、リド、ポリゴンなどの仮想通貨...

    暗号通貨の世界では誰もがEOSに「ただ乗り」しているが、EOSメインネットの生死を気にする人はいない

    5月25日、EOS メインネット立ち上げチームは合意に達し、EOS と呼ばれる 1 つのメインネット...