शुरू करने से पहले
- एक Virtual Environment। dashboard से इसका RPC URL कॉपी करें।
- उस Virtual Environment पर एक funded deployer address।
/verify जोड़ा हुआ है।
Deploy और verify
- Foundry
- Hardhat
foundry.toml कॉन्फ़िगर करें
Tenderly का verifier उस metadata hash को match करता है जिसे Solidity compiler deployed bytecode में जोड़ता है, आपके द्वारा submit किए गए source के विरुद्ध। compiled output में metadata को रखने के लिए cbor_metadata और bytecode_hash को स्पष्ट रूप से सेट करें:foundry.toml
cbor_metadata = true और bytecode_hash = "ipfs" Foundry के डिफ़ॉल्ट हैं, लेकिन कुछ templates उन्हें strip कर देते हैं; bytecode_hash = "none" verification को तोड़ देता है। solc_version और optimizer settings को pin करें ताकि re-verification वही bytecode compile करे।यदि आपका project OpenZeppelin जैसी libraries का उपयोग करता है, तो remappings.txt में remappings को स्पष्ट रूप से घोषित करें:remappings.txt
Environment variables सेट करें
showLineNumbers
cast chain-id को Virtual Environment के chain ID को print करना चाहिए, और deployer balance गैर-शून्य होना चाहिए:forge create के साथ deploy करें
verify flags के साथ forge create चलाएं। Constructor arguments raw values के रूप में पास किए जाते हैं; Foundry उन्हें ABI-encode करता है और encoded रूप को verifier को submit करता है:showLineNumbers
Foundry script के साथ deploy करें
एक ही run में कई contracts deploy करने के लिएforge script का उपयोग करें। script में प्रत्येक new Foo(...) को verification के लिए स्वचालित रूप से submit किया जाता है, broadcast log से लिए गए सही constructor arguments के साथ। Imports को transparently handle किया जाता है: verifier को एक standard-JSON payload मिलता है जिसमें compiler द्वारा छूने वाली प्रत्येक source file होती है, इसलिए local imports और library imports (जैसे OpenZeppelin) बिना अतिरिक्त steps के verify होते हैं।--slow का उपयोग करें ताकि transactions एक-एक करके भेजी जाएं। इसके बिना, broadcast batching पिछले transaction के confirm होने से पहले एक transaction submit कर सकती है, जो एक hosted RPC के विरुद्ध flaky है और verification step को race कर सकती है।showLineNumbers
मौजूदा contract को verify करें
पहले से deployed contracts कोforge verify-contract के साथ verify किया जा सकता है। forge create के विपरीत, यह command पहले से ही ABI-encoded constructor arguments की अपेक्षा करता है; उन्हें बनाने के लिए cast abi-encode का उपयोग करें:showLineNumbers
--watch verifier को तब तक poll करता है जब तक verification समाप्त न हो जाए और परिणाम print करता है। Multi-contract deployments के लिए, प्रत्येक deployed address के लिए forge verify-contract एक बार चलाएं।Dashboard जाँचें
Tenderly Dashboard में, Contracts खोलें और Virtual Contracts tab चुनें। आपके नए deployed contracts वहाँ दिखाई देते हैं, प्रत्येक contract के लिए verification status दिखाई देता है।Troubleshooting
| लक्षण | संभावित कारण | समाधान |
|---|---|---|
verifier से unauthorized / -32004 response | गलत verifier URL। एक सामान्य गलती /verify के बजाय /verify/etherscan जोड़ना है। | सुनिश्चित करें कि verifier URL ठीक /verify पर समाप्त होता है। |
Bytecode does not match deployed contract | submit किया गया source deploy किए गए source से अलग compile हुआ: एक optimizer_runs mismatch, एक अलग solc_version, या एक stripped metadata hash। | foundry.toml में solc_version, optimizer, optimizer_runs, और bytecode_hash को pin करें। फिर से verify करने से पहले forge clean && forge build चलाएं। |
Failed to deserialize content | verifier ने एक error string लौटाई जिसे Foundry parse नहीं कर सकता, आमतौर पर एक upstream auth या path error को wrap कर रहा है। | URL की फिर से जाँच करें और raw response देखने के लिए -vvvv के साथ फिर से चलाएं। |
forge create पर Dry run enabled, not broadcasting transaction | --broadcast पास नहीं किया गया, या --constructor-args द्वारा निगल लिया गया। | --constructor-args को अंतिम flag बनने के लिए स्थानांतरित करें। |
forge script पर केवल पहला contract verify होता है | RPC race: पहले receipt से पहले दूसरा transaction submit हुआ। | --slow जोड़ें। |
Verifier OK की रिपोर्ट करता है लेकिन explorer अभी भी unverified दिखाता है | UI caching। | explorer page को hard-refresh करें। API response में status authoritative है। |
अगले कदम
- Foundry के साथ proxy contracts verify करें: upgrades सहित एक UUPS implementation और उसके ERC1967 proxy को verify करें।
- Stage contracts: अपनी team के साथ RPC लिंक और contract addresses साझा करें।
- अपने dApp को stage करें: अपने frontend को Virtual Environment पर पॉइंट करें।
- Virtual Environment को fork करें: एक Virtual Environment state से शाखा करें।