Solidity - Quyền truy cập hạn chế

Quyền truy cập hạn chế vào hợp đồng là một thực tế phổ biến. Theo Mặc định, trạng thái hợp đồng là chỉ đọc trừ khi nó được chỉ định là công khai.

Chúng tôi có thể hạn chế ai có thể sửa đổi trạng thái của hợp đồng hoặc gọi các chức năng của hợp đồng bằng cách sử dụng các công cụ sửa đổi. Chúng tôi sẽ tạo và sử dụng nhiều công cụ sửa đổi như được giải thích bên dưới -

  • onlyBy - một khi được sử dụng trên một hàm thì chỉ người gọi được đề cập mới có thể gọi hàm này.

  • onlyAfter - Một khi được sử dụng trên một hàm thì hàm đó có thể được gọi sau một khoảng thời gian nhất định.

  • costs - khi được sử dụng trên một hàm thì người gọi chỉ có thể gọi hàm này nếu giá trị nhất định được cung cấp.

Thí dụ

pragma solidity ^0.5.0;

contract Test {
   address public owner = msg.sender;
   uint public creationTime = now;

   modifier onlyBy(address _account) {
      require(
         msg.sender == _account,
         "Sender not authorized."
      );
      _;
   }
   function changeOwner(address _newOwner) public onlyBy(owner) {
      owner = _newOwner;
   }
   modifier onlyAfter(uint _time) {
      require(
         now >= _time,
         "Function called too early."
      );
      _;
   }
   function disown() public onlyBy(owner) onlyAfter(creationTime + 6 weeks) {
      delete owner;
   }
   modifier costs(uint _amount) {
      require(
         msg.value >= _amount,
         "Not enough Ether provided."
      );
      _;
      if (msg.value > _amount)
         msg.sender.transfer(msg.value - _amount);
   }
   function forceOwnerChange(address _newOwner) public payable costs(200 ether) {
      owner = _newOwner;
      if (uint(owner) & 0 == 1) return;        
   }
}