【Blockchain】修飾子modifierとpayable


前回では、初めてのSmart Contractsを作ってみたのですが、 いかがでしたでしょうか?
その際に、 view と言う関数を作るときに追加する 修飾子 が出てきました。
これは 「この関数を呼ぶのは読み込みONLYで GAS がいらないですよ、タダですよ」と言う意味であることを説明しました。
今回は、別の修飾子 modifierpayable を説明します。

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;
}

上記のサンプルでは、 setMessageether を送れるように payable を追加しました。
そして、その額が 3 ether ちょうどでなければいけないようになっています。
もし、最低 3 ether とかにしたい場合は、 ==>= に入れ替えてください。

ether を送るには、下のようにRemix開発環境の Run > Value にその額を入力します。