Solidność - ograniczony dostęp
Ograniczony dostęp do umowy jest powszechną praktyką. Domyślnie stan kontraktu jest tylko do odczytu, chyba że jest określony jako publiczny.
Możemy ograniczyć, kto może modyfikować stan kontraktu lub wywoływać funkcje kontraktu za pomocą modyfikatorów. Stworzymy i użyjemy wielu modyfikatorów, jak wyjaśniono poniżej -
onlyBy - raz użyty na funkcji, wtedy tylko wspomniany wywołujący może wywołać tę funkcję.
onlyAfter - raz użyta na funkcji, wówczas funkcja ta może zostać wywołana po pewnym okresie czasu.
costs - raz użyty w funkcji, wywołujący może wywołać tę funkcję tylko wtedy, gdy zostanie podana określona wartość.
Przykład
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;
}
}