मुख्य सामग्री पर जाएं
Change page

स्मार्ट कॉन्ट्रैक्ट के साथ इंटरैक्ट करना

आपको हमेशा अपना खुद का स्मार्ट कॉन्ट्रैक्ट लिखने और तैनात करने की आवश्यकता नहीं होती है। एक डेवलपर के रूप में ज़्यादातर समय, आप उन स्मार्ट कॉन्ट्रैक्ट के साथ इंटरैक्ट करना चाहेंगे जिन्हें दूसरों ने पहले ही इथेरियम नेटवर्क पर तैनात कर दिया है।

यह पृष्ठ स्मार्ट कॉन्ट्रैक्ट के साथ इंटरैक्ट करने के दो मूलभूत तरीकों—डेटा पढ़ना (reading) और डेटा लिखना (writing)—और दोनों को करने के लिए आवश्यक टूल को कवर करता है।

पूर्वापेक्षाएँ

आपको यह समझना चाहिए:

स्मार्ट कॉन्ट्रैक्ट के साथ इंटरैक्ट करने के दो तरीके

स्मार्ट कॉन्ट्रैक्ट के साथ इंटरैक्ट करना दो श्रेणियों में आता है:

कॉन्ट्रैक्ट से पढ़ना

पढ़ना एक मुफ़्त ऑपरेशन है जो कोई लेन-देन नहीं बनाता है और ब्लॉकचेन पर किसी भी स्थिति को नहीं बदलता है।

जब आप किसी कॉन्ट्रैक्ट से पढ़ते हैं, तो आप केवल उस डेटा को क्वेरी कर रहे होते हैं जो पहले से मौजूद है। उदाहरण के लिए:

  • ERC-20 टोकन बैलेंस की जांच करना
  • एक विकेंद्रीकृत एक्सचेंज से वर्तमान मूल्य पढ़ना
  • NFT के मालिक का पता लगाना

क्योंकि पढ़ने से स्थिति में कोई बदलाव नहीं होता है, इसलिए उनमें गैस खर्च नहीं होती है और इसे ETH की आवश्यकता के बिना किसी के भी द्वारा किया जा सकता है।

कॉन्ट्रैक्ट में लिखना

लिखना एक स्थिति-बदलने वाला ऑपरेशन है जिसके लिए लेन-देन की आवश्यकता होती है और इसमें गैस खर्च होती है।

जब आप किसी कॉन्ट्रैक्ट में लिखते हैं, तो आप एक फ़ंक्शन को ट्रिगर कर रहे होते हैं जो ब्लॉकचेन की स्थिति को संशोधित करता है। उदाहरण के लिए:

  • टोकन ट्रांसफर करना
  • विकेंद्रीकृत एक्सचेंज पर टोकन स्वैप करना
  • NFT की मिंटिंग करना

लिखने के लिए हमेशा निम्न की आवश्यकता होती है:

  1. गैस के लिए पर्याप्त ETH के साथ एक बाहरी स्वामित्व वाला खाता (EOA)
  2. खाते की निजी कुंजी द्वारा हस्ताक्षरित एक लेन-देन
  3. लेन-देन को माइन किया जाना और एक ब्लॉक में शामिल किया जाना

खाता अमूर्तन के साथ, एक स्मार्ट कॉन्ट्रैक्ट खाता भी लिखने की शुरुआत कर सकता है, और एक पेमास्टर उपयोगकर्ता की ओर से गैस को कवर कर सकता है—इसलिए ETH रखने वाले EOA की सख्ती से आवश्यकता नहीं है।

कॉन्ट्रैक्ट ABI को समझना

किसी स्मार्ट कॉन्ट्रैक्ट के साथ इंटरैक्ट करने के लिए, आपके एप्लिकेशन को यह जानना होगा कि कॉन्ट्रैक्ट क्या कर सकता है। यहीं पर एप्लिकेशन बाइनरी इंटरफ़ेस (ABI) काम आता है।

ABI एक JSON दस्तावेज़ है जो वर्णन करता है:

  • कॉन्ट्रैक्ट द्वारा प्रदर्शित प्रत्येक फ़ंक्शन (नाम, इनपुट, आउटपुट)
  • प्रत्येक घटना जिसे कॉन्ट्रैक्ट उत्सर्जित (emit) कर सकता है
  • कॉन्ट्रैक्ट से बात करते समय डेटा को कैसे एनकोड और डिकोड करें

ABI को कॉन्ट्रैक्ट के निर्देश मैनुअल के रूप में सोचें—इसके बिना, आपके एप्लिकेशन को यह नहीं पता होता है कि कौन से फ़ंक्शन मौजूद हैं या वे किन मापदंडों की अपेक्षा करते हैं।

कॉन्ट्रैक्ट का ABI कहाँ खोजें

  • Etherscan पर सत्यापित कॉन्ट्रैक्ट - Etherscan (एक नए टैब में खुलता है) स्वचालित रूप से सत्यापित स्रोत कोड के लिए ABI प्रदर्शित करता है
  • डेवलपर से - कई प्रोजेक्ट अपने दस्तावेज़ों या npm पैकेजों में अपने ABI प्रकाशित करते हैं
  • स्रोत से जनरेट करें - यदि आपके पास Solidity स्रोत कोड है, तो आप ABI बनाने के लिए इसका संकलन कर सकते हैं

कॉन्ट्रैक्ट के साथ इंटरैक्ट करने के लिए टूल और लाइब्रेरी

डेवलपर आमतौर पर वेब ऐप, बैकएंड या स्क्रिप्ट से कॉन्ट्रैक्ट के साथ इंटरैक्ट करने के लिए JavaScript/TypeScript लाइब्रेरी का उपयोग करते हैं।

क्लाइंट लाइब्रेरी (JavaScript/TypeScript)

बैकएंड लाइब्रेरी

उदाहरण: Viem के साथ टोकन बैलेंस पढ़ना

उदाहरण: Ethers.js के साथ लेन-देन भेजना

घटनाएँ और लॉग

स्मार्ट कॉन्ट्रैक्ट यह संकेत देने के लिए घटनाएँ उत्सर्जित कर सकते हैं कि कुछ हुआ है। आपका एप्लिकेशन वास्तविक समय में प्रतिक्रिया देने के लिए इन घटनाओं को सुन सकता है।

लेन-देन का अनुकरण (Simulating) करना

लेन-देन भेजने से पहले, आप यह जांचने के लिए इसका अनुकरण (simulate) कर सकते हैं कि क्या यह सफल होगा—और गैस खर्च किए बिना इसका रिटर्न मान देखने के लिए। यह त्रुटियों को जल्दी पकड़ने और परिणामों का पूर्वावलोकन करने के लिए उपयोगी है।

अधिकांश क्लाइंट लाइब्रेरी eth_call के माध्यम से इसका समर्थन करती हैं:

// Viem के साथ
const result = await client.simulateContract({
  address: contractAddress,
  abi,
  functionName: 'swap',
  args: [amountIn],
  account: userAddress,
})

वॉलेट और हस्ताक्षर करना

एक विकेंद्रीकृत एप्लिकेशन (dapp) में, उपयोगकर्ता का वॉलेट (जैसे मेटामास्क, Rainbow, या WalletConnect) हस्ताक्षर करने का काम संभालता है। आप सीधे निजी कुंजियों का प्रबंधन नहीं करते हैं।

वॉलेट लाइब्रेरी और कनेक्शन टूल इसे अमूर्त (abstract) कर देते हैं ताकि आप अपने एप्लिकेशन लॉजिक को बनाने पर ध्यान केंद्रित कर सकें।

आगे की पढ़ाई