教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。
その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。
Solidityはイーサリアム上で動作するスマートコントラクトを実装する為の開発言語です。
また、JavaScriptと似た性質を持った「コントラクト指向言語」でもあります。
Copied!
pragma solidity ^0.5.0;
contract Contract名 {
//スマートコントラクトで行う処理をここに記述していきます。
}
まず最初に、Solidityのコンパイラバージョンを指定する必要があります。本教材では「0.5.0」のバージョンを使用しています。
次に、contract句を記述し、Contract名を宣言します。ブロックチェーン上に書き込まれた際、このcontract内に書かれた処理が、イーサリアムネットワーク上で動作することになります。
データ型 | 説明 |
---|---|
int | 符号あり整数 |
uint | 符号なし整数 |
string | 文字列型 |
bool | 真偽値型 |
Array | 配列(固定・可変) |
Struct | 構造体 |
address | アドレス |
mapping | マッピング |
真偽値型 : bool
trueとfalseの2種類を格納できます。
Copied!bool flag = false;
数値型 : int
符号あり整数を格納できます。8~256bitの間で8の倍数ずつ範囲を指定可能。
Copied!int num = -10;
数値型 : uint
符号なし整数を格納できます。8~256bitの間で8の倍数ずつ範囲を指定可能。
Copied!uint num = 10;
文字列型 : string
文字列を格納できます。
Copied!string name = "りんご";
アドレス型 : address
ethを保管する為のウォレットアドレスやスマートコントラクト自体に紐づくアドレスを格納することが可能です。
Copied!address x = 0x123・・・・
配列 : uint[]、string[] ... etc
固定長配列と可変長配列を定義可能です。また「.length」で配列の大きさを取ることも可能です。
Copied!uint[10] todo; // todo.length = 10
構造体 : struct
複数の型の変数をまとめて新しい型(構造体)として作ることが可能です。
Copied!struct Person {
uint weight;
uint height;
string name;
}
Person person;
person.weight = 50;
person.height = 160;
person.name = "Tom";
連想配列 : mapping
様々なデータ型を「キー」と「バリュー」で紐付けることが可能です。簡単なサンプルを用意しました。
以下のサンプルでは、mappingに人物のデータ(体重/身長/名前)とアドレスを結びつけて格納しています。
Copied!pragma solidity ^0.5.0;
contract FruitsBox {
struct Person {
uint weight;
uint height;
string name;
}
mapping(address => Person) public personalData;
function setPerson(uint _weight, uint _height, string memory _name, address _address) public {
personalData[_address] = Person(_weight, _height, _name);
}
}
上記のサンプルを使って、mappingにデータを格納してみた場合、以下のようなデータテーブルが出来上がります。
余裕がある方は試してみると、より理解が深まると思います。