Solidityでスマートコントラクトを作成しよう
👩💻 コントラクトを作成する
メッセージを管理するスマートコントラクトを作成します。 ここで作成するスマートコントラクトは、後でユースケースに合わせて自由に変更できます。
packages/contract/contractsディレクトリの下にMessenger.solという名前のファイルを作成します。
Hardhatを使用する場合、ファイル構造は非常に重要ですので、注意する必要があります。ファイル構造が下記のようになっていれば大丈夫です 😊
contract/
└── contracts/
└── Messenger.sol
次に、コードエディタでプロジェクトのコードを開きます。
ここでは、VS Codeの使用をお勧めします。ダウンロードは こちら から。
VS Codeをターミナルから起動する方法は こちら をご覧ください。
- ターミナル上で、
codeコマンドを実行
今後VS Codeを起動するのが一段と楽になるので、ぜひ導入してみてください。
コーディングのサポートツールとして、VS Code上でSolidityの拡張機能をダウンロードすることをお勧めします。
ダウンロードは こちら から。
それでは、これからMessenger.solの中身の作成していきます。
Messenger.solをVS Codeで開き、下記を入力します。
// Messenger.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "hardhat/console.sol";
contract Messenger {
uint256 public state;
constructor() {
console.log("Here is my first smart contract!");
state = 1;
}
}
コードを詳しくみていきましょう。
// Messenger.sol
// SPDX-License-Identifier: MIT
これは「SPDXライセンス識別子」と呼ばれ、ソフトウェア・ライセンスの種類が一目でわかるようにするための識別子です。
詳細については、こちら を参照してみてください。
// Messenger.sol
pragma solidity ^0.8.17;
これは、コントラクトで使用するSolidityコンパイラのバージョンです。
上記のコードでは、このコントラクトを実行するときはSolidityコンパイラのバージョンが0.8.17以上1.0.0未満を使用しそれ以外のものは使用しません、という宣言をしています。
Solidityは Semantic Versioning を採用しているため、バージョン表記の見方は
MAJOR.MINOR.PATCH
となり、MAJOR(一番左の番号)は互換性がない修正・変更がSolidityに加わった場合に変わります。
つまり、0.8.17から1.0.0未満までの範囲は修正が加わっても互換性がある(コンパイルが可能)変更なので、^を先頭につけることで、
その範囲のバージョンの違いは許容するということです。
0.8.17がhardhat.config.tsでも記載されていることを確認してください。
もし、hardhat.config.tsの中に記載されているSolidityのバージョンが0.8.17でなかった場合は、Messenger.solの中身をhardhat.config.tsに記載されているバージョンに変更しましょう。
// Messenger.sol
import "hardhat/console.sol";
コントラクトを実行する際、コンソールログをターミナルに出力するためにHardhatのconsole.solのファイルをインポートしています。
これは、今後スマートコントラクトのデバッグが発生した場合に、とても役立つツールです。
// Messenger.sol
contract Messenger {
uint256 public state;
constructor() {
console.log("Here is my first smart contract!");
state = 1;
}
}
contractに続けて定義するコントラクトの名前を記述します。
コントラクトはほかの言語でいうところの「class」のように考えることができます。
classの概念については、こちら を参照してください。
コントラクト内では状態変数のstateを定義しています。
stateはuint256型でpublicというアクセス修飾子をつけています。
uint256