Solidity - Chức năng sửa đổi

Hàm sửa đổi được sử dụng để sửa đổi hành vi của một hàm. Ví dụ để thêm điều kiện tiên quyết vào một hàm.

Đầu tiên, chúng tôi tạo một công cụ sửa đổi có hoặc không có tham số.

contract Owner {
   modifier onlyOwner {
      require(msg.sender == owner);
      _;
   }
   modifier costs(uint price) {
      if (msg.value >= price) {
         _;
      }
   }
}

Phần thân hàm được chèn vào nơi ký hiệu đặc biệt "_;" xuất hiện trong định nghĩa của một bổ ngữ. Vì vậy, nếu điều kiện của modifier được thỏa mãn trong khi gọi hàm này, thì hàm được thực thi và ngược lại, một ngoại lệ được ném ra.

Xem ví dụ bên dưới -

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