📖

nftアプリケーションにはipfsを活用する

2024/08/22に公開

web3storageを使う

web3storageとはFileコインという分散型ストレージに簡単にアクセス&使えるようにしたアプリケーションです。

使う際の注意点

無料で使えるのは5GiBなので注意です。それ以上は有償です。

もう1つの注意点としては、web3storageのdocsには2種類あり、古いドキュメントと新しいドキュメントがあります。

以下は古いドキュメントです。
https://web3.storage/docs/w3up-client/

以下は新しいドキュメントです。
https://web3.storage/docs/w3up-client/

新しい方のライブラリを使うためにはnodeのバージョンが18以上であることが必要です。

node.jsで使う

https://old.web3.storage/docs/reference/js-client-library/
上記の公式Docを参考にしています。

npm install web3.storage
import { Web3Storage } from 'web3.storage';

// apiTokenは自分のトークンを入れる。
const client = new Web3Storage({ token: apiToken });

// ファイルを分散ストレージ上にputする
const rootCid = await client.put(file)

オプション

name、maxRetriesというオプションが便利です。nameはアップロードするコンテンツに名前をつけることでどのようなコンテンツか後からわかりやすくできます。特にnftアプリケーションを運営する場合にはその画像がどのような画像かが識別しやすくなるので管理が楽になります。

maxRetriesは最大試行回数を表しています。putの関数が失敗した場合最大何回試行回数できるかを設定できます。何かしらの状況で一回目でうまくアップロードできないことを想定し、最大試行回数は3回~5回を目処に設定した方が無難です。

apitokenの発行

apitokenの発行をするにはweb3.storageでアカウントを発行する必要があります。

アカウント発行の際にはstripe経由でクレジットカードの登録が必要になります。

新しいライブラリでのやり方

https://web3.storage/docs/w3up-client/

npm install @web3-storage/w3up-client
export const getWeb3StorageClient = async (req: any, res: any) => {
  const client = await create();
  if (process.env.WEB3STORAGE_EMAIL !== undefined) {
    const account = await client.login(
      process.env.WEB3STORAGE_EMAIL as `${string}@${string}`
    );
    const did = process.env.WEB3STORAGE_DID;
    if (did !== undefined) {
      await account.provision(did as `did:key:${string}`);
    }
  }
  return client;
};

const client = await getWeb3StorageClient(req, res);
            const cid = await client.uploadFile(data);

Discussion