Пример: минтинг 2 DAI
Мы симулируем минтинг 2 DAI (2000000000000000000 wei) на держателя 0xe58b9ee93700a616b50509c8292977fa7a0f8ce1, отправляемый с 0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2.
Функция mint DAI защищена маппингом wards: минтить могут только зарегистрированные адреса ward. Отправитель не является ward в Mainnet, поэтому обычная симуляция откатывается. Переопределение wards[0xe2e2…e2e2] = 1 делает его ward на время симуляции.
Постройте шаг mint
- Перейдите в Simulator и нажмите New Simulation.
- В поле Contract вставьте
0x6b175474e89094c44da98b954eedeac495271d0fи выберите Dai. - Выберите mint в поле Function.
- Установите usr в
0xe58b9ee93700a616b50509c8292977fa7a0f8ce1, а wad в2000000000000000000. - Установите From шага в
0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2.
Добавьте переопределение состояния
- Разверните секцию State overrides под полями шага и нажмите Add State Override. Контракт переопределения по умолчанию совпадает с целью шага (Dai).
- В Storage variables введите ключ
wards[0xe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2]и значение1. Поле ключа предлагает декодированные переменные хранилища контракта (wards[],balanceOf[],totalSupplyи так далее); заполните ключ маппинга внутри скобок. - Нажмите кнопку + рядом со значением, чтобы добавить пару. Зафиксированная пара появится строкой под Storage variables. Tenderly сохраняет её как вычисленный хеш слота хранилища.

Пара переопределения должна быть зафиксирована кнопкой +. Незафиксированная запись ключа/значения считается невалидной, и симуляция не запустится.
Запустите и изучите
- Нажмите Simulate. Mint выполняется успешно, потому что симуляция видит отправителя как ward.

- Вкладка Events показывает событие
Transferс нулевого адреса на держателя для2000000000000000000wei.

- Вкладка State отображает применённые State Overrides (слот ward, установленный в
1) и результирующие State Changes:balanceOfдержателя, растущий с0до2000000000000000000, увеличенныйtotalSupplyи nonce отправителя.

Сырые ключи хранилища
Вместо декодированной формыmapping[key] вы можете напрямую ввести сырой 32-байтовый слот хранилища. Для Solidity-маппинга в позиции хранилища p слот для mapping[k] равен keccak256(abi.encode(k, p)). Переопределение wards выше разрешается в: