EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

【NFT】ジェネラティブNFTを学ぶ - 4.コントラクト作成(テストネット版) -

前回は生成した画像データをPinataというサービスにアップロードした。

アップロードで取得したアドレスからメタデータを作成し同様にアップロードした。

 

tenomeuonome.hateblo.jp

 

今回はNFT発行やMintのルールを定義する「コントラクト」の作成を行う。

 

目次

 

参考サイト

crypto-code.jp

 

ソースコードのコピー

HashLipsではひな型のコントラクトプログラムが用意されている。

VSCodeでプロジェクトを開く

VSCodeの File > Openから、「hashlips_nft_contract-xxx」を開く。

 

ソースコードのコピー

VSCode上では直接作業せず、Remixというブラウザ上の開発環境で作業する。

 

contract/SimpleNft_flat.sol を開き、内容をコピーする。

 

Remixでコード編集

Remixとはブラウザ上でコーディング、テスト、デプロイまでできる万能の開発環境だそう。

>Remixの初期設定

Remixのページを開く。

remix.ethereum.org

キャラクターが可愛いですね^^

+ボタンからワークスペースを作成する。

 

>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というテストネットワーク上でテストデプロイを行う。

コンパイル

  • アイコンパネルからコンパイラを選択。
  • コンパイラのバージョンチェック
  • 「Enable optimazation」にチェック
  • 「Comple」ボタンをクリック

コンパイルアイコンにチェックがついていて、Contract欄が表示されていればOK

 

>デプロイ

>>ネットワーク切替

MetaMaskのネットワークから「Rinkebyテストネットワーク」選択する。

デフォルトでテストネットワークが選択できない場合、MetaMaskの設定を変更する。

これで選択可能・・と思いきや表示されない。

 

色々調べていると、rinkbeyは廃止されてしまったようだ。

 

goerli(ゴーリ?読み方不明)で代用可能だそう。

ネットワークを切替えて・・

>>テスト用のETH取得

以下のリンクからテスト用のETHを取得する。

faucets.chain.link

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サイトで確認する。

testnets.opensea.io

コレクションはできていて、ミントもされている。

でも画像がちゃんとアップされていない・・?

メタデータあたりが間違っているのかも。

差し当たりミントまで確認できたということで。

 

次回はPolygonでミントを試します。

 

続く