Solidity में onlyOwner modifier शायद सबसे आम patterns में से एक है।
निम्नलिखित उदाहरण में, function setMessage() को केवल उस address द्वारा कॉल किया जा सकता है जिसे owner के रूप में नामित किया गया है।
function setMessage(string calldata _message) external onlyOwner {
message = _message;
}
हालाँकि, आमतौर पर इस्तेमाल होने वाले OpenZeppelin Ownable implementation में एक कमी है कि यह owner को किसी गैर-मौजूद या गलत टाइप किए गए address पर ownership को ट्रांसफर करने की अनुमति देता है।
स्मार्ट कॉन्ट्रैक्ट्स के लिए Ownable की तुलना में Ownable2Step अधिक सुरक्षित है क्योंकि owner गलती से भी किसी गलत टाइप किए गए address पर स्मार्ट कॉन्ट्रैक्ट की ownership को ट्रांसफर नहीं कर सकता है। नए owner को सीधे ट्रांसफर करने के बजाय, यह ट्रांसफर तभी पूरा होता है जब नया owner इस ownership को स्वीकार करता है।
Ownable2Step को जनवरी 2023 में OpenZeppelin version 4.8 अपडेट के दौरान रिलीज़ किया गया था। यहाँ code है।
यहाँ एक न्यूनतम उदाहरण है:
import "@openzeppelin/contracts/access/Ownable2Step.sol";
contract ExampleOwnable2Step is Ownable2Step {
string public message;
constructor() Ownable(msg.sender) {}
function setMessage(string calldata _message) external onlyOwner {
message = _message;
}
}
Ownable2Step, Ownable से inherit करता है और नए owner को “pending” बनाने के लिए transferOwnership() को override करता है। ट्रांसफर को अंतिम रूप देने के लिए receiver को इसके बाद acceptOwnership() को कॉल करना होता है। यह सुनिश्चित करता है कि केवल वही address स्मार्ट कॉन्ट्रैक्ट को नियंत्रित कर सकता है, जिसके पास अपनी private keys का एक्सेस हो, या स्मार्ट कॉन्ट्रैक्ट address पर नियंत्रण हो।
ownership को त्यागने, यानी ownership को zero address पर ट्रांसफर करने के लिए, अभी भी कोई two-step verification नहीं है। यदि ownership त्यागने की कोई आवश्यकता नहीं है, तो कॉल किए जाने पर revert करने के लिए “renounceOwnership()” को override करना अधिक सुरक्षित है।
और जानें
यह ट्यूटोरियल हमारे उन्नत solidity bootcamp का हिस्सा है।
मूल रूप से 8 अप्रैल, 2023 को प्रकाशित