ここを見ながらやりました。
ファイルをアップロードするようなことを、IPFSではピンというらしいですね。
(違ったらごめんなさい)
私の環境
- macOS Ventura
- Node.js: v20.9.0
- 開発環境: VSCode
準備
PINATA
APIキーを取得して、どこかに控えておく
環境変数の設定
ルートディレクトリで
Pinata のSDKと
環境変数設定のライブラリ dotenv をインストールする。
npm install --save @pinata/sdk
npm install --save dotenv
ルートディレクトリに .envファイルを作成し、
さっき控えたAPIキーなどを環境変数を設定する。
.env
PINATA_API_KEY = "PINATAのAPIキー"
PINATA_API_SECRET = "PINATAのAPIシークレットキー"
APIがとおるか、以下のコードで確認
index.js
const PINATA_API_KEY = process.env.PINATA_API_KEY;
const PINATA_API_SECRET = process.env.PINATA_API_SECRET;
const pinataSDK = require('@pinata/sdk');
const pinata = new pinataSDK(PINATA_API_KEY, PINATA_API_SECRET);
pinata.testAuthentication().then((result) => {
//handle successful authentication here
console.log(result);
}).catch((err) => {
//handle error here
console.log(err);
});
コンソールログに以下のメッセージが出たらOK
{ authenticated: true }
こんなエラーが出る場合は、
Error [ERR_SOCKET_CONNECTION_TIMEOUT]: Socket connection timeout
Node.jsのバージョンを V20.9.0 にアップデートしたら解決しました。
ちなみに、僕のバージョン管理ツールは NVM なのでここをみながらやりました。
ファイルをIPFSにピンする
ここを見ながらやりました。
この写真を以下の index.js と同じディレクトリに pic.png というファイル名で保存する。
index.js
require('dotenv').config();
const PINATA_API_KEY = process.env.PINATA_API_KEY;
const PINATA_API_SECRET = process.env.PINATA_API_SECRET;
const pinataSDK = require('@pinata/sdk');
const pinata = new pinataSDK(PINATA_API_KEY, PINATA_API_SECRET);
const fs = require('fs');
const readableStreamForFile = fs.createReadStream('./pic.png');
const options = {
pinataMetadata: {
//nameは必須
name: 'Cats',
//keyvaluesは必須ではない
keyvalues: {
customKey: 'customValue',
customKey2: 'customValue2'
}
},
pinataOptions: {
cidVersion: 0
}
};
pinata.pinFileToIPFS(readableStreamForFile, options).then((result) => {
//handle results here
console.log(result);
}).catch((err) => {
//handle error here
console.log(err);
});
これを実行すると、
{
IpfsHash: 'QmWZF4Vbm8nqfkvVngnYWhgyLc8XYp7kN4RWZa1VfMuDxc',
PinSize: 74809,
Timestamp: '2023-11-16T14:42:17.257Z'
}
IPFSに保存されました。
このアドレスで確認できます。
https://gateway.pinata.cloud/ipfs/<IpfsHash>
つまり、本件ではこちらのアドレスに猫の写真がピンされました。
https://gateway.pinata.cloud/ipfs/QmWZF4Vbm8nqfkvVngnYWhgyLc8XYp7kN4RWZa1VfMuDxc
以上です。