Skip to main content
इन पर काम करता है: सार्वजनिक नेटवर्क (mainnets और testnets)। Virtual Environment पर proxy contracts सत्यापित करने के लिए, Verify proxy contracts with Foundry देखें।
यह गाइड आपको @tenderly/hardhat-tenderly का उपयोग करके proxy contract सत्यापन के बारे में बताएगा।

आवश्यकताएँ

स्वचालित proxy सत्यापन @tenderly/hardhat-tenderly पर बिना किसी अतिरिक्त सेटअप के काम करता है:
  • >= 1.10.0 (Ethers 5 line)
  • >= 2.1.0 (Ethers 6 line)
यह केवल तभी काम करता है जब आप @openzeppelin/hardhat-upgrades के साथ proxies को deploy करते हैं। Hardhat Ignition अभी proxy सत्यापन के लिए समर्थित नहीं है यदि आप plugin के निचले संस्करण पर हैं और upgrade नहीं कर सकते, तो नीचे दिए गए manual workaround का उपयोग करें।

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

यह plugin तीन proxy patterns को सत्यापित करता है: TransparentUpgradeableProxy, UUPSUpgradeableProxy, और BeaconProxy

निचले संस्करणों के लिए Workaround

@tenderly/hardhat-tenderly के संस्करण < 1.10.0 और < 2.1.0 का उपयोग करते समय, यह workaround स्वचालित सत्यापन को सक्षम करेगा। आपको निम्नलिखित को सत्यापित करने की आवश्यकता है:
  • Proxy contract (जैसे OpenZeppelin’s proxies)
  • Proxy के पीछे Implementation
  • Implementation की किसी भी dependencies
  • Upgrades के साथ deploy किए गए नए implementation instances
सत्यापन प्रक्रिया proxy contract type और implementation के आधार पर भिन्न होती है।

अवलोकन

इस गाइड में, हम OpenZeppelin के UUPSUpgradeable, TransparentUpgradeableProxy, और BeaconProxy विकल्पों के सत्यापन को प्रदर्शित करने के लिए एक उदाहरण Hardhat project और @tenderly/hardhat-tenderly plugin का उपयोग करेंगे।
Proxy contracts को manually सत्यापित करने की आवश्यकता है। जिन plugin संस्करणों के लिए यह workaround है (Ethers 6 लाइन में 2.4.0 से पुराने और Ethers 5 लाइन में 1.10.0 से पुराने), उनमें hardhat.config.ts में स्वचालित सत्यापन बंद करें:
hardhat.config.ts
Deploy किए गए implementation का address प्राप्त करने के लिए, @openzeppelin/upgrades-core package और getImplementationAddress function का उपयोग करें। Proxy implementation को सत्यापित करना आमतौर पर सीधा है; इसे किसी भी अन्य contract की तरह सत्यापित करें।
example.ts
Proxy instance को सत्यापित करने के लिए, आपको ये दो प्रारंभिक चरण पूरे करने होंगे:
  1. उपयोग किए जा रहे proxy के type के आधार पर proxy के सटीक smart contract को load करें, ताकि इसे compile किया जा सके। आपको एक dummy .sol फ़ाइल बनाकर compiler के माध्यम से proxy contracts को import करना होगा।
  2. उन settings को निर्दिष्ट करने के लिए hardhat.config.ts को Modify करें जिनके साथ OpenZeppelin contracts compile किए गए थे।
एक बार ये चरण पूरे हो जाने के बाद, आप proxy को किसी भी अन्य contract की तरह सत्यापित करने के लिए आगे बढ़ सकते हैं।
example.ts

Proxy type के अनुसार सत्यापित करें

ये code samples दिखाते हैं कि OpenZeppelin के तीन proxy patterns के लिए implementation और proxy को कैसे सत्यापित किया जाए। ये उदाहरण एक proxied Vault contract का उपयोग करते हैं जो एक ERC-20 token (TToken) को reference करता है।

UUPS proxy

UUPS proxy और underlying जानकारी को सत्यापित करने के लिए, hardhat-tenderly plugin को दो बार कॉल करें:
  1. Implementation को सत्यापित करने के लिए, आपको निम्नलिखित प्रदान करने की आवश्यकता है:
  • अपने proxied contract का name (हमारे मामले में Vault)
  • वह address जहाँ contract deploy किया गया था, @openzeppelin/upgrades-core से getImplementationAddress method का उपयोग करके।
  1. Proxy को सत्यापित करने के लिए, निम्नलिखित प्रदान करें:
  • proxy contract name के रूप में ERC1967Proxy
  • Proxy का address proxy.address
example.ts

पूर्ण Code नमूना

यहाँ एक पूर्ण Hardhat test है जो निम्न कार्य करता है:
  • TToken को Deploy करता है (vault के लिए आवश्यक)
  • Vault को एक proxy के रूप में Deploy करता है, TToken contract के साथ initialize करता है
  • await proxy.getAddress() पर deploy किए गए proxy (ERC1967Proxy) instance को सत्यापित करता है
  • getImplementationAddress(ethers.provider, await proxy.getAddress()) पर deploy किए गए implementation instance Vault को सत्यापित करता है
  • Proxy को VaultV2 पर Upgrade करता है
example.ts

Transparent proxy

Transparent proxy और underlying जानकारी को सत्यापित करने के लिए, दो contracts पास करते हुए hardhat-tenderly को कॉल करें: implementation के लिए Vault, और proxy के लिए स्वयं TransparentUpgradeableProxy
example.ts
  1. Implementation को सत्यापित करने के लिए, निम्नलिखित प्रदान करें:
  • अपने proxied contract का name (हमारे मामले में Vault)
  • वह address जहाँ contract deploy किया गया था, @openzeppelin/upgrades-core से getImplementationAddress method का उपयोग करके।
  1. Proxy को सत्यापित करने के लिए, निम्नलिखित प्रदान करें:
  • proxy contract name के रूप में TransparentUpgradeableProxy
  • Proxy का address await proxy.getAddress()

पूर्ण Code नमूना

example.ts

Beacon proxy

Beacon proxy और underlying जानकारी को सत्यापित करने के लिए, आपको दो contracts सत्यापित करने होंगे: Vault (implementation) और OpenZeppelin का UpgradableBeacon:
example.ts

पूर्ण Code नमूना

example.ts