견고성-제한된 접근

계약에 대한 제한된 액세스는 일반적인 관행입니다. 기본적으로 계약 상태는 공개로 지정되지 않는 한 읽기 전용입니다.

계약의 상태를 수정할 수있는 사람을 제한하거나 수정자를 사용하여 계약의 기능을 호출 할 수 있습니다. 아래에 설명 된대로 여러 수정자를 만들고 사용합니다.

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