> ## 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.

# State Sync

> live oracle prices, pool data, और balances पढ़ने के लिए State Sync का उपयोग करके एक Virtual Environment को उसके parent network के साथ real-time sync में रखें।

State Sync आपके environment को parent network के state के साथ real-time sync में रखता है। यह सुनिश्चित करने में मदद करता है कि आप Virtual Environment बनाए जाने के बाद उत्पादित सभी blocks तक पहुँच सकते हैं।

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

आप Virtual Environment बनाते समय **State only sync** network sync mode का चयन करके State Sync सक्षम करते हैं।

<Note>
  network sync mode निर्माण पर तय होता है और पूरे Virtual Environment के जीवन के लिए वही रहता है। इसे बाद में चालू, बंद, या स्विच नहीं किया जा सकता, चाहे dashboard से हो या API से। एक अलग mode के साथ चलाने के लिए, एक नया Virtual Environment बनाएं।
</Note>

<Tip>
  parent network के साथ block-दर-block alignment और एक दिखाई देने वाले mempool की आवश्यकता है? देखें [Network Mirror Mode](/virtual-environments/network-mirror-mode), यह State Sync से अधिक मजबूत गारंटी है, time controls और mainnet के विरुद्ध आपके Virtual Environment की तुलना करने के लिए एक state-drift lens के साथ।
</Tip>

<Warning>
  `block.number` को cache करने वाले mainnet contracts का व्यवहार Virtual Environment transactions चलाते समय अप्रत्याशित है, क्योंकि mainnet और Virtual Environment पर [block number अलग-अलग दरों पर बढ़ता है](#how-state-sync-works)।
</Warning>

## State Sync को कब सक्रिय करें

यह विकल्प कई परिदृश्यों में उपयोगी है:

* Virtual Environment contracts और transactions **मूल chain पर मौजूद वर्तमान Oracle values तक पहुँच सकते हैं**।
* contracts का परीक्षण और proof-of-concept transactions का निर्माण करते समय Virtual Environments से Uniswap pools तक पहुँच सकते हैं।
* बासी data के बिना एक subgraph बनाएं।
* real network conditions के साथ one-to-one correspondence में अपने dapps और protocols के व्यवहार और performance का परीक्षण करें

## State Sync write collisions को कैसे resolve करता है

State sync आपको mainnet पर storage slots और account balances के latest मानों तक पहुँचने में सक्षम बनाता है क्योंकि वे update होते हैं। Virtual Environment पर एक विशेष storage slot पर लिखने पर, उस slot के लिए synchronization रुक जाता है, लेकिन सभी unmodified के लिए सक्रिय रहता है।

यहाँ state sync विस्तार से है:

* Initial block number निर्माण के समय मूल chain के latest block से match करता है।
* हर बार जब आप `eth_sendRawTransaction` और `eth_sendRawTransaction` के माध्यम से Virtual Environment को एक transaction भेजते हैं, तो एक block minded होता है और block number 1 से बढ़ जाता है, मूल network से स्वतंत्र।
* *Virtual Environment पर एक variable पर लिखने तक*, Virtual Environment मूल network से वर्तमान मान को track करता है।
* Virtual Environment पर एक contract के एक variable पर *लिखने के बाद* (उदाहरण, `C.X=100`), कोई भी बाद का read उस मान (`100`) को yield करेगा।
* एक contract के सभी *unmodified state variables* (`C.Y`) मूल network से मान को प्रतिबिंबित करेंगे।
* Virtual Environment पर एक नया block mined होने से पहले, latest virtual block को parent chain पर latest block के साथ synchronize किया जाता है।
* Virtual Environment *हर state modification के बाद एक block mine करता है* (`sendTransaction`, `setBalance`, आदि)।
* Virtual Environment और मूल network पर Block numbers *अलग-अलग दरों से बदलेंगे*।

<img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/testnets/state-sync.png?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=1be8389e63eee964e42290d9f28dafb5" alt="" width="1920" height="1312" data-path="images/testnets/state-sync.png" />

बेहतर समझ के लिए, आइए एक उदाहरण देखें:

## उदाहरण

उदाहरण निम्नलिखित प्रदर्शित करता है:

* Virtual Environment (Virtual Sepolia) मूल network (Sepolia) से latest state तक पहुँचता है।
* Virtual Environment **`write`** के बाद, संशोधित variable अपने Sepolia counterpart से detach हो जाता है।

आप Github पर उदाहरण पा सकते हैं:

<Card title="State Sync Example" href="" />

Th example एक modified [Counter contract](https://github.com/Tenderly/tenderly-examples/tree/master/virtual-environments-state-sync/contracts/src/Counter.sol) का उपयोग करता है, जिसमें counters का एक map होता है। यह Sepolia पर `0xd01dF6d2354c5A869265dC9a9561E3544ac53262` पर deployed है। [test script](https://github.com/Tenderly/tenderly-examples/tree/master/virtual-environments-state-sync/src/index.ts) Sepolia और Sepolia पर आधारित एक Virtual Environment - `Virtual Sepolia` दोनों के साथ इंटरैक्ट करेगा।

script counter map में एक random entry लेती है, और फिर:

* Sepolia पर मान सेट करती है, फिर Sepolia और Virtual Sepolia दोनों पर मान पढ़ती है, यह दिखाते हुए कि वही मान वापस पढ़ा जाता है।
* Virtual Sepolia पर मान सेट करती है, फिर Sepolia और Virtual Sepolia दोनों पर मान पढ़ती है, यह दिखाते हुए कि अलग-अलग मान पढ़े जाते हैं।
* फिर से Sepolia पर मान सेट करती है, फिर Sepolia और Virtual Sepolia दोनों पर मान पढ़ती है, यह दिखाते हुए कि Sepolia पर संशोधन इसके virtual counterpart पर invisible है।

<Steps>
  ### Virtual Environment बनाएं

  Sepolia के आधार पर एक [नया Virtual Environment](/virtual-environments/quickstart) बनाएं, custom Chain ID के रूप में `735711155111` का उपयोग करें।

  ### Environment setup

  `.example.env` template को copy करें और निम्न को बदलें:

  * **`TENDERLY_VIRTUAL_TESTNET_CHAIN_ID`** Virtual Environment का chain ID। `735711155111` का उपयोग करें
  * **`TENDERLY_VIRTUAL_TESTNET_RPC_URL_SEPOLIA`** Virtual Environment का RPC URL
  * test transactions पर signing के लिए **`PRIVATE_KEY`**

  ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  cp .example.env .env
  vi .env # modify environment variables
  ```

  ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  cd virtual-environments-state-sync
  source .env
  yarn install
  npx ts-node src/index.ts
  ```

  ### परिणाम

  **`write`** operations के बारे में ध्यान देने योग्य मुख्य बिंदु:

  1. sepolia (`1`) पर लिखने के बाद, sepolia और virtualSepolia दोनों मान `1` पढ़ते हैं - मूल network का latest state।
  2. Virtual Sepolia (`10`) पर लिखने के बाद, Sepolia से पढ़ने पर पहले से सेट किया गया मान (`1`) मिलता है, और virtualSepolia से पढ़ने पर हाल ही में सेट किया गया मान (`10`) मिलता है।
  3. फिर से Sepolia पर लिखने के बाद (`100`), Sepolia से पढ़ने पर latest सेट मान (`100`) मिलता है, और virtualSepolia से पढ़ने पर पहले से सेट किया गया मान (`10`) मिलता है।

  ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  Playing with Counter(0xd01dF6d2354c5A869265dC9a9561E3544ac53262).numbers[3788720642447205]
  State:
    sepolia: 0
    virtualSepolia: 0

  ================================================================================================
  Write: Counter(0xd01dF6d2354c5A869265dC9a9561E3544ac53262)@Sepolia.numbers[3788720642447205] = 1
  Tx hash: 0xe57c5da70c68d55f86957f7a2fc2644670b032fe5f972b9e9ccc2774cd2ba352
  State:
    sepolia: 1
    virtualSepolia: 1

  ================================================================================================
  Write: Counter(0xd01dF6d2354c5A869265dC9a9561E3544ac53262)@Virtual Sepolia.numbers[3788720642447205] = 10
  Tx hash: 0x56099d89c1d6fd001a1e9a0cecca13e13c04013b473acb6a48cd61a4b988696c
  State:
    sepolia: 1
    virtualSepolia: 10

  ================================================================================================
  Write: Counter(0xd01dF6d2354c5A869265dC9a9561E3544ac53262)@Sepolia.numbers[3788720642447205] = 100
  Tx hash: 0xc3c37e912bfa4fca9b980339fa2c95dbef75d6c605f0df831ca985b0ef3b61ec
  State:
    sepolia: 100
    virtualSepolia: 10
  ```
</Steps>
