lesson-3_スマートコントラクトをつくってみよう
📝 スマートコントラクトを作成する
contracts
ディレクトリの下にWeb3Mint.sol
という名前のファイルを作成しましょう。
Hardhatを使用する場合、ファイル構造は非常に重要ですので、注意する必要があります。ファイル構造が下記のようになっていれば大丈夫です 😊
contract
└── contracts
└── Web3Mint.sol
次に、コードエディタでプロジェクトのコードを開きます。
ここでは、VS Codeの使用をお勧 めします。ダウンロードは こちら から。
- VS Codeをターミナルから起動する方法は こちら をご覧ください。今後VS Codeを起動するのが一段と楽になるので、ぜひ導入してみてください。
- VS Code用の Solidity 拡張機能 をダウンロードすることをお勧めします。この拡張機能により、構文が見やすくなります。
それでは、実際にコントラクトを書いていきましょう。
Web3Mint.sol
のファイル内に以下のコードを記載します。
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.17;
import "hardhat/console.sol";
contract Web3Mint {
constructor() {
console.log("This is my NFT contract.");
}
}
⚠️: 注意
上記のコードに対して、VS Code がエラーを表示する場合があります。 例えば、
import hardhat
に下線が引かれ、don't exist
と表示される場合があります。これは、グローバル Solidity コンパイラがローカルに設定されていないために発生します。
修正する方法がわからなくても心配しないでください。 無視して問題ありません。 さて、行ごとにコードをみていきましょう。
// Web3Mint.sol
// SPDX-License-Identifier: UNLICENSED
これは「SPDXライセンス識別子」と呼ばれます。
詳細については、ここを参照してみてください。
// Web3Mint.sol
pragma solidity ^0.8.17;
これは、コントラクトで使用するSolidityコンパイラのバージョンです。
上記の場合「このコントラクトを実行するときは、Solidityコンパイラのバージョン0.8.17のみを使用し、それ以下のものは使用しません」という意味です。
コンパイラのバージョンがhardhat.config.js
で同じであることを確認してください。
もし、hardhat.config.js
の中に記載されているSolidityのバージョンが0.8.17
でなかった場合は、Web3Mint.sol
の中身をhardhat.config.js
に記載されているバージョンに変更しましょう。
// Web3Mint.sol
import "hardhat/console.sol";
Hardhatのおかげで、コントラクトでコンソールログを実行できます。
実際には、ブロックチェーン上にデプロイしたスマートコントラクトをデバッグすることは困難です。
なぜなら、一度デプロイしてしまったコントラクトを改変できないからです。
これには、ブロックチェーンが改ざんできない特性でもあります。
よって、Hardhatはローカル環境でコントラクトのデプロイを行えるため、ブロックチェーン上にアップロードする前に簡単にデバッグができる便利なツールといえます。
// Web3Mint.sol
contract Web3Mint {
constructor() {
console.log("This is my NFT contract.");
}
}
contract
は、ほかの言語でいうところの「class」のようなものなのです。
このcontract
を初期化すると、constructor
が実行されてconsole.log
の中身がターミナル上に表示されます。
classの概念については、ここを参照してみてください。
🔩 constructor とは
constructor
はオプションの関数で、contract
の状態変数を初期化するために使用されます。これから詳しく説明していくので、constructor
に関しては、まず以下の特徴を理解してください。
-
contract
は1つのconstructor
しか持つことができません。 -
constructor
は、スマートコントラクトの作成時に一度だけ実行され、contract
の状態を初期化するために使用されます。 -
constructor
は、コントラクトがデプロイされたときに初めて実行されます。 -
constructor
が実行された後、コードがブロックチェーンにデプロイされます。