📜  Solidity-受限访问

📅  最后修改于: 2020-11-04 04:28:23             🧑  作者: Mango


 

限制访问合同是一种惯例。默认情况下,除非指定为公共状态,否则合同状态为只读。

我们可以限制谁可以使用修饰符来修改合同的状态或调用合同的功能。我们将创建并使用多个修饰符,如下所示-

  • onlyBy-一旦在函数上使用,则只有提到的调用方才能调用此函数。
  • onlyAfter-一旦在函数上使用过,则可以在特定时间段后调用该函数。
  • 成本-一旦在函数上使用,则调用者只有在提供特定值后才能调用此函数。

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