【保存版】ImmutableXでNFTを作成してみませんか?(ImmutableX超入門)
0ー1 はじめに
こんにちは、CryptoGamesの高橋です。
クリスペの会社です。
皆さん、ゼロ知識証明を用いたImmutableXにはご興味がありますか?
私はとても興味があります。
もしより深く知ってみたい場合は、ぜひこちらもご参照ください。
ImmutableXでのNFTの作成方法については、実は公式で詳細に書かれておりました。
「START BUILDING」から
「docs here」に行って
こちらの「Onboarding」からが具体的な説明になってきます。
英語ではありますが、とてもわかりやすく書かれておりますので、ぜひ読んでみてください。
0ー2 ImmutableXキーを設定しよう
イメージをつかむためにも、先にサイトを見るのも良いかもしれません。
ちなみに、流れとしましては、次のようになります
① ウォレット接続をする
② ①で接続したウォレットでサインインする
③ ImmutableXキーを設定する
0ー2ー1 ウォレット接続する
「connect wallet」でウォレット接続を行います。
0ー2ー2 接続ウォレットでサインインする
下のように「sign in」でサインインします。
ちなみに、こちらに書かれているように、サインのリクエストは私たちがアクションを初期化したときにだけ行われるようです。
つまり、何も変更などを行っていないときにサインのリクエストが行われた場合は、何かおかしいことはないか考える必要があると思います。
0ー2ー3 ImmutableXキーを設定する
この設定で、ImmutableXキーとウォレットがリンクするようです。
利用規約に同意が出来る場合は、チェックを入れて、「Set up」を行いましょう。
これで設定が完了しました。
また、「重要」として、サインリクエストはアクションの初期化を行ったときにのみ行われると書かれています。
セキュリティ上、安易に「サイン」を行わないよう、ご注意ください。
では、次の章から具体的な作成に移っていきます。
1 VScodeをインストールしましょう。
もちろん、VScodeでなくても大丈夫です。
エディタ(コードを便利に操作するもの)を利用したことがなければ、VScodeをインストールしてみてください。
2 テスト用のコントラクトを作ろう
2ー1 普通のコントラクトとは何が違うの?
まずはImmutableX用のコントラクトを作る必要があります。
実は「mintFor()」という特別な関数が必要になります。
でも大丈夫です。公式でサンプルが既に用意されています。
今回は、「Ropsten」というテストネットで作っていきます。
2ー2 公式のサンプルをクローンする
こちらのコントラクトをgit cloneしてください。
(2ー2ー6までは、普段コードを触っていない方向けの詳細です。エンジニアの方などは飛ばしてください。)
2ー2ー1 作業用のフォルダを作る
任意の場所に作業用のフォルダを作ってください。
2ー2ー2 VScodeで作業用のフォルダを指定する
VScodeを開き、下のように行って、作業用のフォルダを指定してください。
2ー2ー3 ターミナルを開く
下のようにして、ターミナル(コマンドプロンプト)を開いてください。
2ー2ー4 githubでレジストリをコピーする
上のサイトに行き、下のようにコピーを行います。
2ー2ー5 git clone する
下のように、「git clone 」の後に上でコピーしたものを貼り付け、「Enter」を押します。
2ー2ー6 確認しましょう
下のように、フォルダができれば成功です。
2ー3 EtherscanのAPIキーを取得する。
次のステップでEtherscanのAPIキーが必要になりますので、ここで取得しましょう。
2ー3ー1 Etherscanに登録する
まずはEtherscanを登録しましょう。
今回は、こちらのフリープランで進めていきます。
2ー3ー2 APIキーを取得する
ここの「+ Add」を選択して
プロジェクトの名前をつけたら、
こんな感じで取得できました。
こちらは外に漏れたら、勝手に使われてしまいますので、厳重に保管してください。
2ー4 環境変数を設定する
実際に行く前に、下を必ずお読みください。
注意
「.env」の扱いには十分注意してください。
特に、あまりプログラミングに慣れていない方などは、例えばテスト用のアカウントの秘密鍵で実施するなど、十分に注意してください。
(私は以下、テスト用のアカウントで実施しています。)
2ー4−1 .envファイルを作る
「imx-contracts」 の中にある「.env.example」をコピーして「.env」という名前のファイルを作成します。
2ー4ー2 環境変数を設定する
自分が作りたいコントラクト名など、下の5つを環境変数として、入れていきます。
①コントラクトの所有者アドレス
⇨ CONTRACT_OWNER_ADDRESS
②コントラクトの名前
⇨ CONTRACT_NAME
③コントラクトのシンボル名
⇨ CONTRACT_SYMBOL
④EtherscanのAPIキー(上で取得)
⇨ ETHERSCAN_API_KEY
⑤秘密鍵(厳重に扱ってください!)
⇨ DEPLOYER_ROPSTEN_PRIVATE_KEY (MAINNETも)
2ー5 テスト用のEthe(Ropsten)を取得する
上のサイトなどから、テスト用のEtherが取得できます。
取得してみてください。
2ー6 コントラクトをデプロイしよう
2ー6ー1 yarn add を行う
次のコマンドで、依存関係(必要となるもの一式)をインストールしてください。
yarn add @imtbl/imx-contracts
2ー6ー2 コントラクトをデプロイする
下のように、「imx-contracts」フォルダに行ってから
cd imx-contracts
下のように、デプロイを行います。
yarn hardhat run deploy/asset.ts --network ropsten
すると、次のようにコントラクトがデプロイされました。
(この時点でエラーが出た場合は、「.envファイル」の書き方を見直してみましょう。)
そして、コントラクトをデプロイするから5分待ってと表示されます。
2ー6ー3 エラーが出ますが、心配しないで
待っていると、こんな風にエラーが出てきます。
でも読んでみると、「すでに検証されているから」と出ました。
よく考えると、このImmutableXのコントラクトは既にたくさんの方が同じように作成しているはずです。
そのため、もう検証済みだよというエラーが出たようです。
2ー6ー4 Etherscanで見てみよう
念の為、Etherscanで見てみましょう。
「Ropsten」になりますのでご注意ください。
このようにデプロイされたコントラクトを検索すると。
このように検証済みのコントラクトができたことがわかりました。
3 コントラクトを登録する
では、コントラクトができましたので、これをImmutableXに登録していきましょう。
3ー1 事前準備を行う。
3ー1ー1 git cloneを行う
第2章とは別の場所に次のレポジトリをgit cloneしてみましょう。(私は一つ上の階層にしました。)
やり方の詳細につきましては、2ー2をご参考ください。
git clone git@github.com:immutable/imx-examples.git
3ー1ー2 「.env」ファイルを作り、環境変数を入れる
注意
「.env」の扱いには十分注意してください。
特に、あまりプログラミングに慣れていない方などは、例えばテスト用のアカウントの秘密鍵で実施するなど、十分に注意してください。
(私は以下、テスト用のアカウントで実施しています。)
やり方は2ー4と同様です。
「.env.example」をコピーして、「.env」ファイルを作り、今回はPrivate Key(秘密鍵)とコントラクトアドレスを入れます。
3ー1ー3 npm installを行う。
「imx-examples」フォルダに移動して、次のコマンドを実行します。
npm install
3ー2 ユーザー登録を行おう
では、次に、こちらのコマンドでユーザー登録を行います。
npm run onboarding:user-registration
私は既に作成済みのため、「User already exists」と出ますが、このように、アカウントができました。
3ー3 プロジェクトを作成する
次はプロジェクトを作成します。
まずは、「2-create-project.ts」の下の箇所にプロジェクト名などを入れていきます。
できましたら、次のコマンドを実行します。
npm run onboarding:create-project
プロジェクトができ、プロジェクトIDも振られました。
3ー4 コレクションを追加する
では次に、できたプロジェクトにコレクションを追加していきます。
一つのプロジェクトにコレクションは複数作成することができます。
3ー4ー1 プロジェクトIDを設定する
まずは「.env」ファイルに先ほどできたプロジェクトIDを設定しましょう。
3ー4ー2 コレクションの情報を設定する
こちらにコレクションの情報を入れていきます。
「metadata_api_url」はとても大事な情報ですが、ImmutableXに特有のものではないので詳細は割愛します。
ざっくりと、このようにダブルクォーテーション(")で区切られて値が格納されています。(JSON形式)
URLの末尾の数値が変わると中の情報も変わります。
今回はテストとして、OpenSeaのメタデータを用います。
https://opensea-creatures-api.herokuapp.com/api/creature
他にも入れて、上のようになりました。
設定が完了しましたので、次のコマンドを実行します。
npm run onboarding:create-collection
これでコレクションが追加されました。
3ー5 メタデータのスキーマ(構成)を追加する
今回こちらは省略しますが、ユーザーが検索する際に非常に役に立ちます。
下の場所に追加していくことになります。
なお、この部分につきましては、記事を別に作ろうと思います。
今回は、特に内容は変えずに、次のコマンドを実行します。
npm run onboarding:add-metadata-schema
これでメタデータのスキーマも追加できました。
4 ミントを行おう
4ー1 ミント情報を設定する
まずはミントの情報を入力しましょう。
「.env」ファイルに次のように入力していきましょう。
4ー2 ミントを実行しよう
設定ができましたら、次のコマンドを実行しましょう。
npm run bulk-mint -- -n 20 -w <YOUR_WALLET_ADDRESS>
これで指定したウォレットに指定した番号分、ミントができました。
5 ImmutableXのテストネットを見てみよう
ImmutableXのテストネットを見てみましょう。
「Inventory」を見てみると、このようにNFTが出来ていました!
6 マーケットプレイスに展示しよう
では、値段をつけて、マーケットプレイスに展示しましょう。
売りたいものを選んで、「List for sale」
どの通貨でいくらで売るかを記載して、「Confirm」
同様の手順でいくつか実施を行い、マーケットプレイスを確認すると、このように、展示されていました。
いかがでしたでしょうか。
今回の記事はあくまでも入門編になります。
公式のドキュメントは英語ですが、とても大事なことがたくさん書かれていますので、よかったらそちらも見てみてください。
では、今回は以上です。
最後までお読みいただきありがとうございました。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊