Skip to main content
इन पर काम करता है: Virtual Environments और सार्वजनिक नेटवर्क (mainnets और testnets)। समान plugin दोनों को संभालता है; hardhat.config.ts में इसे सही नेटवर्क पर इंगित करें।
Tenderly-Hardhat plugin, Hardhat से deploy किए गए contracts को Virtual Environments या सार्वजनिक नेटवर्क्स के विरुद्ध सत्यापित करता है। हर deploy पर सत्यापित करने के लिए automatic verification का उपयोग करें, या अपने scripts से स्पष्ट रूप से tenderly.verify() कॉल करने के लिए manual verification का उपयोग करें।
सार्वजनिक नेटवर्क्स पर, plugin डिफ़ॉल्ट रूप से सार्वजनिक रूप से सत्यापित करता है। निजी रूप से सत्यापित करने के लिए (केवल आपके प्रोजेक्ट/organization के अंदर दिखाई देने के लिए), hardhat.config.ts में privateVerification: true सेट करें। Configure authentication and verification visibility देखें।

संस्करण और अनुकूलता

Hardhat के साथ आप जिस Ethers संस्करण का उपयोग कर रहे हैं, उसके आधार पर, आपको Tenderly-Hardhat plugin का संबंधित संस्करण download करना होगा।
Ethers 6 पर switch करने और Tenderly-Hardhat plugin के latest संस्करण का उपयोग करने की अत्यधिक अनुशंसा की जाती है security और performance कारणों के साथ-साथ अतिरिक्त सुविधाओं के लिए।
वर्तमान Virtual Environment RPC URLs (dashboard में दिखने वाले region और org/project/slug रूपों) के विरुद्ध सत्यापन के लिए plugin संस्करण 2.6.0 या नया आवश्यक है।

सत्यापन विधियाँ

Tenderly-Hardhat plugin contract सत्यापन के लिए तीन तरीकों का समर्थन करता है।
  • स्वचालित सत्यापन (अनुशंसित): बस plugin को import करें और सेट अप करें। यह विधि deployment के दौरान सत्यापन के लिए आदर्श है क्योंकि यह प्रक्रिया पूरी तरह से स्वचालित है। स्वचालित सत्यापन plain hardhat deployment सेटअप के साथ-साथ hardhat-ignition का उपयोग करके भी काम करता है। TENDERLY_AUTOMATIC_VERIFICATION environment variable का उपयोग करके स्वचालित सत्यापन को नियंत्रित करें।
  • Manual verification (low-code): आपके code के भीतर एक स्पष्ट सत्यापन चरण प्रदान करता है, जो post-deployment verification, conditional verification (जैसे केवल failing test के बाद), या factory contracts के instances को सत्यापित करने जैसे परिदृश्यों के लिए उपयोगी है।
  • Verbose manual verification (high-code): सत्यापन प्रक्रिया पर विस्तृत नियंत्रण प्रदान करता है, library addresses, source codes, और compiler configurations को निर्दिष्ट करता है। यह विभिन्न compiler संस्करणों या settings के साथ कई contracts को सत्यापित करने के लिए आवश्यक है।

उदाहरण

स्वचालित सत्यापन प्रक्रिया का पता लगाने का सबसे अच्छा तरीका एक उदाहरण से गुजरना है, जो आप हमारे GitHub repo में कर सकते हैं। सभी उदाहरण sample Greeter contract का उपयोग करते हैं। उदाहरण projects को सीधे browse करें:

Tenderly-Hardhat plugin सेटअप

Tenderly-Hardhat plugin को install और initialize करने के लिए नीचे दिए गए चरणों का पालन करें।
निम्नलिखित अनुभागों में, आप विभिन्न सत्यापन विधियों का उपयोग करके contracts को सत्यापित करना सीखेंगे।

स्वचालित सत्यापन

स्वचालित सत्यापन तब निर्बाध रूप से होता है जब आप Ethers.js का उपयोग करके एक contract को deploy करते हैं। स्वचालित सत्यापन दृष्टिकोण compiler settings, deploy किए गए contract के address, और सोर्स कोड को इकट्ठा करने के बाद स्वचालित रूप से सत्यापन करेगा। स्वचालित सत्यापन डिफ़ॉल्ट रूप से सक्षम है। इसे अक्षम करने के लिए, plugin द्वारा पहचाने जाने वाले TENDERLY_AUTOMATIC_VERIFICATION environment variable को false पर सेट करें। Tenderly-Hardhat plugin contracts को तब सत्यापित करेगा जब वह पता लगाता है कि contract deploy किया गया है, और Ethers को deployment transaction की receipt मिल गई है। इसे सक्षम करने के लिए, आपको Ethers की helper methods ethers.deployContract() और ethers.getContractFactory() का उपयोग करके contracts deploy करते समय deployment के लिए await करने की आवश्यकता होती है, contract instance पर क्रमशः waitForDeployment() या deployed() को कॉल करके।
यदि आप उस contract के साथ interact करने का इरादा रखते हैं तो आपको waitForDeployment() (Ethers 6) और deployed() (Ethers 5) द्वारा लौटाए गए contract object के reference को capture करने की आवश्यकता है।

Proxy contracts का सत्यापन

hardhat-upgrades के साथ deploy और upgrade किए गए proxy contracts का स्वचालित सत्यापन @tenderly/hardhat-tenderly package के निम्नलिखित संस्करणों के साथ संभव है:
  • >= 1.10.0
  • >= 2.1.0
संस्करण 1.x.x < 1.10.0 और 2.x.x < 2.1.0 के लिए proxy verification guide का पालन करें।

Manual सत्यापन

tenderly.verify() के माध्यम से low-code सत्यापन आपको एक deployment script या Hardhat test के भीतर सत्यापन के सटीक बिंदु के बारे में स्पष्ट होने की अनुमति देता है। यह विधि विशेष रूप से इनके लिए फायदेमंद है:
  • Custom scripts के माध्यम से पहले deploy किए गए contracts को सत्यापित करना।
  • Factory contracts द्वारा बनाए गए instances को सत्यापित करना।
  • Test runs को बढ़ाना, failing suite (after) के अंत में contracts को चुनिंदा रूप से सत्यापित करना, जो execution को तेज़ करता है।
सत्यापन को manually नियंत्रित करने के लिए, scripts चलाते समय TENDERLY_AUTOMATIC_VERIFICATION को false में बदलकर स्वचालित सत्यापन को अक्षम करें।

verify function

verify() function एक object लेता है जहाँ आपको यह प्रदान करना होगा:
  • contract का name
  • address जहाँ contract deploy किया गया है
  • contract द्वारा उपयोग की जाने वाली libraries (वैकल्पिक)
Tenderly-Hardhat plugin आपके द्वारा निर्दिष्ट contracts के सत्यापन को करने के लिए मौजूदा compiler configuration और contract source code को उठा लेगा।
Contract deploy होने के बाद verify() को invoke करना आवश्यक है।यदि आप deployment के साथ सत्यापन कर रहे हैं, तो आपको Ethers 6 के मामले में waitForDeployment() के लिए, और Ethers 5 के मामले में deployed() के लिए await करना होगा।
यदि आप कई contracts सत्यापित कर रहे हैं, तो function में variadic arguments हैं:

Verbose manual सत्यापन

Method verifyMultiCompilerAPI() आपको सत्यापन प्रक्रिया पर पूर्ण नियंत्रण देती है, जिससे आप सत्यापन प्रक्रिया के हर विवरण को निर्दिष्ट कर सकते हैं। यह शायद ही कभी अनुशंसित है, लेकिन यदि आप विभिन्न compiler संस्करणों या configurations के साथ compile किए गए contracts को सत्यापित कर रहे हैं तो उपयोगी हो सकता है। पूरी तरह से नियंत्रित सत्यापन विधि आपको स्पष्ट रूप से यह करने की अनुमति देती है:
  • Contracts के सोर्स कोड को निर्दिष्ट करें (sources)
  • Compilation arguments सेट करें (compiler)
  • Linked libraries सेट करें (libraries)
निम्नलिखित उदाहरण दर्शाता है कि पूरी तरह से नियंत्रित सत्यापन कैसे किया जाए।

सत्यापन arguments

verifyMultiCompilerAPI() method एक argument लेती है — contract objects की एक array। प्रत्येक contract object में निम्नलिखित शामिल हैं: