本文へスキップ
BecomeCoder

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

状態変数と型 ― 台帳に刻まれるデータ

ブラウザで完結

導入

コントラクトが { } の直下に持つ変数状態変数(state variable) と呼びます。これはブロックチェーンの台帳に永続的に保存される、コントラクトの「記憶」です。

説明

Solidity は静的型付けで、変数には必ず型を書きます。よく使う型を見てみましょう。

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

contract Types {
    uint256 public count = 0;          // 符号なし整数(0以上)
    int256  public temperature = -5;   // 符号あり整数(マイナスOK)
    bool    public isActive = true;    // 真偽値
    string  public name = "Alice";     // 文字列
    address public owner;              // Ethereumのアドレス(後の章で詳説)
    bytes32 public dataHash;           // 32バイトの固定長データ
}
  • uint256 … 符号なし整数。uintuint256 の別名。残高やカウントに最頻出。
  • int256 … 符号あり整数(マイナスも扱える)。intint256 の別名。
  • booltrue / false
  • string文字列(UTF-8)。文字列操作はガスが高いので多用は避ける。
  • address … Ethereum の口座アドレス(0x で始まる20バイト)。第3章で扱います。

状態変数は「台帳への保存=書き込みにガスがかかる」ことを常に意識します。初期値を書かなければ、数値は 0boolfalsestring は空文字といったゼロ値で始まります。

やってみよう

uint256 は 0 から約 1.15×10⁷⁷ までの巨大な範囲を扱えます。「残高やトークン数にマイナスはありえない」場面では uint、「気温や損益」など負の値がありうる場面では int を選ぶ、という使い分けを意識しましょう。

実際に動かしてみよう

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

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

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