Solidität - Eingeschränkter Zugang
Der eingeschränkte Zugang zu einem Vertrag ist eine gängige Praxis. Standardmäßig ist ein Vertragsstatus schreibgeschützt, sofern er nicht als öffentlich angegeben ist.
Wir können einschränken, wer den Vertragsstatus ändern oder die Funktionen eines Vertrags mithilfe von Modifikatoren aufrufen kann. Wir werden mehrere Modifikatoren erstellen und verwenden, wie unten erläutert -
onlyBy - Einmal für eine Funktion verwendet, kann nur der erwähnte Aufrufer diese Funktion aufrufen.
onlyAfter - Einmal für eine Funktion verwendet, kann diese Funktion nach einer bestimmten Zeitspanne aufgerufen werden.
costs - Einmal für eine Funktion verwendet, kann der Aufrufer diese Funktion nur aufrufen, wenn ein bestimmter Wert angegeben ist.
Beispiel
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;
}
}