transferFrom कॉल करने देना। प्रत्येक चरण उस state पर निर्भर करता है जिसे पिछला चरण बनाता है, यही कारण है कि यहाँ एक bundle सही उपकरण है।
एक bundle क्यों?
प्रत्येक transaction का isolation में simulation करना असफल हो जाता है:- केवल Mint: आप mint logic को सत्यापित कर सकते हैं, लेकिन holder पते के पास mainnet पर कोई tokens नहीं हैं।
- केवल Approve: simulation के लिए holder के पास approve करने के लिए वास्तव में balance होना चाहिए।
- केवल TransferFrom: balance और approval दोनों का जगह पर होना आवश्यक है।
तीन transactions
सभी तीन transactions Ethereum mainnet पर DAI contract (0x6b175474e89094c44da98b954eedeac495271d0f) को target करते हैं।
चरण 1: 2 DAI Mint करें
mint function एक wards mapping द्वारा संरक्षित है: केवल wards के रूप में पंजीकृत पते ही इसे कॉल कर सकते हैं। Fake ward (0xe2e2...e2) mainnet पर ward नहीं है। इस चरण को सफल बनाने के लिए, एक state override जोड़ें जो उस पते के लिए ward स्टोरेज स्लॉट को 1 पर सेट करे:
| फ़ील्ड | मान |
|---|---|
| Contract | 0x6b175474e89094c44da98b954eedeac495271d0f |
| Storage key | 0xedd7d04419e9c48ceb6055956cbb4e2091ae310313a4d1fa7cbcfe7561616e03 |
| मान | 0x0000000000000000000000000000000000000000000000000000000000000001 |
keccak256(abi.encode(wardAddress, 0)) है, जो storage स्थिति 0 पर wards[fakeWardAddress] के लिए मानक Solidity mapping स्लॉट है।
चरण 2: 1 DAI Approve करें
चरण 3: 0.03 DAI TransferFrom
Simulator UI के माध्यम से चलाएँ
Sim Bundle Builder खोलें
बाएँ नेविगेशन में Simulator पर जाएँ, फिर New Simulation पर क्लिक करें। Bundle builder एक खाली चरण के साथ खुलता है।
Session strip कॉन्फ़िगर करें
Session strip शीर्ष पर चलता है। Network को Mainnet पर सेट करें और Block को Pending के रूप में छोड़ दें।
चरण 1 भरें: Mint
चरण को Raw मोड में switch करें। सेट करें:
- From:
0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2 - To:
0x6b175474e89094c44da98b954eedeac495271d0f - Calldata:
0x40c10f19000000000000000000000000e58b9ee93700a616b50509c8292977fa7a0f8ce10000000000000000000000000000000000000000000000001bc16d674ec80000

चरण 2 जोड़ें: Approve
Bundle rail में + Add function call पर क्लिक करें। नए चरण को Raw मोड में switch करें। सेट करें:
- From:
0xe58b9ee93700a616b50509c8292977fa7a0f8ce1 - To:
0x6b175474e89094c44da98b954eedeac495271d0f - Calldata:
0x095ea7b3000000000000000000000000f7ddedc66b1d482e5c38e4730b3357d32411e5dd0000000000000000000000000000000000000000000000000de0b6b3a7640000
चरण 3 जोड़ें: TransferFrom
एक और चरण जोड़ें। Raw मोड में switch करें। सेट करें:
- From:
0xf7ddedc66b1d482e5c38e4730b3357d32411e5dd - To:
0x6b175474e89094c44da98b954eedeac495271d0f - Calldata:
0x23b872dd000000000000000000000000e58b9ee93700a616b50509c8292977fa7a0f8ce1000000000000000000000000bd8daa414fda8a8a129f7035e7496759c5af8570000000000000000000000000000000000000000000000000006a94d74f430000
Simulation API के माध्यम से चलाएँ
समान अनुक्रम को प्रोग्रामेटिक रूप से चलाने के लिएsimulate-bundle एंडपॉइंट का उपयोग करें। {accountSlug} और {projectSlug} को अपने मानों से बदलें।
status, gasUsed, decoded logs, एक trace, assetChanges, और balanceChanges होता है।
एक सफल रन सभी तीनों चरणों के लिए "status": true दिखाता है। यदि कोई चरण revert करता है (उदाहरण के लिए, क्योंकि चरण 1 से state override गायब है), तो API विफल होने वाले चरण तक और उसे सहित सभी परिणाम लौटाता है, और उसके बाद के चरण नहीं चलाए जाते।
परिणामों में क्या देखें
| चरण | मुख्य संकेत |
|---|---|
| Mint | "type": "Mint" के साथ assetChanges entry और holder को क्रेडिट किए गए 2 DAI। zero पते से Transfer event। |
| Approve | logs में Approval event। कोई asset परिवर्तन नहीं (approvals tokens स्थानांतरित नहीं करते)। |
| TransferFrom | "type": "Transfer" के साथ assetChanges entry और 0.03 DAI holder से recipient तक जा रहा है। logs में Transfer event। balanceChanges holder के लिए नकारात्मक delta और recipient के लिए सकारात्मक दिखा रहे हैं। |
आगे के चरण
- Bundled Simulations (API reference): पूर्ण endpoint documentation और response schema।
- State overrides: simulations में storage, balance, और bytecode को कैसे override करें।
- Simulator UI: bundle builder के लिए layout reference और keyboard shortcuts।

