NFTをデプロイしよう
🥳 Initialize SDK
前回のLessonにより、thirdwebのスクリプトを実行する環境構築を行いました。
それでは実際にスクリプトを書き、メンバーシップNFTをコントラクトにデプロイしていきましょう。
src/scripts/1-initialize-sdk.tsを作成して、以下を追加します。
import nextEnv from "@next/env";
import { ThirdwebSDK } from "@thirdweb-dev/sdk";
// 環境変数を env ファイルから読み込む
const { loadEnvConfig } = nextEnv;
const { PRIVATE_KEY, CLIENT_ID, SECRET_KEY } = loadEnvConfig(
process.cwd()
).combinedEnv;
// 環境変数が取得できているか確認
if (!PRIVATE_KEY || PRIVATE_KEY === "") {
console.log("🛑 Private key not found.");
}
if (!CLIENT_ID || CLIENT_ID === "") {
console.log("🛑 Client ID of API Key not found.");
}
if (!SECRET_KEY || SECRET_KEY === "") {
console.log("🛑 Secret Key of API Key not found.");
}
const sdk = ThirdwebSDK.fromPrivateKey(PRIVATE_KEY!, "sepolia", {
clientId: CLIENT_ID,
secretKey: SECRET_KEY,
});
// ここでスクリプトを実行
(async () => {
try {
if (!sdk || !("getSigner" in sdk)) return;
const address = await sdk.getSigner()?.getAddress();
console.log("SDK initialized by address:", address);
} catch (err) {
console.error("Failed to get apps from the sdk", err);
process.exit(1);
}
})();
// 初期化した sdk を他のスクリプトで再利用できるように export
export default sdk;
たくさんあるように見えますが、やっていることは以下の2つだけです。
- thirdwebの初期化
- 初期化したSDKを他のスクリプトで再利用できるようにexport
これは、サーバーからデータベースへの接続を初期化するのと似ています。
🍬 SDK の初期化を実行する
次に、以下を参考にpackage.jsonに"type": "module",の記述を追加してESModulesを有効化してts-nodeを使用できるように設定を変更します。

続いて、next.config.jsを以下のとおり変更します。
/** @type {import('next').NextConfig} */
export const nextConfig = {
reactStrictMode: true,
};
ここまで準備ができたら、ターミナルに移動して以下のコマンドを実行しましょう。
yarn node --loader ts-node/esm src/scripts/1-initialize-sdk.ts
スクリプトを実行して成功すれば、以下のような結果が出力されます。
SDK initialized by address: 0x8cB688A30D5Fd6f2e5025d8915eD95e770832933
Done in 3.62s.
ウォレットのアドレスが表示されたら、SDKの初期化が正常に完了したことを意味しています。
📝 備考: ExperimentalWarningのようなランダムな警告が表示されることがありますが、アドレスが表示されていることを確認してください
🧨 ERC-1155 のメンバーシップ NFT コレクションを作ろう
これから行うのは、ERC-1155 コントラクトを作成し、Sepoliaテストネットにデプロイすることです。
現段階ではNFTを作成せず、コレクション自体のメタデータを設定するところまで行います。
ここで言うメタデータとは、コレクションの名前(例: CryptoPunks)や、コレクションに関連する画像(OpenSeaでヘッダーとして表示されます)などとなります。
ERC-721 をご存知の方は、同じ画像、名前、プロパティを持つNFTであっても、それぞれユニークです。
一方で、ERC-1155 では、複数の人が同じNFTの所有者になることができます。
今プロジェクトで作る「メンバーシップNFT」は全員が同じもので問題ないので、毎回新しいNFTを作るのではなく、会員全員に同じNFTを割り当てるだけでいいのです。
この方がガス効率も良く、DAOではこの手法が一般的です。
では、src/scripts/2-deploy-drop.tsを作成し、次のコードを追加してください。