- Setup और pre-flight: परिवेश शुरू करना, wallets fund करना, हस्ताक्षर करने से पहले transactions की जाँच करना।
- Debugging और post-mortem: यह पता लगाना कि एक transaction क्यों विफल हुआ, किसने funds लिए, या एक swap ने अपेक्षा से कम क्यों लौटाया। advanced trace navigation टूल्स यहाँ चमकते हैं।
- Virtual Environment workflows: impersonation, बहु-चरणीय परीक्षण, snapshots, time-travel, token balance overrides।
- Optimization और inspection: gas breakdowns, contract metadata।
एक Virtual Environment बनाएँ और एक wallet fund करें
क्या पूछें:“Ethereum mainnet से forked एक Virtual Environment बनाएँ और मेरे wallet 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 को 100 ETH से fund करें।”Claude क्या करता है:
- आपके projects खोजने के लिए
list_projectscall करता है, फिर एक चुनने के लिएset_active_project। - Ethereum mainnet network ID खोजने के लिए
get_networkscall करता है। - एक forked परिवेश बनाते हुए network ID के साथ
create_vnetcall करता है। नया Virtual Environment स्वचालित रूप से active सेट हो जाता है। - आपके wallet address के साथ
fund_accountcall करता है, balance को hex wei में 100 ETH पर सेट करता है। स्वचालित रूप से active Virtual Environment पर काम करता है। - Hardhat, Foundry, या किसी भी Web3 library में उपयोग के लिए तैयार Admin RPC और Public RPC URLs सहित Virtual Environment विवरण लौटाता है।
Uniswap swap को simulate करें
क्या पूछें:“Ethereum mainnet पर 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 से Uniswap V3 पर 1 ETH का USDC के लिए swap simulate करें। मुझे अपेक्षित output और कोई भी token transfers दिखाएँ।”Claude क्या करता है:
- Uniswap V3 router address, आपके sender address, swap calldata, और value के रूप में 1 ETH के साथ
simulate_transactioncall करता है। - simulation वर्तमान mainnet state के विरुद्ध चलता है और लौटाता है: success/revert status, gas used, और decoded method नाम।
- सभी token movements, ETH अंदर जाता और USDC बाहर आता, दिखाने के लिए
get_simulation_asset_transferscall करता है। - USD values के साथ आपके balances पर शुद्ध प्रभाव दिखाने के लिए
get_simulation_balance_changescall करता है।
भेजने से पहले एक transaction का pre-flight check
क्या पूछें:
“मैं 0xE592427A0AEce92De3Edee1F18E0157C05861564 को असीमित USDC allowance देने के लिए 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 पर approve call करने वाला हूँ। पहले इसे simulate करें और मुझे दिखाएँ कि यह कौन सी approvals और state changes बनाएगा।”
Claude क्या करता है:
- आपके wallet को sender के रूप में, token contract को recipient के रूप में, और
approvecalldata के साथsimulate_transactioncall करता है। - हर approval और allowance change दिखाने के लिए
get_simulation_exposure_changescall करता है, कौन सा spender किसको access पाता है और कितना। - संशोधित सटीक storage slots दिखाने के लिए
get_simulation_state_changescall करता है।
एक विफल on-chain transaction को debug करें
क्या पूछें:“transaction 0x6c5df5a1e6b34e2432ae19706e38a84239495cdbf40c2a9d4d79806443c4aa0d Ethereum पर क्यों revert हुआ?”Claude क्या करता है:
- tx hash के साथ
trace_transactioncall करता है। status (false= reverted), gas used, decoded method नाम, और error संदेश लौटाता है। - पूर्ण internal call tree प्राप्त करने के लिए
get_simulation_call_tracecall करता है, decoded names, inputs, outputs, और कौन सी विशिष्ट call विफल हुई इसके साथ हर function call। - revert point से पहले कौन से events emit किए गए यह देखने के लिए
get_simulation_eventscall करता है। - वैकल्पिक रूप से यह देखने के लिए
get_simulation_state_changescall करता है कि विफलता तक कौन सी state संशोधित की गई थी।
"ERC20: transfer amount exceeds balance"), और पूर्ण call trace ताकि आप विफलता तक ले जाने वाले execution रास्ते को देख सकें।
गहराई से nested transaction में revert का मूल कारण खोजें
क्या पूछें:“Transaction 0x… Ethereum पर revert हुआ। यह बहुत सारे internal calls वाला एक जटिल DeFi call है, वास्तविक error खोजें और मुझे उस रास्ते को दिखाएँ जो इसकी ओर ले गया।”Claude क्या करता है:
- top-level सारांश के लिए
trace_transactioncall करता है और revert की पुष्टि करता है। - transaction में हर failing call सूचीबद्ध करने के लिए
find_failurescall करता है, केवल सबसे बाहरी नहीं। यह मूल revert और कोई भी wrappingrequire/try-catch failures दोनों सामने लाता है। - प्रत्येक स्तर पर decoded inputs और outputs के साथ root call से गहनतम failing call तक blame chain लौटाने के लिए
get_error_pathcall करता है। - यदि किसी node में अभी भी omitted children हैं, तो इसे विस्तारित करने के लिए विशिष्ट position पर
get_call_trace_nodecall करता है।
get_simulation_call_trace output से paging करने की तुलना में बहुत तेज़।
एक बहुत बड़े trace को नेविगेट करें
क्या पूछें:
“इस transaction में सैकड़ों internal calls हैं और get_simulation_call_trace truncated है। इसकी संरचना समझने में मेरी मदद करें और उस भाग में drill करें जो मायने रखता है।”
Claude क्या करता है:
- कुल calls, अधिकतम गहराई, error count, और अद्वितीय contracts report करने के लिए
get_trace_statscall करता है, एक त्वरित size check जो रणनीति तय करता है। - एक compressed call tree प्राप्त करने के लिए
get_trace_skeletoncall करता है: प्रति node function नाम, contract, depth, और error flag, बिना decoded args के। - skeleton से
absolute_positionvalues का उपयोग करके दिलचस्प subtree (एक failing branch, एक विशिष्ट protocol, या एक संदिग्ध contract) की पहचान करता है। - उस subtree को पूर्ण decoded inputs और outputs के साथ विस्तारित करने के लिए
get_call_trace_nodecall करता है। - वैकल्पिक रूप से केवल उस subtree से events और storage diffs देखने के लिए
get_subtree_eventsऔरget_subtree_state_changescall करता है।
एक विशिष्ट contract या function के लिए एक trace खोजें
क्या पूछें:
“क्या इस transaction ने कभी USDC पर transferFrom call किया? यदि हाँ, तो मुझे decoded args के साथ हर call दिखाएँ।”
Claude क्या करता है:
- USDC address और
transferFromको filters के रूप मेंsearch_call_tracecall करता है, केवल matching calls को उनके decoded inputs, outputs, और absolute positions के साथ लौटाता है। - किसी भी match के लिए जो दिलचस्प है, उसके चारों ओर पूर्ण nested context लाने के लिए
get_call_trace_nodecall करता है।
एक transaction के माध्यम से पैसे का पालन करें
क्या पूछें:“Ethereum पर transaction 0x… के लिए, मुझे दिखाएँ कि किसने किसको क्या भेजा, क्रम में, USD values के साथ।”Claude क्या करता है:
- tx hash के साथ
get_transaction_fund_flowcall करता है। ordered token और native transfers लौटाता है, प्रत्येक from/to addresses और USD values के साथ, साथ ही प्रति address एक शुद्ध flow। - वैकल्पिक रूप से किसी भी अपरिचित address पर उसे पहचानने के लिए
get_contract_infocall करता है (protocol router, pool, treasury, आदि)।
एक विफल Safe multisig batch execution को debug करें
क्या पूछें:“0x… पर हमारा Safe batch execution Ethereum पर revert हुआ। batch में 12 calls हैं। कौन सा वास्तव में विफल हुआ और क्यों?”Claude क्या करता है:
- revert की पुष्टि करने और top-level method (
execTransactionयाmultiSend) प्राप्त करने के लिएtrace_transactioncall करता है। get_trace_statscall करता है, Safe batches जल्दी से बड़े traces में विस्फोट होते हैं, इसलिए stats अगले step का निर्णय लेता है।find_failurescall करता है, क्योंकिmultiSendअक्सर किसी भी sub-call विफलता पर पूरे batch को revert करता है, यह देखने का सबसे तेज़ तरीका है कि 12 operations में से कौन सा विस्फोट हुआ, न कि केवल बाहरी Safe revert।- प्रत्येक स्तर पर पूर्ण decoded input/output chain के लिए failing sub-call पर
get_error_pathcall करता है। - यदि कोई प्रासंगिक node truncated था तो वैकल्पिक रूप से
get_call_trace_nodecall करता है।
एक exploit या संदिग्ध transaction का post-mortem
क्या पूछें:“Ethereum पर 0x… ने हमारे protocol से funds drain किए। मुझे बताएँ कि क्या हुआ: पैसा किसके पास पहुँचा, attacker ने क्या call किया, और exploit हमारे contracts में कहाँ प्रवेश किया।”Claude क्या करता है:
- पहले
get_transaction_fund_flowcall करता है, ordered token और native flows साथ ही प्रति-address शुद्ध flow तुरंत attacker का wallet और drained protocol addresses सामने लाते हैं। - हर argument लोड किए बिना attacker की call संरचना का map बनाने के लिए
get_trace_skeletoncall करता है। - entry point को अलग करने के लिए protocol के contracts में calls के लिए (address द्वारा)
search_call_tracecall करता है। - decoded args के लिए entry point पर
get_call_trace_nodecall करता है, फिर यह देखने के लिएget_subtree_state_changesकि exploit ने वास्तव में कौन सी state mutate की। - attacker ने जिन किसी भी अज्ञात contracts के साथ interact किया उन पर
get_contract_infocall करता है (helpers, proxies, known exploit contracts)।
एक अप्रत्याशित liquidation की जाँच करें
क्या पूछें:“मेरी Aave position 0x… में liquidate हो गई, पता लगाएँ क्यों। मैं liquidation समय पर oracle price और सटीक health-factor path जानना चाहता हूँ।”Claude क्या करता है:
- liquidation call tree का map बनाने के लिए
trace_transactionऔरget_trace_skeletoncall करता है। - liquidation ने जिन price reads का उपयोग किया, उन्हें खोजने के लिए oracle calls (जैसे,
latestAnswer,getAssetPrice) के लिएsearch_call_tracecall करता है। - decoded return values के लिए प्रत्येक match पर
get_call_trace_nodecall करता है, health-factor math को feed करने वाली सटीक price। - यह दिखाने के लिए
get_transaction_fund_flowcall करता है कि कितना collateral seize किया गया, कर्ज़ चुकाया गया, और liquidator का bonus। - वैकल्पिक रूप से क्रम में
LiquidationCallऔरTransferevents के लिए liquidation subtree परget_subtree_eventscall करता है।
एक 1inch / aggregator swap को audit करें जिसने अपेक्षा से कम लौटाया
क्या पूछें:“0x… एक 1inch swap था जहाँ मुझे quote से काफी कम USDC मिला। किस pool या hop ने bad price दिया?”Claude क्या करता है:
get_trace_statscall करता है, aggregator routes कई pool hops के साथ गहरे हो सकते हैं।- क्रम में pool calls का अनुक्रम देखने के लिए
get_trace_skeletoncall करता है। swap,exactInput, या router के pool-interaction selectors के लिएsearch_call_tracecall करता है, प्रत्येक hop को खींचता है।- decoded
amountIn/amountOutvalues के लिए प्रत्येक hop परget_call_trace_nodecall करता है। - अंतिम शुद्ध प्राप्त और किसी भी अप्रत्याशित transfers (fees, rebates) की पुष्टि करने के लिए
get_transaction_fund_flowcall करता है।
एक विफल transaction को fix के साथ फिर से simulate करें
क्या पूछें:“Transaction 0x… ‘ERC20: transfer amount exceeds balance’ के साथ विफल हुआ। इसे फिर से simulate करें लेकिन यह पुष्टि करने के लिए मेरे USDC balance को 10,000 USDC पर override करें कि यही एकमात्र issue है।”Claude क्या करता है:
- मूल tx hash और आपके token balance को 10,000 USDC पर सेट करने वाले एक state override के साथ
resimulate_transactioncall करता है। - यदि simulation सफल होता है, तो पुष्टि करता है कि root cause अपर्याप्त balance था।
- यह सत्यापित करने के लिए
get_simulation_call_tracecall करता है कि execution path अब बिना error के पूरा होता है। - वैकल्पिक रूप से यह दिखाने के लिए
get_simulation_asset_transferscall करता है कि यदि transaction सफल हुआ होता तो क्या किया होता।
समझें कि एक transaction ने क्या किया
क्या पूछें:“मुझे बताएँ कि Ethereum पर transaction 0x… में क्या हुआ, हर internal call, किसने किसे call किया, और क्या बदला।”Claude क्या करता है:
- एक top-level सारांश के लिए
trace_transactioncall करता है: method नाम, sender, recipient, gas used, और status। - पूर्ण internal call tree प्राप्त करने के लिए
get_simulation_call_tracecall करता है, decoded function names, inputs, outputs, और प्रति-call gas के साथ हर nested call। - क्रम में emit किए गए सभी events सूचीबद्ध करने के लिए
get_simulation_eventscall करता है। - बदले हुए हर storage slot और balance दिखाने के लिए
get_simulation_state_changescall करता है।
एक smart contract का निरीक्षण करें
क्या पूछें:“Ethereum पर 0xdAC17F958D2ee523a2206206994597C13D831ec7 पर कौन सा contract deploy है?”Claude क्या करता है:
- address और Ethereum के network ID के साथ
get_contract_infocall करता है।
एक Virtual Environment पर एक impersonated transaction भेजें और उसे trace करें
क्या पूछें:
“मेरे Virtual Environment पर, Uniswap V2 deployer 0x1a9C8182C09F50C8318d769245beA52c32BE35BC से USDC contract 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 पर transfer function को call करते हुए मेरे wallet को 1000 USDC भेजने के लिए एक transaction भेजें। फिर execution को trace करें।”
Claude क्या करता है:
- deployer को
fromके रूप में, USDC कोtoके रूप में, और ABI-encodedtransfercalldata के साथ active Virtual Environment परsend_vnet_transactioncall करता है। sender impersonate किया जाता है, कोई निजी key की आवश्यकता नहीं। - execute किए गए transaction का
operation_idप्राप्त करने के लिएget_vnet_transactionscall करता है। - decoded execution सारांश प्राप्त करने के लिए
trace_vnet_transactioncall करता है, contract नाम, function नाम, decoded input parameters, और output। - गहरे विवरण के लिए वैकल्पिक रूप से
get_vnet_simulation_eventsऔरget_vnet_simulation_state_changescall करता है।
transfer call सफल हुआ, और emit किए गए events (आपके wallet को recipient के रूप में Transfer event)।
एक Virtual Environment पर एक multi-step contract interaction का परीक्षण करें
क्या पूछें:“मेरे Virtual Environment पर, पूरा approval और swap flow चलाएँ: पहले Uniswap router को मेरे wallet से 1000 USDC खर्च करने की approve करें, फिर swap execute करें। मुझे पहले और बाद में मेरे balances दिखाएँ।”Claude क्या करता है:
approvetransaction submit करने के लिए active Virtual Environment परsend_vnet_transactioncall करता है, आपके wallet को impersonate करते हुए, कोई निजी key की आवश्यकता नहीं।- swap calldata के साथ फिर से
send_vnet_transactioncall करता है। - प्रति step token movements दिखाने के लिए प्रत्येक transaction पर
get_vnet_simulation_asset_changescall करता है। - शुद्ध balance प्रभाव दिखाने के लिए अंतिम step के बाद
get_vnet_simulation_balance_changescall करता है।
optimization के लिए gas उपयोग का विश्लेषण करें
क्या पूछें:“इस transaction को simulate करें और मुझे एक gas breakdown दिखाएँ ताकि मैं सबसे महँगे function calls खोज सकूँ: [calldata paste करें या transaction का वर्णन करें]”Claude क्या करता है:
- आपके transaction parameters के साथ
simulate_transactioncall करता है। - intrinsic gas और refunds सहित प्रति-call gas खपत प्राप्त करने के लिए
get_simulation_gas_breakdowncall करता है। - execution tree में विशिष्ट function calls पर gas costs map करने के लिए
get_simulation_call_tracecall करता है।
एक EIP-2930 access list उत्पन्न करने के लिए
get_simulation_generated_access_list का उपयोग करें, जो पहले से घोषित करके gas costs को कम कर सकता है कि transaction कौन से storage slots और addresses access करेगा।समानांतर परीक्षण के लिए एक Virtual Environment को fork करें
क्या पूछें:“मेरे वर्तमान Virtual Environment को fork करें ताकि मैं वर्तमान state खोए बिना एक अलग approach test कर सकूँ।”Claude क्या करता है:
- आपका वर्तमान Virtual Environment खोजने के लिए
list_vnetscall करता है, फिर यदि आवश्यक हो तोset_active_vnet। fork_vnetcall करता है, deployed contracts, balances, और transaction history सहित सभी state संरक्षित करते हुए एक नया Virtual Environment बनाता है। fork स्वचालित रूप से active सेट हो जाता है।- ताज़ा RPC URLs के साथ नए Virtual Environment विवरण लौटाता है।
stress-testing के लिए snapshot, test, और revert
क्या पूछें:“मेरे Virtual Environment पर, वर्तमान state का snapshot लें, फिर विभिन्न oracle prices के साथ Aave पर एक liquidation simulate करें। प्रत्येक प्रयास के बीच snapshot पर revert करें ताकि मैं परिणामों की तुलना कर सकूँ।”Claude क्या करता है:
- एक snapshot ID प्राप्त करते हुए वर्तमान Virtual Environment state save करने के लिए
snapshot_vnetcall करता है। - oracle price को एक विशिष्ट value पर override करने के लिए
set_storage_atcall करता है। - liquidation ट्रिगर करने के लिए
send_vnet_transactioncall करता है। - परिणाम capture करने के लिए
get_vnet_simulation_balance_changesऔरget_vnet_simulation_asset_changescall करता है। - snapshot state पर Virtual Environment को restore करने के लिए
revert_vnetcall करता है (snapshot consume हो जाता है)। - अगले iteration के लिए फिर से
snapshot_vnetcall करता है, एक अलग oracle price सेट करता है, और दोहराता है।
परीक्षण के लिए ERC-20 balances सेट करें
क्या पूछें:“मेरे Virtual Environment पर, मेरे wallet 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 को 10,000 USDC और 5 WETH का balance दें ताकि मैं एक swap test कर सकूँ।”Claude क्या करता है:
- USDC token address, आपके wallet, और वांछित amount के साथ
set_erc20_balancecall करता है। - WETH token address और amount के साथ फिर से
set_erc20_balancecall करता है। - वैकल्पिक रूप से balances सही ढंग से सेट हुए हैं यह सत्यापित करने के लिए
balanceOfcall के साथvnet_callcall करता है।
set_erc20_balance token के storage layout को स्वचालित रूप से संभालता है।
timelocks और vesting का परीक्षण करने के लिए time-travel
क्या पूछें:“मेरे Virtual Environment पर, यह जाँचने के लिए घड़ी को 7 दिन आगे बढ़ाएँ कि क्या मेरा timelock contract सही ढंग से unlock होता है।”Claude क्या करता है:
- Virtual Environment घड़ी को आगे बढ़ाने के लिए 604800 सेकंड (7 दिन) के साथ
increase_timecall करता है। - time change को एक नए block में commit करने के लिए
mine_blockcall करता है। - timelock contract की state पढ़ने के लिए
vnet_callcall करता है (जैसे,isUnlocked()याreleaseTime())। - वैकल्पिक रूप से unlock execute करने और यह सत्यापित करने के लिए
send_vnet_transactioncall करता है कि यह सफल होता है।