本文へスキップ
BecomeCoder

Solidityコース · 第2章 Solidityの基本 ― コントラクトを書いてみる · レッスン6

最小のコントラクト ― pragma と contract

ブラウザで完結

導入

Solidity のファイル(拡張子 .sol)は、いくつかの決まったおまじないから始まります。まずは「これが最小のコントラクトだ」という形を丸ごと眺めましょう。

説明

次が、値を1つ保存できるだけの最小のコントラクトです。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract HelloStorage {
    string public message = "Hello, Blockchain";
}
  • // SPDX-License-Identifier: MIT … ライセンス表記。コンパイラが警告を出さないよう先頭に書くのが慣習。
  • pragma solidity ^0.8.20;コンパイラのバージョン指定^0.8.20 は「0.8.20 以上 0.9.0 未満」の意味。言語仕様が版によって変わるため必須。
  • contract HelloStorage { ... }コントラクトの定義。ほかの言語の「クラス」に近く、この { } の中に状態(データ)と関数(処理)を書く。
  • string public message = ...文字列を保存する状態変数(次のレッスンで詳説)。

このコントラクトを Ethereum にデプロイすると、message の中身が台帳に保存され、public を付けたことで誰でもその値を読み取れるようになります。

pragma^(キャレット)は「そのマイナーバージョン内での更新は許すが、破壊的変更が入るバージョンは拒否する」という安全装置です。特に 0.8.0 以降は整数のオーバーフローが自動でチェックされるようになった重要な区切りなので、実務では ^0.8.x を使います。

やってみよう

contract HelloStorage の名前や、message の文字列を変えるとどうなるか考えてみましょう。コントラクト名はファイル内に複数書け、デプロイ時に「どのコントラクトを配置するか」を選ぶことになります。

実際に動かしてみよう

下のエディタのコントラクトを「コンパイル & デプロイ」すると、ブラウザ内で本物のSolidityコンパイラ(solc)がコンパイルし、EVM(@ethereumjs)にデプロイされます。デプロイ後は public な関数がボタンになって並ぶので、引数を入れて呼び出すと戻り値・イベント・require のエラー(revert理由)まで確認できます。本文のコントラクトを書き換えて動きを試しながら進めましょう(コンパイラ本体は初回だけ読み込みに数秒かかります)。

Solidity — ブラウザ内でコンパイル & 実行

ブラウザ内で本物のSolidityコンパイラ(solc)とEVM(@ethereumjs)を動かす環境を読み込みます(コンパイラ本体は初回のコンパイル時に読み込むため、最初の実行だけ数秒かかります)。
スクロールして表示された時点でも自動で読み込まれます。