Hello, Web3 World!!

Remixでコードを記述しよう

目次 [hide]

Remixとは、ブラウザ上でコードの記述からテスト・デプロイまでをすべて行うことができる、お手軽かつ万能の開発環境です。本記事ではこのRemixを使用して、ジェネラティブNFTをMintするためのコードを書いていきます!

Remixの初期設定

まずはRemix にアクセスしましょう。起動画面がしばらく表示されたあとに、トップページが表示されます。

はじめに、左上のボタンからワークスペース(作業を行うためのフォルダやファイルのかたまり)の作成を行いましょう。

Remix - ワークスペースの作成

ワークスペース名は任意の名前で結構です。今回はkanjiとしました。

Remix - ワークスペース名の入力

Solidityファイルの作成

ワークスペースを作成するとデフォルトでサンプルのファイルがいくつか用意されているのですが、今回は使用しないため消してしまいましょう。

contarctsフォルダ以下の3つのファイルを選択して右クリック > 「Delete All」で削除してください。
Shift + クリックで複数選択が可能です)

Remix - デフォルトファイルの削除

続いて、contractsフォルダを右クリック > 「NewFile」で新たにファイルを作成しましょう。

こちらも任意の名前で結構ですが、コレクション名と同じにするとわかりやすいです。サンプルではDotKanjiとしました。

Remix - ファイルを作成

ここでファイル名を入力すると自動で拡張子.solが付与されますが、これは「Solidityファイル(コントラクトを作成するためのプログラミング言語)だよ」という意味になります。

コードの貼り付け

Remix上で作成したファイルに、前パートで事前にコピーしておいた「hashlips_nft_contract」フォルダのcontract/SimpleNft_flat.solの中身をまるごと貼り付けましょう。

Remix - コードの貼り付け

コードのカスタマイズ

コントラクトの修正

続いてコード内の一部をカスタマイズしていきます。貼り付けたコードの1235行目あたり、contract NFT is ERC721Enumerable, Ownable {から始まるコードを探してみましょう。

contract/DotKanji.sol   ︙
contract NFT is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 0.01 ether;
  uint256 public maxSupply = 1000;
  uint256 public maxMintAmount = 10;
  bool public paused = false;
  bool public revealed = false;
  string public notRevealedUri;
   ︙

まず初めに、contract NFT is …の「NFT」部分を.solファイル名と同じ名前に変更しておきましょう。今回の例ではcontract DotKanji is …となります。

続いて、変数(プログラムを動かす設定値)の中身を変えていきましょう。変更する必要があるのは以下の5箇所になります。

変数名 内容 差し替え例
cost NFTを1つミントするために必要な値段 0.001
maxSupply ジェネラティブNFTの総数 1000
maxMintAmount 一度にミントできる最大数 10
paused ミントできない状態か true
revealed Reveal(公開)されているかどうか true

今回の例では0.001ethで販売し、1000点の画像を用意、1度に10個までミント可能、Reveal設定は無しとしたいため、「差し替え例」のような内容を入力しました。

pausedは後から差し替えできるので、いまはtrue(ミントできない状態)としておきましょう。

ちなみにpausedrevealedは名前の前にboolとついていますが、これはYES/NOを管理する変数という意味になります。内容が「YES」のときはtrue、「NO」の場合はfalseと入力する必要があるので覚えておいてください。

今回の作業後のコードは以下のようになります。お手元のコードと比較してみてくださいね。

contract/DotKanji.sol   ︙
contract DotKanji is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 0.001 ether;
  uint256 public maxSupply = 1000;
  uint256 public maxMintAmount = 10;
  bool public paused = true;
  bool public revealed = true;
  string public notRevealedUri;
   ︙

【オプション】HashLipsへのサポートの削除

貼り付けたコードの一番下を見ると、HAshLipsに5%を支払うという処理が入っています。
HashLipsを応援したい!という方はそのままで結構ですが、売上が100%自分にほしい!という方は以下の箇所を消しておきましょう。

HashLips - サポートコードの削除

コード差分としては以下のとおりです。

【 Before 】

contract/DotKanji.sol     ︙
  function withdraw() public payable onlyOwner {
    // This will pay HashLips 5% of the initial sale.
    // You can remove this if you want, or keep it in to support HashLips and his channel.
    // =============================================================================
    (bool hs, ) = payable(0x943590A42C27D08e3744202c4Ae5eD55c2dE240D).call{value: address(this).balance * 5 / 100}("");
    require(hs);
    // =============================================================================
    
    // This will payout the owner 95% of the contract balance.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  } 
}

【 After 】

contract/DotKanji.sol     ︙
  function withdraw() public payable onlyOwner {
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  } 
}