ノーコードでNFTを作る ( 検証用ローカルブロックチェーンを活用 )

目次

概要

ノーコードで、NFTを発行する手順について紹介します。

用語

  • ブロックチェーン

  • ブロックチェーンの弱点

    • 一度記録された情報は削除できない

      • 悪意ある利用者も、正規の利用者も、ブロックチェーン管理者も、一度記録されたトランザクションは変更できない。改ざんしようとしたことさえも記録され、記録を削除できない。結果として、改ざんができない。

      • あらゆる処理(トランザクション)を記録するため、ストレージサーバーの容量を大量に消費しがち。

  • (ブロックチェーン)パブリックネットワーク / パブリックチェーン

    • 非中央集権型

    • Bitcoin等の仮想通貨向き

    • 不特定多数が利用できる

    • 単一の管理者がいないため、すべての取引履歴がオープンで透明性が高い

    • トラブルが起きたときの責任の所在が明確ではない。<< 中央集権型ではないことの影響

  • (ブロックチェーン)プライベートネットワーク / プライベートチェーン

    • 中央集権型

    • 単一の管理者がおり、参加者(利用者)が限定されているブロックチェーンネットワークのこと。単一の管理者がいるため、悪意ある利用者を防ぎやすく、秘匿性の高い機密情報を扱いやすい

    • マイニング報酬等のインセンティブが不要。

    • 企業間取引の記録、政府等がコントロールする必要のある、銀行等の一般的な金融機関の取引の記録、特定の会員限定サービスなど

    • 開発環境としても向く

      • 特定の人だけが使うパソコンやサーバーに構築 >> ローカルブロックチェーン。パブリックチェーンに公開する前に、プライベートチェーンやローカルブロックチェーンで動作確認を行う。

  • Ethereum(イーサリアム)

    • ブロックチェーンを前提とした分散型アプリケーションやスマート・コントラクトを構築するためのブロックチェーン・プラットフォームの名称。Ethereumの他に、Hyperledger というものも有名どころとしてある。

  • スマートコントラクト

    • ブロックチェーン上の概念の1つで、あらかじめ決められた処理を、ブロックチェーンでの取引(トランザクション)やブロックチェーン外からのアクションといった所定の条件を満たしている場合に、自動実行するプログラム。

  • ウォレット

    • ユーザーの公開鍵と秘密鍵を保存し、暗号化残高を管理するための機能 = 財布のような役割でウォレットと呼ばれる。

  • Metamask

    • Ethereum系ブロックチェーンの通貨やNFTを一括で補完・管理できるソフトウェアウォレット

  • Truffle

    • Ethereum向けのスマートコントラクトのコンパイルやテスト、デプロイを担う。Gnacheと組み合わせて使用することが多い。この資料は直接使うことはないが、Ganacheと組み合わせたサンプル(https://trufflesuite.com/boxes/ )が多数あるので、ブロックチェーンを前提としたアプリを作りたいときに使うと良い。

  • Ganache

    • Ethereumを前提とした開発環境や検証環境向けプライベートチェーンを構築できるソフトウェア。最近は、「Hardhat」の方が主流。GanacheはGUIが提供されるので、プログラミングをなるべく書きたくない人には心強い。

  • Thirdweb

    • NFTや仮想通貨をノーコードで発行できるフレームワークを提供している。

  • NFT

    • 非代替性トークン >> 替えが効かないデジタルデータ

    • NFTは、次のような情報で構成されている。従って画像や動画といったデータ自体は複製可能。しかし、その他のデータ、ブロックチェーンで管理される取引履歴までを含めれば、コピー不可の唯一な作品と言える。

      • NFT名称

      • NFT作品情報

        • 保存場所

        • 作者名

        • タイトル

        • ファイル形式

        • 作品本体データのURL

      • NFT発行者情報

      • 取引履歴

開発環境の構築

開発の際にはパブリックなブロックチェーンではなく、プライベートなブロックチェーンネットワークを構築します。パブリックなブロックチェーンネットワークを前提とした学習は、環境維持費用として毎月300ドルかそれ以上かかるため、学習に毎月3~5万円程度使える必要があり定期的な収入を確保していることが重要です。

しかし、1人あたり毎月3~5万円程度のコスト割り当てが難しい、たとえば大学の授業や自治体の講座のようなケースでは困難であるため、パソコン上にプライベートなブロックチェーンネットワークを構築することで、ブロックチェーンを活用したシステム開発環境を整えます。

前提

このドキュメントは、GUIありの仮想サーバーを用います。

ローカルブロックチェーンを動かす仮想マシンの用意

仮想マシンのスペック

例として、仮想環境としてVirtualBoxを使っていますが、他の仮想環境でも構いませんです。以下のスペックの仮想サーバーを用意します。

  • OS:Ubutnu Server 20.04 または、Ubutnu Server 22.04

  • 仮想CPU割り当て数 : 2

  • 仮想メモリ割り当て:4096MB(4GB)以上

  • 仮想ディスク:64GB以上

GUIを追加

ローカルブロックチェーンとして、Ganache(ガナシュ)を使うため、デスクトップ環境を用意します。軽量な「lubuntu-desktop」が良いでしょう。
手順書 >> https://mydocument.atlassian.net/wiki/spaces/support4textbook/pages/1675264052

GUIとして、Lubuntu デスクトップ環境をインストールした例。

画面左下をクリックすると、スタートメニューが起動します。

「システムツール」>>「QTerminal」の順にクリックすることで、ターミナルアプリが起動し、各コマンドを実行することができます。

作業ディレクトリ

仮想マシンのユーザー名を、vboxuser とする。パスは、/home/vboxuser になる。

Ubuntu(Linux)に最新のソフトウェアを適用

sudo apt update -y sudo apt upgrade -y sudo apt autoremove -y

Node.js LTS公式のインストール

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash sudo apt-get install -y nodejs

Chromiumのインストール

Chromiumのインストールは、Snapコマンドを使ってインストールします。

sudo snap install chromium

Linuxを再起動する。再起動後、Chromiumブラウザが使用可能になる。Google ChromeやMicrosoft Edgeは、Chromiumブラウザを元にしています。

Metamask のインストールとウォレットの作成

Chromeを起動する

Chrome拡張で、Metamaskをインストール Chromeを起動し、下記にアクセス。

MetamaskをChrome拡張機能としてインストール https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=ja

  1. 「Chromeに追加」>> 「拡張機能を追加」の順にクリック。

  2. インストール後、下記ををブックマーク登録する。

「始めましょう」が表示される。「利用規約」をクリックすることで、利用規約が表示されるので要確認。「I agree to Metamask’s 利用規約」にチェックを入れ、「新規ウォレットを作成」をクリックする。

「Metamaskの改善にご協力ください。」と表示される。ここでは、「同意する」「結構です」のどちらをクリックしても良い。どちらかをクリックしよう。

「パスワードを作成」が表示される。パスワードを2回入れる。ここで入力したパスワードは、忘れても復元することはできない。(例 zxcvfr45metamask )
「私はMetaMaskがこのパスワードを復元できないことを理解しています。」にチェックを入れ、「新規ウォレットを作成」をクリックする。

「ウォレットの保護」に関する動画を視聴する。その後、「ウォレットの安全を確保(推奨)」をクリックする。

自分のパソコンを覗き見る人がいないか周囲を確認しましょう。「シークレットリカバリーフレーズを公開する」をクリックする。

「シークレットリカバリーフレーズを書き留めてください」と表示されるので、表示されている1~12までの文字列をメモしておく。

「次へ」をクリックする。

「シークレットバックアップフレーズの確認」画面が表示されます。表示されている単語をクリックして組み合わせ、確認した「シークレットバックアップフレーズ」と同じになるようします。その後、「確認」をクリックします。

「ウォレットが作成されました」と表示されます。「了解」をクリックします。

「MetaMaskのインストールが完了しました」と表示されるので、「次へ」をクリックする。

「MetaMask」のインストールが完了しました」と表示されるので、「完了」をクリックする。

作成したEthereum(イーサリアム)のウォレットが表示されます。「Account1」と表示されている箇所の右端の「⁝」をクリックし、「アカウントの詳細」をクリックすると、ウォレットのアカウントIDなど詳細情報が表示されます。

Truffleのインストール

実行結果

Ganacheのインストール

Ganache(ガナッシュ)は、開発環境向けにEthereum対応のプライベートブロックチェーンネットワークを構築・運用することができます。開発やテスト(動作確認)のために、開発用の仮想サーバーに、プライベートなブロックチェーンネットワークを構築する必要があり、Etherreumの場合は、GanacheやHardhatといったソフトウェアを使用します。

Ganacheのインストール時にエラーになることがあるので、Fuseをインストールしておきます。

Ganacheのインストールを行います。

Ganacheのワークスペース作成

  1. GANACHEのインストール画面が起動する

  2. 「CONTINUE」をクリック

  3. 「NEW WORKSPACE」をクリック

  4. 「WORKSPACE NAME」に英数字でワークスペース名が入っていることを確認します。

  5. 「SERVER」タブで、「PORT NUMBER」に、8545 を指定します。

  6. 画面右上の「START」をクリック。

  7. WORKSPACE を作ることで、GANACHE を閉じて、再び起動しても作成しておいたWORKSPACE を再利用できる。

Ganacheにより、Ethereumのプライベートネットワークが起動し、10個のテスト用アカウントが発行されます。

プライベートなブロックチェーンネットワークは、上の図では、NETWORK IDとして5777、RPC SERVERにはHTTP://127.0.0.1:8545 と表示されています。NETWORK IDとRPC SERVERの値は、自分の環境で確認してください。

以後、Ganacheを起動するには、下記のコマンドを実行する。( ユーザー名が、vboxuser の場合 )

テスト用アカウントの秘密鍵の確認

起動したGanacheにおいて、表示されている10個のテスト用アカウントでは、画面右端の鍵のアイコンをクリックすることで、PRIVATE KEY(秘密鍵)を表示することができます。この後の作業で、PRIVATE KEY(秘密鍵)を必要としますので、確認しておきましょう。

 

MetamaskとGancheの接続

ネットワークの追加

  1. ウォレットの画面で「イーサリアムメインネット」をクリックし、下図のように表示されます。

  2. 「ネットワークを追加」をクリックします。

  3. 画面下に移動し、「ネットワークを手動で追加」をクリックします。

  4. Ganacheのワークスペースにおける、「ネットワーク名」、「新しいRPC URL」、「チェーンID」、「通貨記号」を入力し、「保存」をクリックします。

  5. これで、ウォレットに、Ganacheのネットワークが追加されました。

  6. 下図のように、画面右上のアバターアイコンをクリックします。その後、「アカウントをインポート」をクリックします。

  7. Ganacheのテスト用アカウント10個から1つ選び、テスト用アカウントのPRIVATE KEY(秘密鍵)を入力します。その後、「インポート」をクリックします。

  8. Ganacheのテスト用アカウントの1つが、ウォレットにアカウント登録されます。

  9. 「Account2」と表示されている箇所の右端の「⁝」をクリックし、「アカウントの詳細」をクリックすると、ウォレットのアカウントIDなど詳細情報が表示されます。Ganacheのテスト用アカウントのうち、「ADDRESS」で表示されているものと同じ値が表示されていることが確認できます。
    なお、このアカウントは、仮想サーバー内に設置されたプライベートネットワークのため、「Etherscanで表示」をクリックしても表示されません。

Thirdwebによるスマートコントラクトの開発

コントラクトのサムネイルイメージやNFTに用いるデータの用意

Stable Diffusionなどの画像生成AI で作ってしまうと簡単です。

Walletへの接続

にアクセスします。画面右上の「Connect Wallet」をクリックします。

「MetaMask」をクリック。

「Account2」にチェックを入れ、「次へ」をクリック。

「接続」をクリック。

MetaMaskのアカウントが表示されます。これで、ローカルチェーンで動くウォレットに接続されました。

「Continue」をクリックして、利用規約に同意します。

コントラクトの作成

「Explore」をクリックします。

Thirdweb Explore にアクセスします。「NFT Drop」をクリックします。

「Deploy now >>」をクリックします。

Metadataの設定

作成するコントラクトの設定値を決めます。

Contract Metadataのうち、

Image : 「Upload file」と表示されているように、コントラクトのサムネイルイメージを指定。

Name : コントラクト名を指定します。例 Image of Studying Girl

Symbol:NFTのシンボル名を指定。例 IoL

Description : NFTの説明です。例 image of a learner

Royalties

Recipient Address:二次流通時のNFTの販売料金の受取先のWallet Address

Percentage : マージン率

Primary Sales

Recipient Address:NFTの販売料金の受取先のWallet Address

Recipien Addres

まだ下にも続きがあります。Networkは、デプロイ先のブロックチェーンを指します。「Deploy Now」をクリックすることで、

「Deploy Status」の画面が表示されます。メッセージが、4つのトランザクションに対して、確認が要求されることがわかります。

トランザクションを処理するための「ガス代」の見積もりが表示され、「トランザクション」への同意が求められます。ETHの送信、コントラクトの展開などで、「確認」を画面指示に従って押していきます。

「署名の要求」が表示されます。「署名」をクリックします。

コントラクトを作成することができました。作成したコントラクトに、NFTとして用いる画像をアップロードします。画面左下の「NFTs」をクリックします。

NFT画像のアップロード

「+ Single Upload」をクリックします。

NFTとして発行(ミント = Mint)するためのNFTの名前とデータをアップロードします。データは、画像以外にPDFや3DCGモデルも利用することができます。
最低限、「Name」を入力し、「Media」でNFTとして扱うファイルを選択し、「Lazy Mint NFT」をクリックします。

Walletへの同意を求められます。「確認」をクリックします。

1つ目のNFTが登録されました。

Clam Conditions(請求条件)の設定

画面左側の「Claim Conditions」をクリックします。先ほど使った「NFTs」の1つ下にあります。

初期状態では、何もないので、「Add Phase」をクリックします。NFTを購入可能な対象を4つの中から選びます。今回は、テスト環境なので、「Allowlist Only」にしましょう。つまり許可した人のみになります。

請求条件である「Allowlist Only」の設定を行います。

  • Name :請求条件、つまり販売条件の名称

  • When will this phase start? : 販売開始日時

  • How many NFTs will you drop in this phase?:在庫数量 ( 無制限ならば、Unlimited )

  • How much do you want to charge to claim each NFT?:NFTの販売金額(Ehtereum環境を使っているので単位は、ETH)

販売先のWalletアドレスと、購入可能な数の上限を指定する必要があります。次のようなフォーマットです。また、UTF-8のCSV形式でなければならないのでご注意ください。

購入を許可するWalletアドレスと、購入可能な上限数を書いたCSVを用意したら、「Add Allowlist」の「Edit Claimer Snapshot」をクリックします。「Upload Snapshot」が表示されます。

「Drag & Drop a CSV file here」をクリックし、用意しておいたCSVファイルを指定します。その後、「Next」をクリックすることで、購入を許可するWallet アドレス登録されます。

NFTの購入金額は、0.05ETHかかるものとし、上限は20 で、登録した。

NFT発行のため、Wallet アドレスがあるMetaMaskが起動し、確認を求めてくるので、「確認」をクリック。

これで、コントラクトに請求条件が1つ追加された。

埋め込みコードの取得

画面左側の「Embed」をクリックします。NFTを公開するための情報が表示されます。「Embed Code」には、WebサイトにNFTを表示するための<iframe>タグによる埋め込みコードが表示されます。

画面下には、埋め込みコードを使った場合のプレビューも表示されます。

また、「Buid apps」をクリックすることで、JavaScriptやPythonなど、プログラミング言語に合わせたアプリケーション開発のためのガイドも表示されます。