Solidity - Akses Terbatas

Akses Terbatas ke Kontrak adalah praktik umum. Secara default, status kontrak hanya-baca kecuali ditentukan sebagai publik.

Kami dapat membatasi siapa yang dapat mengubah status kontrak atau memanggil fungsi kontrak menggunakan pengubah. Kami akan membuat dan menggunakan beberapa pengubah seperti yang dijelaskan di bawah ini -

  • onlyBy - sekali digunakan pada suatu fungsi maka hanya pemanggil yang disebutkan yang dapat memanggil fungsi ini.

  • onlyAfter - sekali digunakan pada suatu fungsi maka fungsi itu dapat dipanggil setelah jangka waktu tertentu.

  • costs - sekali digunakan pada suatu fungsi maka pemanggil dapat memanggil fungsi ini hanya jika nilai tertentu diberikan.

Contoh

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