教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。
その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。
ここでは四則演算するスマートコントラクトを作ります。繰返しfor
と条件分岐if
も使ってみましょう。
javascript12345678910111213141516171819202122232425262728293031323334353637383940414243444546 Copied!// コンパイラのバージョンを指定します
pragma solidity ^0.4.25;
// ①スマートコントラクトを宣言する
contract calculator {
// ②変数の宣言
int public wa; // 和を保存する
int public sa; // 差を保存する
int public seki; // 積を保存する
int private shou; // 商を保存する
// ③2数の足し算を行う関数
function tasu(int x, int y) public {
wa = x + y;
}
// ④2数の引き算を行う関数とif文
function hiku(int x, int y) public {
// 大きい数から小さい数を引きます
if (x > y) {
sa = x - y;
} else {
sa = y - x;
}
}
// ⑤2数の掛け算を行う関数とfor文
function kakeru(int x, int y) public {
seki = 0;
for (int i = 0; i < y; i++) {
seki = seki + x;
}
// (注)for文を示すためにこのような書き方をしています。2数の積は以下で求めることができます。
// seki = x * y;
}
// ⑥2数の割り算を行う関数とshou(商)のゲッター
function waru(int x, int y) public returns(int) {
shou = x / y;
}
function get_shou() view public returns(int) {
return shou;
}
}
javascript123 Copied!contract calculator {
// ここにスマートコントラクトの内容を書きます
}
calculator
という名前のスマートコントラクトを宣言します。
javascript1234 Copied!int public wa; // 和を保存する
int public sa; // 差を保存する
int public seki; // 積を保存する
int private shou; // 商を保存する
int
型の変数を宣言します。public
変数は誰でも中身を取得可能な状態でブロックチェーンに記録されます。private
変数はコントラクトの外部から直接参照できません。値の取得には後ほどご説明するゲッターが必要になります。 なお,スマートコントラクトでは変数のことをステートと呼びます。ステートのアクセス修飾子は以下の4つがあります。
Copied!・public
コントラクトの内部,外部から参照可能
・private
コントラクトの内部からのみ参照可能
・external
コントラクトの外部からのみ参照可能
・internal
コントラクトとその子コントラクトからのみ参照可能
javascript123 Copied!function tasu(int x, int y) public {
wa = x + y;
}
x
とy
を足してwa
(和)に代入する関数を定義しています。public
という修飾子を設定した関数は,スマートコントラクトの外部から呼出し可能な状態になります。
javascript12345678 Copied!function hiku(int x, int y) public {
// 大きい数から小さい数を引きます
if (x > y) {
sa = x - y;
} else {
sa = y - x;
}
}
x
とy
の大小を比較して,大きい数から小さい数を引く関数を定義しています。Solidityでは他の言語と同様にif
文が記述できます。
javascript123456 Copied!function kakeru(int x, int y) public {
seki = 0;
for (int i = 0; i < y; i++) {
seki = seki + x;
}
}
x
とy
の積を求める関数です。今回はfor
文を示すためにこのような書き方をしていますが,2数の積は以下で求めることができます。
javascript1 Copied!seki = x * y;
javascript1234567 Copied!function waru(int x, int y) public returns(int) {
shou = x / y;
}
function get_shou() view public returns(int) {
return shou;
}
x
をy
で割った商は変数shou
に代入されますが,shou
はprivate
変数なので外部からアクセスできません。そこでget_shou
というゲッターを介してその値を取得します。view
を付与するとコール専用関数(変数の変更を伴わない関数)となります。また,returns
で戻り値の型を宣言しています。
1.1と同じやり方で電卓スマートコントラクトをデプロイし,動作を確認してみて下さい。