इन पर काम करता है: सार्वजनिक नेटवर्क (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
अवलोकन
इस गाइड में, हम OpenZeppelin के UUPSUpgradeable, TransparentUpgradeableProxy, और BeaconProxy विकल्पों के सत्यापन को प्रदर्शित करने के लिए एक उदाहरण Hardhat project और@tenderly/hardhat-tenderly plugin का उपयोग करेंगे।
Deploy किए गए implementation का address प्राप्त करने के लिए, @openzeppelin/upgrades-core package और getImplementationAddress function का उपयोग करें।
Proxy implementation को सत्यापित करना आमतौर पर सीधा है; इसे किसी भी अन्य contract की तरह सत्यापित करें।
example.ts
- उपयोग किए जा रहे proxy के type के आधार पर proxy के सटीक smart contract को load करें, ताकि इसे compile किया जा सके। आपको एक dummy .sol फ़ाइल बनाकर compiler के माध्यम से proxy contracts को import करना होगा।
- उन settings को निर्दिष्ट करने के लिए
hardhat.config.tsको Modify करें जिनके साथ OpenZeppelin contracts compile किए गए थे।
example.ts
Proxy type के अनुसार सत्यापित करें
ये code samples दिखाते हैं कि OpenZeppelin के तीन proxy patterns के लिए implementation और proxy को कैसे सत्यापित किया जाए। ये उदाहरण एक proxiedVault contract का उपयोग करते हैं जो एक ERC-20 token (TToken) को reference करता है।
UUPS proxy
UUPS proxy और underlying जानकारी को सत्यापित करने के लिए,hardhat-tenderly plugin को दो बार कॉल करें:
- Implementation को सत्यापित करने के लिए, आपको निम्नलिखित प्रदान करने की आवश्यकता है:
- अपने proxied contract का
name(हमारे मामले मेंVault) - वह address जहाँ contract deploy किया गया था,
@openzeppelin/upgrades-coreसेgetImplementationAddressmethod का उपयोग करके।
- Proxy को सत्यापित करने के लिए, निम्नलिखित प्रदान करें:
- proxy contract
nameके रूप मेंERC1967Proxy - Proxy का address
proxy.address
example.ts
पूर्ण Code नमूना
यहाँ एक पूर्ण Hardhat test है जो निम्न कार्य करता है:TTokenको Deploy करता है (vault के लिए आवश्यक)Vaultको एक proxy के रूप में Deploy करता है,TTokencontract के साथ initialize करता हैawait proxy.getAddress()पर deploy किए गए proxy (ERC1967Proxy) instance को सत्यापित करता हैgetImplementationAddress(ethers.provider, await proxy.getAddress())पर deploy किए गए implementation instanceVaultको सत्यापित करता है- Proxy को
VaultV2पर Upgrade करता है
example.ts
Transparent proxy
Transparent proxy और underlying जानकारी को सत्यापित करने के लिए, दो contracts पास करते हुएhardhat-tenderly को कॉल करें: implementation के लिए Vault, और proxy के लिए स्वयं TransparentUpgradeableProxy।
example.ts
- Implementation को सत्यापित करने के लिए, निम्नलिखित प्रदान करें:
- अपने proxied contract का
name(हमारे मामले मेंVault) - वह address जहाँ contract deploy किया गया था,
@openzeppelin/upgrades-coreसेgetImplementationAddressmethod का उपयोग करके।
- 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