Solidity-関数修飾子
関数修飾子は、関数の動作を変更するために使用されます。たとえば、関数に前提条件を追加します。
まず、パラメーターの有無にかかわらず修飾子を作成します。
contract Owner {
modifier onlyOwner {
require(msg.sender == owner);
_;
}
modifier costs(uint price) {
if (msg.value >= price) {
_;
}
}
}
関数本体は、特殊記号「_;」の場所に挿入されます。修飾子の定義に表示されます。したがって、この関数の呼び出し中に修飾子の条件が満たされると、関数が実行され、それ以外の場合は例外がスローされます。
以下の例を参照してください-
pragma solidity ^0.5.0;
contract Owner {
address owner;
constructor() public {
owner = msg.sender;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
modifier costs(uint price) {
if (msg.value >= price) {
_;
}
}
}
contract Register is Owner {
mapping (address => bool) registeredAddresses;
uint price;
constructor(uint initialPrice) public { price = initialPrice; }
function register() public payable costs(price) {
registeredAddresses[msg.sender] = true;
}
function changePrice(uint _price) public onlyOwner {
price = _price;
}
}