前回では、初めてのSmart Contractsを作ってみたのですが、 いかがでしたでしょうか?
その際に、 view と言う関数を作るときに追加する 修飾子 が出てきました。
これは 「この関数を呼ぶのは読み込みONLYで GAS がいらないですよ、タダですよ」と言う意味であることを説明しました。
今回は、別の修飾子 modifier と payable を説明します。
modifier
前頭の処理が複数の関数で繰り返し同じコードを利用したいときに modifier 修飾子を利用します。
function setMessage(string newMessage) public isOwner {
message = newMessage;
}
modifier isOwner() {
require(owner == msg.sender);
_;
}
上記のサンプルでは、 isOwner と言うmodifierを作りました。
これは、実行しようとするアカウントがこのSmart Contractのオーナーかを確認するものです。
使い方は、setMessage 関数の宣言に isOwner を追記することで完了です。
気をつけることは、modifierを作成するときに、コードの最後に _; を書くことです。
これは、「ここで対象の関数の処理をします」を意味します。
これで、関数setMessageは、オーナーしか使えない関数であることになります。
payable
payable修飾子を関数につけると、その関数にのみ ether (お金)を送ることができるようになります。
function setMessage(string newMessage) public payable {
require(msg.value == 3 ether);
message = newMessage;
}
上記のサンプルでは、 setMessage に ether を送れるように payable を追加しました。
そして、その額が 3 ether ちょうどでなければいけないようになっています。
もし、最低 3 ether とかにしたい場合は、 == を >= に入れ替えてください。
ether を送るには、下のようにRemix開発環境の Run > Value にその額を入力します。
