सॉलिडिटी - हैंडलिंग में त्रुटि

सॉलिडिटी त्रुटि से निपटने के लिए विभिन्न कार्य प्रदान करती है। आमतौर पर जब कोई त्रुटि होती है, तो स्थिति वापस अपनी मूल स्थिति में आ जाती है। अन्य चेक अनधिकृत कोड एक्सेस को रोकने के लिए हैं। त्रुटि से निपटने में उपयोग किए जाने वाले कुछ महत्वपूर्ण तरीके निम्नलिखित हैं -

  • assert(bool condition)- यदि स्थिति की पूर्ति नहीं होती है, तो यह विधि कॉल अमान्य opcode का कारण बनता है और राज्य में किए गए किसी भी परिवर्तन को वापस मिला है। इस विधि का उपयोग आंतरिक त्रुटियों के लिए किया जाना है।

  • require(bool condition)- यदि स्थिति की पूर्ति नहीं होती है, तो यह विधि मूल स्थिति को प्रभावित करती है। - इस विधि का उपयोग इनपुट या बाहरी घटकों में त्रुटियों के लिए किया जाना है।

  • require(bool condition, string memory message)- यदि स्थिति की पूर्ति नहीं होती है, तो यह विधि मूल स्थिति को प्रभावित करती है। - इस विधि का उपयोग इनपुट या बाहरी घटकों में त्रुटियों के लिए किया जाना है। यह एक कस्टम संदेश प्रदान करने का विकल्प प्रदान करता है।

  • revert() - यह विधि निष्पादन को रोकती है और राज्य में किए गए किसी भी परिवर्तन को वापस लाती है।

  • revert(string memory reason)- यह विधि निष्पादन को रोकती है और राज्य में किए गए किसी भी परिवर्तन को वापस लाती है। यह एक कस्टम संदेश प्रदान करने का विकल्प प्रदान करता है।

उदाहरण

सॉलिडिटी में एरर हैंडलिंग कैसे काम करता है, इसे समझने के लिए निम्न कोड को आज़माएं।

pragma solidity ^0.5.0;

contract Vendor {
   address public seller;
   modifier onlySeller() {
      require(
         msg.sender == seller,
         "Only seller can call this."
      );
      _;
   }
   function sell(uint amount) public payable onlySeller { 
      if (amount > msg.value / 2 ether)
         revert("Not enough Ether provided.");
      // Perform the sell operation.
   }
}

जब वापस बुलाया जाता है, तो यह उसके बाद हेक्साडेसिमल डेटा लौटाएगा।

उत्पादन

0x08c379a0                     // Function selector for Error(string)
0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset
0x000000000000000000000000000000000000000000000000000000000000001a // String length
0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data