Перейти к основному содержанию
Каждая Virtual Environment предоставляет прекомпайл-контракт по адресу 0xc100000000000000000000000000000000000000. Вызов функций этого прекомпайла изнутри транзакции позволяет вашим контрактам напрямую манипулировать состоянием on-chain (слотами хранилища, ETH-балансами, балансами токенов ERC-20, nonce и логами событий) без имперсонации аккаунтов и деплоя вспомогательных прокси. Эти чит-коды дополняют методы Admin RPC. Методы Admin RPC манипулируют состоянием извне транзакции (через JSON-RPC). Прекомпайл манипулирует состоянием изнутри транзакции (через Solidity-вызов). Используйте прекомпайл, когда ваш сетап должен оставаться атомарным, быть воспроизводимым по хешу транзакции или выполняться в цикле по многим слотам.

Интерфейс

Добавьте этот файл в ваш проект как IVnetPrecompile.sol:
IVnetPrecompile.sol
Ссылайтесь на него в вашем контракте по фиксированному адресу:

Функции

Хранилище

Баланс

Балансы ERC-20

Прекомпайл находит слот хранилища баланса токена автоматически, поэтому указывать слот не требуется. Стандартные раскладки mapping разрешаются напрямую и кэшируются после первого держателя; нестандартные раскладки обнаруживаются путём зондирования выполнения balanceOf токена.
Токены, которые упаковывают дополнительные флаги в слот хранилища баланса, отражают это в balanceOf. Например, USDC резервирует старший бит слота, поэтому после setMaxErc20Balance его balanceOf возвращает 2^255 - 1.

Nonce

События

emitEvent эмитирует лог, у которого поле address — это target, а не вызывающий контракт. Нижестоящие потребители (индексеры, subgraphs, вебхуки) считают лог реальной эмиссией от target. Девять перегрузок покрывают от нуля до четырёх индексируемых топиков с необязательным неиндексируемым data-payload: topic1 обычно равен keccak256("EventName(type,type,...)"). Пример, подделываем Transfer для USDC:

События чит-кодов

Каждый чит-код, изменяющий состояние, эмитирует соответствующее событие с адреса прекомпайла (0xc100000000000000000000000000000000000000): При проверке чека транзакции на предмет лога, подделанного через emitEvent, фильтруйте logs[] по целевому адресу, чтобы игнорировать собственные записи прекомпайла.

Известные ограничения

  • Virtual Environments на основе Base. Solidity-чит-коды недоступны на Base.
  • Virtual Environments на основе Arbitrum. Вызовы чит-кодов через eth_call не работают из-за внутренних особенностей Arbitrum. Транзакции, оценка газа и симуляции работают как ожидается.

См. также

  • Admin RPC — эквивалентные JSON-RPC методы для манипуляции состоянием извне транзакции.
  • Туториал по чит-кодам в Foundry — сквозное прохождение с деплоем переиспользуемой песочницы чит-кодов.