Solidity - 訪問限制



限制合約的訪問許可權是一種常見做法。預設情況下,合約狀態是隻讀的,除非它被指定為 public。

我們可以使用修飾符來限制誰可以修改合約的狀態或呼叫合約的函式。我們將建立並使用多個修飾符,如下所述:

  • onlyBy - 一旦用在某個函式上,則只有指定的呼叫者才能呼叫此函式。

  • onlyAfter - 一旦用在某個函式上,則該函式只能在特定時間段後呼叫。

  • costs - 一旦用在某個函式上,則只有在提供特定值的情況下,呼叫者才能呼叫此函式。

示例

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

© . All rights reserved.