> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Historical blocks पर token position का backtest करें

> Past block पर fork करें, yield-bearing token में position लें, और Network Mirror Mode से mainnet इतिहास replay करके realized yield मापें।

[Network Mirror Mode](/virtual-environments/network-mirror-mode) parent network के वास्तविक blocks को Virtual Environment पर replay करता है। जब Virtual Environment किसी **past block** पर fork की गई हो, तो यह replay वास्तविक इतिहास को कवर करता है: fork point से आगे की हर mainnet transaction आपकी private copy पर क्रम में फिर से execute होती है। यह guide उसी replay का उपयोग position के backtest के लिए करती है: past date पर fork करें, yield-bearing token प्राप्त करें, इतिहास को आगे replay करें, और पढ़ें कि position ने उस अवधि में वास्तव में कितनी yield कमाई।

उदाहरण के रूप में Ethereum Mainnet पर Franklin OnChain U.S. Government Money Fund token (`BENJI`) का उपयोग किया गया है। यही workflow किसी भी yield-bearing token पर लागू होता है।

<Note>
  Network Mirror Mode paid plan पर उपलब्ध है। इसे अपने account के लिए सक्षम करने के लिए, [हमारी sales team से संपर्क करें](https://tenderly.co/contact-us)।
</Note>

<Steps>
  ### Past block पर Virtual Environment बनाएं

  अपने project में एक नई Virtual Environment बनाएं। creation form में सेट करें:

  * **Networks**: Ethereum Mainnet
  * **Network mode**: **Network mirror** (पूर्ण block-by-block mainnet replay)
  * **Start from latest block** को अनचेक करें, reference point type को **Block Number** पर सेट करें, और उस date का block number दर्ज करें जब position शुरू होती है। **Fork from block** कॉलम हर चुने गए network का fork block दिखाता है।

  <Frame caption="Create Virtual Environment फॉर्म: Network mirror mode चुना गया, Start from latest block अनचेक, और reference point के रूप में past block number सेट।">
    <img src="https://mintcdn.com/tenderly/AwV2r8yQqTyCkRCK/images/testnets/mirror-backtest-create.webp?fit=max&auto=format&n=AwV2r8yQqTyCkRCK&q=85&s=eee8be67183659b356bdaf46dad8203b" alt="Create Virtual Environment form with Ethereum Mainnet, Network mirror mode, and a past fork block number entered" width="1600" height="1330" data-path="images/testnets/mirror-backtest-create.webp" />
  </Frame>

  Virtual Environment बनाएं, उसे खोलें, और **Network sync** टैब पर जाएं। **Network sync status** पैनल mainnet head, Virtual Environment head (आपके fork block पर स्थित), और Virtual Environment mainnet से कितने blocks पीछे है, यह दिखाता है। यही अंतर इतिहास का वह हिस्सा है जिसे replay कवर करेगा।

  <Frame caption="Network sync status पैनल: mainnet head, fork block पर Virtual Environment head, और blocks-behind काउंटर।">
    <img src="https://mintcdn.com/tenderly/AwV2r8yQqTyCkRCK/images/testnets/mirror-backtest-sync-status.webp?fit=max&auto=format&n=AwV2r8yQqTyCkRCK&q=85&s=0cb57769a10ffac34ebbf7a652f02f59" alt="Network sync status panel showing Mainnet head 25,638,816, Virtual Environment head 25,634,161, and 4,655 blocks behind mainnet" width="1600" height="1000" data-path="images/testnets/mirror-backtest-sync-status.webp" />
  </Frame>

  ### Wallet को fund करें और position लें

  fork block के समय की वास्तविक network state Virtual Environment पर live है, इसलिए fund का token contract और वे सभी pools जिनमें वह trade होता है, पहले से मौजूद हैं।

  [Sync active रहते हुए Admin RPC cheatcodes अक्षम रहते हैं](/virtual-environments/network-mirror-mode#cheatcode-behavior), इसलिए replay शुरू करने से पहले सारा setup कर लें। पुष्टि करें कि sync paused है: status पैनल चलते हुए timer के बजाय **Start auto-sync** दिखाता है।

  1. Investor wallet को fund करने के लिए ऊपर दाईं ओर **RPC Cheatcodes** का उपयोग करें: gas के लिए ETH हेतु [`tenderly_setBalance`](/virtual-environments/admin-rpc#tenderly_setbalance) और निवेश के लिए stablecoin हेतु [`tenderly_setErc20Balance`](/virtual-environments/admin-rpc#tenderly_seterc20balance)।
  2. Fund token उसी तरह प्राप्त करें जैसे कोई investor करता: उसके लिए swap करें, या fund के onchain flow के माध्यम से subscribe करें। wallet अब fork date के अनुसार position रखता है।

  ### Position का balance track करें

  **Network sync** टैब पर ही, निचले पैनल को **Sync operations** से **State drift** पर स्विच करें, फिर **Balance** सब-टैब खोलें।

  **Track balance** पर क्लिक करें और **Track wallet balance** डायलॉग भरें:

  * **Wallet**: investor wallet
  * **Token**: fund token (`BENJI`: `0x3DDc84940Ab509C11B20B76B466933f40b750dc9`)

  एक कार्ड दिखाई देता है जिसमें wallet, token और एक **Diff** काउंटर होता है। blocks replay होने तक यह "No balance drift data yet" दिखाता है।

  <Frame caption="Track wallet balance डायलॉग: investor wallet और BENJI fund token।">
    <img src="https://mintcdn.com/tenderly/AwV2r8yQqTyCkRCK/images/testnets/mirror-backtest-track-dialog.webp?fit=max&auto=format&n=AwV2r8yQqTyCkRCK&q=85&s=b59d880652741ac8ac914a80c078958b" alt="Track wallet balance dialog with a wallet address and the BENJI token on Mainnet selected" width="528" height="304" data-path="images/testnets/mirror-backtest-track-dialog.webp" />
  </Frame>

  ### इतिहास को आगे replay करें

  **Network sync status** पैनल में:

  1. Sync बटन के बगल में speed dropdown खोलें और **4×** चुनें (हर 3 सेकंड में एक block; [speed settings](/virtual-environments/network-mirror-mode#time-controls) देखें)।
  2. **Start auto-sync** दबाएं।

  Virtual Environment वास्तविक mainnet blocks को fork पर replay करती है। Virtual Environment head बढ़ता है, blocks-behind काउंटर घटता है, और उस अवधि की हर वास्तविक transaction क्रम में फिर से execute होती है, जिसमें fund के onchain yield distributions भी शामिल हैं।

  **Balance** कार्ड पर, हर replay हुआ yield payout chart पर tracked balance को एक सीढ़ी ऊपर ले जाता है। replay को तब तक चलने दें जब तक वह आपकी मापी जाने वाली अवधि को कवर न कर ले, फिर **Stop auto-sync** दबाएं।

  <Frame caption="Replay के बाद Balance कार्ड: tracked BENJI balance उस block पर सीढ़ी की तरह ऊपर जाता है जहां fund का distribution फिर से execute होता है।">
    <img src="https://mintcdn.com/tenderly/AwV2r8yQqTyCkRCK/images/testnets/mirror-backtest-drift-step.webp?fit=max&auto=format&n=AwV2r8yQqTyCkRCK&q=85&s=1c7dceeba8d7b143abca2a721c2a0403" alt="State drift Balance card showing a flat BENJI balance line stepping up sharply at block 25,634,222" width="700" height="380" data-path="images/testnets/mirror-backtest-drift-step.webp" />
  </Frame>

  ### Realized yield पढ़ें

  **Balance** कार्ड अब परिणाम दिखाता है:

  * Chart हर replay हुए block पर tracked balance दिखाता है। हर distribution एक सीढ़ी के रूप में दिखता है; replay की गई window की शुरुआत और अंत के balance का अंतर ही उस अवधि की realized yield है। \$1.00 NAV वाले fund के लिए, यही डॉलर में yield है।
  * किसी भी block पर balance पढ़ने के लिए chart पर hover करें।
  * **Diff** काउंटर दिखाता है कि tracked balance उसी block height पर mainnet से कितना अलग हो गया है। जब तक replay mainnet इतिहास को बिना बदलाव के फिर से execute करता है, यह `0.000` रहता है; जब Virtual Environment पर आपकी भेजी transactions position को mainnet के सापेक्ष बदलती हैं, तभी यह बदलता है।

  Annualize करने के लिए, replay किए गए इतिहास के *D* दिनों में principal *P* पर gain *G* के साथ: `APY ≈ (1 + G/P)^(365/D) − 1`।

  ### परिदृश्यों की तुलना करें (वैकल्पिक)

  * **Rewind** हाल ही में sync हुए blocks को वापस खोल देता है ताकि आप इतिहास का कोई हिस्सा फिर से चला सकें।
  * **Sync block** ठीक एक block आगे बढ़ाता है, जो किसी एक yield distribution पर सटीक रुककर उसे अलग से पढ़ने के लिए उपयोगी है।
  * अलग fork block पर या अलग position size के साथ दूसरी Virtual Environment बनाकर परिणामों की साथ-साथ तुलना करें।
</Steps>

## व्यावहारिक नोट्स

* **Yield तब दिखती है जब fund की वास्तविक yield transactions replay होती हैं।** rebasing token का held balance अपने आप बढ़ता है। जो fund registered holders को distribute करता है, उसके लिए किसी holder position को track करें ताकि distributions उस पर आएं।
* **Cheatcodes sync के साथ pause होते हैं।** सारा setup (funding, position में प्रवेश) sync paused रहते हुए करें, फिर replay शुरू करें।
* **प्रति environment एक network।** Network Mirror Mode एक single parent network के विरुद्ध चलता है; इसे [multichain Virtual Environments](/virtual-environments/multichain/overview) के साथ नहीं जोड़ा जाता।
* **Replay वास्तविक blocks से सीमित है।** लंबी अवधि कवर करने का मतलब है बहुत सारे blocks replay करना। yield जल्दी capture करने के लिए, किसी ज्ञात distribution से थोड़ा पहले fork करें, या एक प्रतिनिधि window replay करके annualize करें।

## अगले कदम

* Balance के बजाय storage slot track करें (**State drift → State → Track variable**) ताकि replay की गई अवधि में किसी भी contract variable का अनुसरण कर सकें।
* अपने dapp का RPC इस Virtual Environment पर पॉइंट करें और वही replay अपने UI से चलाएं। [Stage dapps](/virtual-environments/ci-cd/stage-dapps) देखें।
* Sync mechanics, time controls, और cheatcode behavior के लिए [Network Mirror Mode](/virtual-environments/network-mirror-mode) concept पेज पढ़ें।
