State Sync paid plan पर उपलब्ध है। इसे अपने account पर सक्षम करने के लिए, हमारी sales team से संपर्क करें।
network sync mode निर्माण पर तय होता है और पूरे Virtual Environment के जीवन के लिए वही रहता है। इसे बाद में चालू, बंद, या स्विच नहीं किया जा सकता, चाहे dashboard से हो या API से। एक अलग mode के साथ चलाने के लिए, एक नया Virtual Environment बनाएं।
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_sendTransactionयाeth_sendRawTransactionके माध्यम से Virtual Environment को एक transaction भेजते हैं, तो एक block mined होता है और 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 अलग-अलग दरों से बदलेंगे।

latest किस parent-network state को दर्शाता है?
एक State Sync Virtual Environment पर, latest account state (storage, balances, nonces, और contract code) parent network के सबसे हाल में synced block को दर्शाता है, साथ ही आपके अपने Virtual Environment transactions द्वारा किए गए किसी भी परिवर्तन को। Blocks लगातार sync होते हैं, इसलिए synced state में कोई gaps नहीं होते।
Virtual Environment की block height state की ताज़गी का संकेतक नहीं है। Blocks केवल तब mine होते हैं जब Virtual Environment एक state modification को process करता है, इसलिए इसका block number parent chain से स्वतंत्र रूप से आगे बढ़ता है। एक Virtual Environment जिसका head block parent network से बहुत पीछे है, फिर भी latest पर parent network की latest synced state serve करता है। staleness के बारे में तर्क करने के लिए, block numbers की नहीं, बल्कि synced parent state की तुलना करें।
Synced state में contract code शामिल है। Virtual Environment बनाए जाने के बाद parent network पर deploy किया गया एक contract, Virtual Environment पर eth_getCode(address, "latest") से bytecode लौटाता है, भले ही उसके लिए कोई deployment transaction, event logs, या blocks वहाँ मौजूद न हों। किसी पहले के block पर pinned reads, जैसे eth_getCode(address, "<creation block>"), अभी भी उस block के समय की state लौटाते हैं।
केवल state sync होता है। Parent-network transactions, event logs, और blocks कभी भी Virtual Environment पर दिखाई नहीं देते; देखें मैं State Sync के साथ mainnet transactions क्यों नहीं देख सकता?
बेहतर समझ के लिए, आइए एक उदाहरण देखें:
उदाहरण
उदाहरण निम्नलिखित प्रदर्शित करता है:- Virtual Environment (Virtual Sepolia) मूल network (Sepolia) से latest state तक पहुँचता है।
- Virtual Environment
writeके बाद, संशोधित variable अपने Sepolia counterpart से detach हो जाता है।
State Sync Example
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 है।