LoginSignup
1
1

More than 5 years have passed since last update.

solidity の modifier に引数を渡す

Posted at

はじめに

solidity の modifier に引数ってどうやって渡すかちょっと迷ったのでメモ

結論

modifier を使う際に渡せる引数は、関数への引数や、そのコントラクトの storage 変数など、modifier を使用する関数の中で参照可能な全ての値が modifier への引数として使える

Arbitrary expressions are allowed for modifier arguments and in this context, all symbols visible from the function are visible in the modifier. Symbols introduced in the modifier are not visible in the function (as they might change by overriding).

以下簡単な利用例

  • isItemOwner modifier は address を引数として取る
  • checkPrice に渡される id と storage 変数の items から address を計算して modifier への引数として利用できる
pragma solidity ^0.4.19;

contract ItemLdeger {

  address public owner;
  mapping (address => uint) public balances;
  mapping (uint => Item) public items;

  struct Item {
    uint id;
    address owner;
    uint price;
  }

  // 初期化
  function ItemLdeger() public {
    uint id = 1;
    items[id] = Item({ id:id, owner: msg.sender, price: 100 });
    owner = msg.sender;
  }

  // 引数のある modifier
  modifier isItemOwner(address _owner) {
    require(msg.sender == _owner);
    _;
  }

  // modifier を使う関数
  function checkPrice(uint id) 
    public 
    view 
    isItemOwner(items[id].owner) // modifier に渡す引数は、function への引数と storage 変数を参照して作れる
    returns (uint) {
      return items[id].price;
  }

}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1