私は現在、YouTube と同様に機能するがストレージに IPFS のみを使用する Web サイトのバックエンドに取り組んでいます。つまり、サイトにビデオを「アップロード」したい場合は、既に IPFS ネットワーク上にある必要があります。実際の機能は何よりもインデックスですが、それは私が取り組みたかったものでした。
私が取り組んでいるセクションは、その特定のコンテンツのプロバイダーがまだネットワーク上に存在することを確認することによって、CID ハッシュの整合性を検証することを目的としています。存在しない場合、CID と関連する情報はデータベースから削除されますが、現在、関数を使用しようとすると問題が発生しipfs.dhs.findProvs
ます。
ここに私のコードの一部があります:
const ipfs = await IPFS.create({
libp2p: { config: { dht: { enabled: true } } },
});
for (var i of integrityData) {
let cid = new CID(i.CID);
console.log(cid);
let providers = ipfs.dht.findProvs(cid, { numProviders: 2 });
for await (const provider of providers) {
console.log(provider);
}
}
エラーログ:
C:\Users\...\node_modules\libp2p-kad-dht\src\providers.js:202
this._log('getProviders %s', cid.toBaseEncodedString())
^
TypeError: cid.toBaseEncodedString is not a function
私のコードをさらに説明すると、 for ループは、データベース内のすべての CID を照会した後、データベースから受け取った JSON コンテンツを繰り返しています。i.CID は正しい CID を文字列として返します。この文字列から CID オブジェクトを作成し、関数 here に渡しますipfs.dht.findProvs(cid, { numProviders: 2 });
。ネストされた for ループは、受信したオブジェクトを反復処理するためにありますが、同じエラーが発生し続けるため、その段階には到達していません。