0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Node.js】コードからNFTを作成する方法

Last updated at Posted at 2023-10-30

Alchemyのサイトを参考に、Node.jsでNFTをミントしてみました。
https://docs.alchemy.com/docs/how-to-mint-an-nft-from-code

私の環境

  • Node.js: v20.0.0
  • テストネットワーク:Goerli 
  • 開発環境: VS Code

※2024年に入りGoerli が使えなくなりました。
テストネットSepoliaについてはこちらをご確認ください。
https://www.alchemy.com/overviews/migrate-to-sepolia

準備

画像

NFTにしたい画像を用意する


画像を簡単にIPFSにできるPinataを使う。

Pinataはアカウントなくても(ログインしなくても)使える。
「Start Building」をクリック
Image from Gyazo

「Upload」をクリック
Image from Gyazo

アップロード後
ハッシュ値をコピーする
Image from Gyazo

アップロードしたファイルは、以下のサイトで見ることができる。

https://gateway.pinata.cloud/ipfs/<ハッシュ値>

NFTのメタデータ作成

OpenSea の標準を参考に
メタデータのJSONファイルを作成する。

OpenSea の標準はこちら参照
https://docs.opensea.io/docs/metadata-standards

nft-metadata.json
{
  "description": " ", 
  "external_url": "", 
  "image": "https://gateway.pinata.cloud/ipfs/<ハッシュ値>", 
  "name": "Cats",
  "attributes": [ ... ]
}

このJSONファイルを再度Pinataにアップロードする。

アップロード後、JSONファイルのハッシュ値をコピーしてどこかに控える。

以下が、のちほどのコードの変数tokenUriの値になる

https://gateway.pinata.cloud/ipfs/<メタデータJSONファイルのハッシュ値>

Remixでスマートコントラクト作成

こちらを参考
https://qiita.com/tatsuya1970/items/2381d21399a19f349e57

作成したコントラクトのABIをコピーしてどこかに控えておく。


Alchemy API キーの作成

Alchemy にアクセスする。
https://www.alchemy.com/

「Apps」 > 「Create App」

Image from Gyazo

チェーンとネットワークを選び、
アプリ名前を記入し
「Create app」をクリックする。

Image from Gyazo

API Key をクリック
Image from Gyazo

API Key と HTTPSをどこかに控えておく。

Image from Gyazo

環境変数の設定

ルートディレクトリで
Ethereumブロックチェーンのライブラリ ethers.js と
環境変数設定のライブラリ dotenv をインストールする。

$ npm install --save ethers
$ npm install --save dotenv

ルートディレクトリに .envファイルを作成し、
環境変数を設定する。

.env
API_URL = "AlchemyのHTTP"
API_KEY = "AlchemyのAPIキー"
PRIVATE_KEY = "自分のMetamaskの秘密鍵"

同じくルートディレクトリに先ほどRemixで作成したNFTのコントラクトのABIをコピーして「abi.json」 というファイルを作る。

スクリプトの作成

mint-nft.js
'use strict';
require('dotenv').config();
const { ethers } = require("ethers");

// Get Alchemy API Key
const API_KEY = process.env.API_KEY;
const provider = new ethers.AlchemyProvider('goerli', API_KEY)
const privateKey = process.env.PRIVATE_KEY

const signer = new ethers.Wallet(privateKey, provider)
const abi = require("./abi.json")

const contractAddress = 'さきほどRemixで作成したNFTのコントラクトアドレス' 

// Create a contract instance
const myNftContract = new ethers.Contract(contractAddress, abi, signer)

const tokenUri = "https://gateway.pinata.cloud/ipfs/<メタデータJSONファイルのハッシュ値>"

// Call mintNFT function
const mintNFT = async () => {  
    let nftTxn = await myNftContract.safeMint(signer.address, tokenUri)
    await nftTxn.wait()
    console.log(`NFT Minted! Check it out at: https://goerli.etherscan.io/tx/${nftTxn.hash}`)
}

mintNFT()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

実行

$ node mint-nft.js

このメッセージがでたら、NFTのミント成功です。

NFT Minted! Check it out at: https://goerli.etherscan.io/tx/........

Openseaのテストネットで確認すると、NFTができてます。

スクリーンショット 2023-10-30 22.35.52.png

以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?