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 — сквозное прохождение с деплоем переиспользуемой песочницы чит-кодов.