Bitswap
Bitswapはデータブロックを交換するためのIPFSのコアモジュールである。ネットワーク上の他のピアとのブロックの要求と送信を指示します。Bitswapはメッセージベースのプロトコルであり、すべてのメッセージにウォンツリストやブロックが含まれます クライアントが要求したブロックをネットワークから獲得する
所有するブロックを、必要とする他のピアに送る
Bitswapの仕組み
IPFSはファイルをブロックと呼ばれるデータの塊に分割する。これらのブロックはコンテンツ識別子(CID)で識別される。 Bitswap protocolを実行しているノードがファイルを取得したい場合他のピアにWant Listsを送信する
Want Lists: ブロックのCIDのLists 各ノードはピアがどのブロックを欲しがっているかを記憶している
ノードはブロックを受信する度にそのブロックを欲しがっているピアがいるかどうかをチェックし、欲しがっていればピアに送る
code:Want List.js
Want-list {
QmZtmD2qt6fJot32nabSP3CUjicnypEBz7bHVDhPQt9aAy, WANT,
QmTudJSaoKxtbEnTddJ9vh8hbN84ZLVvD5pNpUaSbxwGoa, WANT,
...
}
多分ブロックは取得できるけど内容は暗号化されていて、復号化が出来ないってこと
Discovery
ファイルを持っているピアを見つけるためにBitswap protocolを実行しているノードは、接続されている全てのピアにwant-haveリクエストを送る
ファイルのRoot blockが含まれる
Root blockを持つピアがhave応答を送信し、セッションに追加される
持っていないピアはdont-haveを送信する
https://scrapbox.io/files/649e576a4fb880001cd006b8.png
Trensfer
ブロックをもつピアにwant-blockを送信しピアはブロック自体で応答する
どのピアもRoot blockを持っていない場合、分散ハッシュテーブルに問い合わせ、誰がRoot blockを提供できるかを尋ねる