EGO-LOG

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

【NFT】ジェネラティブNFTを学ぶ - AL(Allow List) によるミント制御(ガス代高いver) -

前回、無料サーバにミントサイトをアップして公開できることを確認した。

 

tenomeuonome.hateblo.jp

 

今回はジェネラティブの優先購入権であるAL(AllowList)を付与する手順を理解する。

githubからhashlipsのsolidity_smartcontractsをダウンロードする。

github.com

この中のNFT-PRESALEを参照する。

ソースを参照すると以下の記述があり、ここに対象のウォレットを保持する。

onlyWhitelistedがtrueの場合にALの限定が有効になる。

nftPerAddressLimitが1ALあたり何枚ミントできるか。

このソースの問題点

whitelistedAddressesにアドレスの配列をそのままセットしている。

取り扱うデータ量が多くなるのでガス代も高くなる。

 

↑のような問題はあるが、まずはこのコードでデプロイする。

コードの編集

変数追加
 bool public onlyWhitelisted = true;
  address[] public whitelistedAddresses;
  mapping(address => uint256) public addressMintedBalance;
関数追加

mint関数は上書き

function mint(uint256 _mintAmount) public payable {

ALにウォレットがあるか確認する関数

isWhitelisted

ALウォレット入れ替え?

setOnlyWhitelisted

ALウォレットを追加関数?

whitelistUsers

 

デプロイ時の引数を省略

毎回デプロイ時の引数を指定するのが面倒なので、コードに埋め込んでしまう。

onstructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
  }

↑の部分を・・

constructor(
  ) ERC721(’EgoEyesV3’, 'EE3') {
    setBaseURI('ipfs://Qmbvk11DTHT91UpiuBEM9rtS56A96pqKHhkGLiRF9EV9A2');
    setNotRevealedURI('ipfs://Qmbvk11DTHT91UpiuBEM9rtS56A96pqKHhkGLiRF9EV9A2');
  }

のように直書きする。

これでビルドすると、デプロイ時の操作がシンプルになる。

 

ALのリスト作成

プログラムの

function whitelistUsers

関数にリストを引き渡す。

 

リストはスプレットシートなどで作成する。

["0x000", "0x001"・・・"0x00n"]のような配列を取得する。

AL貼り付け

デプロイ欄の「whitelistUsers」に作成した配列をペーストする。

「transact」ボタンでトランザクション実行
transactionログが残っていることを確認。

指定したウォレットアドレスがALに登録されているか確認

↑にウォレットアドレスを入力して「call」ボタンクリック。

登録されていれば、trueなければfalseとなる。

ここでtrueになったアドレスのみミントできる。

 

ただし、ALのウォレットアドレスを全て保管するのでガス代が高くつく。

コスト削減した方法を次回以降試していく。

 

 

今回は以上!