Búsqueda de sitios web

javascript - cid de nft.storage antes de la carga


Necesito obtener CIDs antes de que los archivos se suban a IPFS con un cliente de nft.storage para que los CIDs estén listos para usar/guardar mientras los archivos multimedia se suben en segundo plano.

El problema es que un CID que obtengo con multiformats difiere del CID que obtengo de mi cliente nft.storage y no tengo este problema con contenido text/json pero sí lo tengo con imágenes.

Los textos devuelven el mismo CID:

const client = new NFTStorage({ token: process.env.NFT_STORAGE_TOKEN! });
const textBuffer = await fs.readFile('./somepath/to/text.json);

const IPLD_CODEC_RAW = 85;
const CID_VERSION = 1;
const hashText = await sha256.digest(textBuffer);
const cidText = CID.create(CID_VERSION, IPLD_CODEC_RAW, hashText);

const metadataBlob = new NFTBlob([textBuffer]);
const metadataCid = await client.storeBlob(metadataBlob);

// cidText.toString() === 'bafkreihp4n2z4bxyhwsa2kr2ontaporasoz5s7ckr7xpfczejcc7tkdmbu',
// metadataCid.toString() === 'bafkreihp4n2z4bxyhwsa2kr2ontaporasoz5s7ckr7xpfczejcc7tkdmbu',
// cidText.toString() === metadataCid.toString()

Pero imágenes no:

const imageBuffer = await fs.readFile('./some/png.png');

const IPLD_CODEC_DAG_PB = 112;
const hashImage = await sha256.digest(imageBuffer);
const cidImage = CID.create(CID_VERSION, IPLD_CODEC_DAG_PB, hashImage);

const screenshotBlob = new NFTBlob([imageBuffer]);
const screenshotCid = await client.storeBlob(screenshotBlob);    

// cidImage.toString() === 'bafybeihbpiryqgmzmq3w2buelaeznjfn72bexbpmlz5frjjydnjdxfdkyy'
// screenshotCid.toString() === 'bafybeidac4j5zptzevfbh2r5qt5w4sbu2rtk7yql3ixhq7owjw6lqpsieq'
// cidImage.toString() !== screenshotCid.toString()

Parece que tienen un multihash diferente, pero no tengo ni idea de por qué.

¿El cliente de nft.storage utiliza algún hash especial?

Paquetes en uso:

"multiformats": "^9.9.0",
"nft.storage": "^6.4.0",

Respuesta #1

En lugar de usar multiformatos, puedes simplemente usar almacenamiento NFT para obtener el CID.

import { NFTStorage, Blob } from "nft.storage";
import { Blockstore } from "nft.storage/src/platform.js";

const client = new NFTStorage({ token: process.env.NFT_STORAGE_TOKEN! });
const imageBuffer = await fs.readFile('./some/png.png');
const screenshotBlob = new Blob([imageBuffer]);
const blockstore = new Blockstore();
const { cid } = await NFTStorage.encodeBlob(screenshotBlob, { blockstore });
const screenshotCid = await client.storeBlob(screenshotBlob);
//cid.toString() === screenShotCid

Artículos relacionados