Token Mint, Approve, और TransferFrom Bundle का Simulation करें
एक 3-चरण bundle का simulation करें जो DAI mint करता है, एक spender को approve करता है, और tokens transfer करता है, चरणों के बीच साझा state के साथ multi-transaction प्रवाहों के परीक्षण के लिए।
यह गाइड एक 3-चरण simulation bundle बनाता है जो क्लासिक ERC-20 approval प्रवाह का अभ्यास करता है: एक holder को tokens mint करना, एक spender को approve करना, फिर spender को transferFrom कॉल करने देना। प्रत्येक चरण उस state पर निर्भर करता है जिसे पिछला चरण बनाता है, यही कारण है कि यहाँ एक bundle सही उपकरण है।
DAI का mint function एक wards mapping द्वारा संरक्षित है: केवल wards के रूप में पंजीकृत पते ही इसे कॉल कर सकते हैं। Fake ward (0xe2e2...e2) mainnet पर ward नहीं है। इस चरण को सफल बनाने के लिए, एक state override जोड़ें जो उस पते के लिए ward स्टोरेज स्लॉट को 1 पर सेट करे:
Holder एक spender को 1 DAI तक pull करने के लिए approve करता है। यह चरण काम करता है क्योंकि चरण 1 ने पहले ही साझा state stream में holder के balance में 2 DAI क्रेडिट कर दिए हैं।
Spender holder से एक recipient को 0.03 DAI ले जाता है। यह काम करता है क्योंकि चरण 2 ने allowance प्रदान किया, जो केवल bundle के state stream के अंदर दिखाई देता है, on-chain नहीं।
फिर State overrides का विस्तार करें, DAI contract जोड़ें, और ऊपर दी गई तालिका से ward storage स्लॉट और मान दर्ज करें। स्लॉट commit करने के लिए Add storage override पर क्लिक करें।
चरण 1 mint calldata से भरा और ward state override कॉन्फ़िगर किया गया।
4
चरण 2 जोड़ें: Approve
Bundle rail में + Add function call पर क्लिक करें। नए चरण को Raw मोड में switch करें। सेट करें:
Simulate पर क्लिक करें (या ⌘↵ दबाएँ)। सभी तीनों चरण अनुक्रम में निष्पादित होते हैं। इसके decoded आउटपुट, उपयोग किए गए gas, events, और token transfers का निरीक्षण करने के लिए rail में प्रत्येक चरण पर क्लिक करें।
Bundle चलाने के बाद: चरण 2 (approve) पर फ़ोकस है, Approval event और decoded output दिखा रहा है।
चरण 3 (transferFrom) सफल रहा। 0.03 DAI transfer ERC-20 transfers tab में दिखाई दे रहा है।
प्रतिक्रिया तीन simulation परिणामों की एक array है, प्रति चरण एक। प्रत्येक entry में status, gasUsed, decoded logs, एक trace, assetChanges, और balanceChanges होता है।एक सफल रन सभी तीनों चरणों के लिए "status": true दिखाता है। यदि कोई चरण revert करता है (उदाहरण के लिए, क्योंकि चरण 1 से state override गायब है), तो API विफल होने वाले चरण तक और उसे सहित सभी परिणाम लौटाता है, और उसके बाद के चरण नहीं चलाए जाते।
"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 के लिए सकारात्मक दिखा रहे हैं।