मुख्य सामग्री पर जाएं
State Sync आपके environment को parent network के state के साथ real-time sync में रखता है। यह सुनिश्चित करने में मदद करता है कि आप Virtual Environment बनाए जाने के बाद उत्पादित सभी blocks तक पहुँच सकते हैं।
State Sync paid plan पर उपलब्ध है। इसे अपने account पर सक्षम करने के लिए, हमारी sales team से संपर्क करें
आप Virtual Environment बनाते समय State only sync network sync mode का चयन करके State Sync सक्षम करते हैं।
network sync mode निर्माण पर तय होता है और पूरे Virtual Environment के जीवन के लिए वही रहता है। इसे बाद में चालू, बंद, या स्विच नहीं किया जा सकता, चाहे dashboard से हो या API से। एक अलग mode के साथ चलाने के लिए, एक नया Virtual Environment बनाएं।
parent network के साथ block-दर-block alignment और एक दिखाई देने वाले mempool की आवश्यकता है? देखें Network Mirror Mode, यह State Sync से अधिक मजबूत गारंटी है, time controls और mainnet के विरुद्ध आपके Virtual Environment की तुलना करने के लिए एक state-drift lens के साथ।
block.number को cache करने वाले mainnet contracts का व्यवहार Virtual Environment transactions चलाते समय अप्रत्याशित है, क्योंकि mainnet और Virtual Environment पर block number अलग-अलग दरों पर बढ़ता है

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 अलग-अलग दरों से बदलेंगे
बेहतर समझ के लिए, आइए एक उदाहरण देखें:

उदाहरण

उदाहरण निम्नलिखित प्रदर्शित करता है:
  • Virtual Environment (Virtual Sepolia) मूल network (Sepolia) से latest state तक पहुँचता है।
  • Virtual Environment write के बाद, संशोधित variable अपने Sepolia counterpart से detach हो जाता है।
आप Github पर उदाहरण पा सकते हैं:

State Sync Example

Th example एक modified Counter contract का उपयोग करता है, जिसमें counters का एक map होता है। यह Sepolia पर 0xd01dF6d2354c5A869265dC9a9561E3544ac53262 पर deployed है। test script 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 है।
1
Virtual Environment बनाएं
2
Sepolia के आधार पर एक नया Virtual Environment बनाएं, custom Chain ID के रूप में 735711155111 का उपयोग करें।
3
Environment setup
4
.example.env template को copy करें और निम्न को बदलें:
5
  • 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
  • 6
    cp .example.env .env
    vi .env # modify environment variables
    
    7
    cd virtual-environments-state-sync
    source .env
    yarn install
    npx ts-node src/index.ts
    
    8
    परिणाम
    9
    write operations के बारे में ध्यान देने योग्य मुख्य बिंदु:
    10
  • sepolia (1) पर लिखने के बाद, sepolia और virtualSepolia दोनों मान 1 पढ़ते हैं - मूल network का latest state।
  • Virtual Sepolia (10) पर लिखने के बाद, Sepolia से पढ़ने पर पहले से सेट किया गया मान (1) मिलता है, और virtualSepolia से पढ़ने पर हाल ही में सेट किया गया मान (10) मिलता है।
  • फिर से Sepolia पर लिखने के बाद (100), Sepolia से पढ़ने पर latest सेट मान (100) मिलता है, और virtualSepolia से पढ़ने पर पहले से सेट किया गया मान (10) मिलता है।
  • 11
    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