सॉलिडिटी - प्रतिबंधित प्रवेश
एक अनुबंध पर प्रतिबंधित पहुंच एक आम बात है। डिफ़ॉल्ट रूप से, एक अनुबंध स्थिति केवल तभी तक पढ़ी जाती है जब तक कि इसे सार्वजनिक रूप से निर्दिष्ट नहीं किया जाता है।
हम अनुबंध की स्थिति को संशोधित कर सकते हैं या संशोधक का उपयोग करके अनुबंध के कार्यों को कॉल कर सकते हैं। हम नीचे बताए अनुसार कई संशोधक बनाएंगे और उपयोग करेंगे -
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;
}
}