スマートコントラクトを作ろう
👩💻 コントラクトを作成する
NFTを作成するスマートコントラクトを作成します。
- ここで作成するスマートコントラクトは、後でユースケースに合わせて自由に変更できます。
contractsディレクトリの下にMyEpicGame.solという名前のファイルを作成します。
Hardhatを使用する場合、ファイル構造は非常に重要ですので、注意する必要があります。ファイル構造が下記のようになっていれば大丈夫です 😊
contract
|_ contracts
|_ MyEpicGame.sol
次に、コードエディタでプロジェクトのコードを開きます。
ここでは、VS Codeの使用をお勧めします。ダウンロードはこちらから。
VS Codeをターミナルから起動する方法はこちらをご覧ください。今後VS Codeを起動するのが一段と楽になるので、ぜひ導入してみてください。
それでは、これからMyEpicGame.solの中身の作成していきます。MyEpicGame.solをVS Codeで開き、下記を入力します。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "hardhat/console.sol";
contract MyEpicGame {
constructor() {
console.log("THIS IS MY GAME CONTRACT.");
}
}
コーディングのサポートツールとして、VS Code上でSolidityの拡張機能をダウンロードすることをお勧めします。ダウンロードは こちら から。
一行ずつコードを見ていきましょう。
// SPDX-License-Identifier: MIT
これは「SPDXライセンス識別子」と呼ばれ、ソフトウェア・ライセンスの種類が一目でわかるようにするための識別子です。
詳細については、ここを参照してみてください。
pragma solidity ^0.8.17;
これは、コントラクトで使用するSolidityコンパイラのバージョンです。上記の場合「このコントラクトを実行するときは、Solidityコンパイラのバージョン0.8.17のみを使用し、それ以下のものは使用しません」という意味です。コンパイラのバージョンがhardhat.config.jsで同じであることを確認してください。
もし、hardhat.config.jsの中に記載されているSolidityのバージョンが0.8.17でなかった場合は、MyEpicGame.solの中身をhardhat.config.jsに記載されているバージョンに変更しましょう。
import "hardhat/console.sol";
コントラクトを実行する際、コンソールログをターミナ ルに出力するためにHardhatのconsole.solのファイルをインポートしています。これは、今後スマートコントラクトのデバッグが発生した場合に、とても役立つツールです。
contract MyEpicGame {
constructor() {
console.log("THIS IS MY GAME CONTRACT.");
}
}
contractは、ほかの言語でいうところの「class」のようなものなのです。
このcontractを初期化すると、constructorが実行されてconsole.logの中身がターミナル上に表示されます。
classの概念については、ここを参照してみてください。
🔩 constructorとは
constructorはオプションの関数で、contractの状態変数を初期化するために使用されます。これから詳しく説明していくので、constructorに関しては、まず以下の特徴を理解してください。
-
contractは1つのconstructorしか持つことができません。 -
constructorは、スマートコントラクトの作成時に一度だけ実行され、contractの状態を初期化するために使用されます。 -
constructorが実行された後、コードがブロックチェーンにデプロイされます。