前回は生成した画像データをPinataというサービスにアップロードした。
アップロードで取得したアドレスからメタデータを作成し同様にアップロードした。
今回はNFT発行やMintのルールを定義する「コントラクト」の作成を行う。
目次
参考サイト
ソースコードのコピー
HashLipsではひな型のコントラクトプログラムが用意されている。
>VSCodeでプロジェクトを開く
VSCodeの File > Openから、「hashlips_nft_contract-xxx」を開く。
>ソースコードのコピー
VSCode上では直接作業せず、Remixというブラウザ上の開発環境で作業する。
contract/SimpleNft_flat.sol を開き、内容をコピーする。
Remixでコード編集
Remixとはブラウザ上でコーディング、テスト、デプロイまでできる万能の開発環境だそう。
>Remixの初期設定
Remixのページを開く。
キャラクターが可愛いですね^^
+ボタンからワークスペースを作成する。
>Solidityファイルの作成
サンプルファイルは今回使わないので削除する。
contractsフォルダを右クリックしてNewFile。
基本的にはコレクション名と同じにする。
>コード貼り付け
VSCodeでコピーしたソースをペーストする。
>コードのカスタマイズ
>>コントラクトの修正
まず、contract NFT is・・・のNFTをファイル名と同じにする。
次に、設定値の内容を変更する。
- cost・・・NFTを1つミントするために必要な値段
- maxSupply・・・ジェネラティブNFTの総数
- maxMintAmount・・・一度にミントできる最大数
- paused・・・ミントできない状態か(true/false)
- revealed・・・Reveal(公開)されているかどうか(true/false)
0.01eth、1000体発行、10体までミント可能、ミント不可の状態 とした。
>>任意項目(HashLipsへの支援)
デフォルトではNFTの売上の5%がHashLipsに支払われる設定になっている。
削除するか残すかは任意。
Rinkebyでテストデプロイ
Rinkebyというテストネットワーク上でテストデプロイを行う。
>コンパイル
コンパイルアイコンにチェックがついていて、Contract欄が表示されていればOK
>デプロイ
>>ネットワーク切替
MetaMaskのネットワークから「Rinkebyテストネットワーク」選択する。
デフォルトでテストネットワークが選択できない場合、MetaMaskの設定を変更する。
これで選択可能・・と思いきや表示されない。
色々調べていると、rinkbeyは廃止されてしまったようだ。
goerli(ゴーリ?読み方不明)で代用可能だそう。
ネットワークを切替えて・・
>>テスト用のETH取得
以下のリンクからテスト用のETHを取得する。
Twitterの連携が必要となる。0.1 test ethを取得する。
リクエスト送信でまたエラーが出た。
「リクエストの実行中に問題が発生しました。しばらくしてからもう一度・・」との旨のメッセージ。
ここで止まっててもしょうがないので、とりあえず進めておく。
後日もう一度試したところ、成功。向こうのご機嫌が悪かった模様?
>デプロイ設定
Remixに戻ってきて、「DEPLOY & RUN」を選択。
参考サイトと微妙に違うが、
ENVIRONMENTに「Injected Provider」を選択。Georli networkが表示されること。
CONTRACTに変更した名称を選択。
DEPLOYを展開する。
_NAME: コレクションの名称。既存の名称と重複すると勝手にリネームされるらしいので注意。
_SYMBOL:略称
_INITBASEURI: メタデータのURI。ipfs://CID/ (/で終わること)
_INITNOTREVEALEDURI: リビール前に表示するためのメタデータ。使用しない場合は適当な文字列
>デプロイ
「transact」ボタンでデプロイを実行する。だが、テストethが取得できていないので一旦停止。
待ってればGoerliのethが取得できるんだろうか。。
(10/19)
テスト用ethが取得できたのだが、取得できたのは0.1eth。
そしてガス代が0.2ethと高騰していてテストができない状態。
もう一度リクエストしても既にあげてますよ、と断られた。
翌日もう一度もらわないとダメなのか??
テストなんだから大盤振る舞いしてくれても良いと思うのだが・・・
(10/20)
もう一度テスト用ethを取得して「transact」を実行。
今度は費用が足りたようで、処理が完了。
完了すると、Remix上に「Deployed Contracts」欄が追加される。
オレンジのボタンの処理はガス代がかかるそう。
青いボタンの欄で、設定内容でDeployされたことを確認する。
>>mint可能状態にする
paused をFalseに設定して、「pause」ボタンをクリックする。
ここでもガス代が発生する。
ターミナルにチェックボタンでログが表示されれば成功
>NFTのMint
ミント準備が整ったので、オレンジのmint欄にミントしたい数を入力してmintボタンをクリックする。
maxMintAmountを超える数をミントしようとするとエラーとなる。
>>テストネットでmint確認
今回はテストネットにミントしたので、Opensea Testnetサイトで確認する。
コレクションはできていて、ミントもされている。
でも画像がちゃんとアップされていない・・?
メタデータあたりが間違っているのかも。
差し当たりミントまで確認できたということで。
次回はPolygonでミントを試します。
続く