Simulation UI With State Overrides
Use state overrides with the Simulation UI to set custom states for contracts involved in a transaction before running a simulation.
State overrides allow you to specify custom values for smart contract state variables and impose custom conditions before running a simulation. This allows for experimentation and understanding of smart contract behavior and usage.
We'll simulate minting 2 DAI (
2000000000000000000wei) for the owner
0xe58b9ee93700a616b50509c8292977fa7a0f8ce1. We'll use the address
0xf2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2as the minter. Since this isn't an actual ward on Mainnet DAI, we have to use state overrides to make it a ward during this simulation.
If you check the source of the Dai contract, you'll see the
wardsmapping from an address to a number. Essentially, for minting to work, we have to plant
0xf2...f2as a ward, which is the state override we must do.
wards[0xf2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2] = 1
The example covers the following steps:
Step 0: Go to Contracts on your left and click Add Contracts to add the Dai contract to your project. Then, paste
0x6b175474e89094c44da98b954eedeac495271d0fto the contract address field and select the Mainnet as the network from the dropdown.
Filling in simulation parameters
Step 1: Go to Simulations in the navigation menu on your left.
Step 2: Choose Dai from the contract dropdown menu.
Step 3: Select mint as the function from the corresponding dropdown menu.
Step 4: Paste
0xe58b9ee93700a616b50509c8292977fa7a0f8ce1to the usr field and
2000000000000000000to the ward field.
Step 5: Paste
0xf2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2to the from field.
Step 6: Scroll down to State Overrides, click Add State Override, and pick Dai from the dropdown.
Step 7: In the Storage Variables section, click Add More, pick
wards, and replace it with
Step 8: Set the value field to
1and click Add.
Step 9: Scroll down and click Simulate.
Step 10. Navigate to the Events tab to see the Transfer event.
Step 11: Go to the State Changes tab to verify that the balanceOf mapping has changed for the owner
The transfer event during minting
State Changes: the
balanceOfchange for the owner