Solidity - Sınırlı Erişim

Bir Sözleşmeye Sınırlı Erişim yaygın bir uygulamadır. Varsayılan olarak, bir sözleşme durumu, genel olarak belirtilmediği sürece salt okunurdur.

Sözleşmenin durumunu kimin değiştirebileceğini veya değiştiricileri kullanarak bir sözleşmenin işlevlerini kimin çağırabileceğini kısıtlayabiliriz. Aşağıda açıklandığı gibi birden çok değiştirici oluşturup kullanacağız -

  • onlyBy - Bir işlevde kullanıldığında, yalnızca belirtilen arayan bu işlevi arayabilir.

  • onlyAfter - bir işlevde kullanıldığında, bu işlev belirli bir süre sonra çağrılabilir.

  • costs - Bir işlevde kullanıldığında, arayan kişi bu işlevi yalnızca belirli bir değer sağlanmışsa çağırabilir.

Misal

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