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

    推薦する

    中国のビットコインバブルが崩壊し、日本のビットコイン決済が8,900%増加

    中国のビットコインバブルが崩壊する一方で、日本ではビットコインが急成長している。今日、中国におけるビ...

    一夜にして金持ちになれるビットコインは本当に価値があるのか​​?

    銭兄さんはかつて「2016年に逃した金儲けのチャンス」という記事を書いたことがありますが、その記事の...

    米国金融安定監視評議会:オンライン融資と分散型台帳技術は潜在的なリスクをもたらす

    クレイジーな解説: 2010 年のドッド・フランク法により、米国金融安定監督評議会の設立が認可され、...

    デジタル通貨は生態文明の構築を促進する可能性がある

    我が党の郭偉記者が北京から伝えたところによると、北京では最近、「デジタル通貨と準通貨デジタル資産運用...

    「コインマイニングニュース」エピソード2:POW爆発の年、大規模マイニングコインVS小規模マイニングコイン、あなたは正しいコインを追っていますか?

    「コインマイニングニュース」第2話捕虜爆発の年大規模マイニングコイン VS 小規模マイニングコイン...

    イーサリアム開発スタートアップのEthcoreが上海ブロックチェーン国際ウィークに参加する可能性

    クレイジーレビュー:元イーサリアムCOOのギャビン・ウッドが設立したEthcoreは、イーサリアムプ...

    ロシアの鉱業会社の数は15%増加しており、秋には新たな産業法案が導入される可能性がある。

    ロシアの暗号通貨業界は拡大しており、今年はマイニング施設を運営する企業の数が増加し、ロシア人のデジタ...

    ビットコイン・チャイナが株式100%を売却:主要株主4人が現金化

    ITテクノロジーは2月11日、ビットコインチャイナの株主ヤン・リンケ氏がBTCCの株式100%を香港...

    R3ブロックチェーンコンソーシアムの8つの銀行メンバーがインテルの「Sawtooth Lake」ブロックチェーンプラットフォームのテストに成功

    R3ブロックチェーンコンソーシアムの8つの銀行メンバーは、米国債の交換をシミュレートしたブロックチェ...

    S19の回収期間を正確に見積もる方法

    前回のマイニングマシンに関するポピュラーサイエンスの記事では、 PoWコンセンサスメカニズムに基づく...

    マイナーがBCHインセンティブの半減に不満を抱くと、ネットワークセキュリティの問題が発生する可能性がある

    Odaily Planet デイリー翻訳 |モニビットコインキャッシュ(BCH)の価格は、市場が回復...

    暗号通貨の世界は逃げ出している:ポンジスキームは崩壊し、取引所は閉鎖され、メディアは東南アジアに逃げている

    テキスト |ラチェットピザこのポンジスキームは捜査対象となり、取引所のスタッフ全員が逮捕され、暗号通...

    ポリシーのサポートにより、Web3 はどのようにしてインターネットの栄光を再現できるのでしょうか?

    1990 年代はアメリカのインターネットにとって最も栄え、最も急速に成長した時代でした。これは、ワ...

    インドネシアの5G無料スペースPangerancoidが大容量ネットワークを提供

    インドネシアの無料仮想ホスティング サービス プロバイダーである Pangeran.co.id は、...

    BTCは一晩で急騰し、4,500元の水準を突破した。主な原動力はリスク回避感情だったのでしょうか?

    「クレイジービットコイン」が帰ってきた。土曜日の夜(10月22日)、このところ比較的安定しており、...