State Sync доступен на платном тарифе. Чтобы включить его для вашего аккаунта, свяжитесь с отделом продаж.
Режим синхронизации сети фиксируется при создании и остаётся неизменным на всю жизнь Virtual Environment. Его нельзя включить, выключить или переключить впоследствии — ни из панели, ни через API. Чтобы работать в другом режиме, создайте новую Virtual Environment.
Когда активировать State Sync
Эта опция полезна в нескольких сценариях:- Контракты и транзакции Virtual Environment могут обращаться к актуальным значениям оракулов, присутствующим в оригинальной цепочке.
- Доступ к пулам Uniswap из Virtual Environments при тестировании контрактов и построении proof-of-concept транзакций.
- Построение subgraph без устаревших данных.
- Тестирование поведения и производительности ваших dapp и протоколов в один-к-одному соответствии с реальными сетевыми условиями.
Как State Sync разрешает коллизии записи
State sync позволяет получать доступ к последним значениям слотов хранилища и балансам аккаунтов в mainnet по мере их обновления. При записи в конкретный слот хранилища в Virtual Environment синхронизация останавливается для этого слота, но остаётся активной для всех неизменённых. Подробнее о state sync:- Начальный номер блока совпадает с последним блоком оригинальной цепочки в момент создания.
- Каждый раз, когда вы отправляете транзакцию в Virtual Environment через
eth_sendRawTransactionиeth_sendRawTransaction, майнится блок и номер блока увеличивается на 1 независимо от оригинальной сети. - До записи в переменную в Virtual Environment Virtual Environment отслеживает текущее значение из оригинальной сети.
- После записи в переменную контракта в Virtual Environment (например,
C.X=100), любое последующее чтение вернёт это значение (100). - Все неизменённые переменные состояния контракта (
C.Y) будут отражать значение из оригинальной сети. - Перед тем как в Virtual Environment майнится новый блок, последний виртуальный блок синхронизируется с последним блоком в родительской цепочке.
- Virtual Environment майнит блок после каждой модификации состояния (
sendTransaction,setBalanceи т. д.). - Номера блоков в Virtual Environment и оригинальной сети будут меняться с разной скоростью.

Пример
Пример демонстрирует следующее:- Virtual Environment (Virtual Sepolia) обращается к последнему состоянию из оригинальной сети (Sepolia).
- После
writeв Virtual Environment изменённая переменная отсоединяется от её аналога в Sepolia.
Пример State Sync
0xd01dF6d2354c5A869265dC9a9561E3544ac53262. Тестовый скрипт взаимодействует и с Sepolia, и с Virtual Environment на основе
Sepolia — Virtual Sepolia.
Скрипт берёт случайную запись в отображении счётчика и затем:
- Устанавливает значение в Sepolia, затем читает значения и в Sepolia, и в Virtual Sepolia, показывая, что читается одно и то же значение.
- Устанавливает значение в Virtual Sepolia, затем читает значения и в Sepolia, и в Virtual Sepolia, показывая, что читаются разные значения.
- Снова устанавливает значение в Sepolia, затем читает значения и в Sepolia, и в Virtual Sepolia, показывая, что модификация в Sepolia невидима в её виртуальном аналоге.
Создайте новую Virtual Environment на основе Sepolia, используя
735711155111 в качестве
пользовательского Chain ID.TENDERLY_VIRTUAL_TESTNET_CHAIN_ID — chain ID Virtual Environment. Используйте 735711155111TENDERLY_VIRTUAL_TESTNET_RPC_URL_SEPOLIA — RPC URL Virtual EnvironmentPRIVATE_KEY — для подписи тестовых транзакций1) и Sepolia, и virtualSepolia читают значение 1 — последнее состояние оригинальной
сети.10) чтение из Sepolia возвращает ранее установленное значение (1), а чтение из
virtualSepolia — недавно установленное значение (10).100) чтение из Sepolia возвращает последнее установленное значение (100), а чтение из
virtualSepolia — ранее установленное значение (10).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