Sometimes you want to call a contract method that doesn't change the state of the blockchain. For instance, a method that only reads a value from storage and returns it.
In this case, there's no need to generate an actual blockchain transaction; you only want to read a value quickly.
You can do this with the SDK. Instead of calling the method with .call()
, use .simulate()
:
// you would mint 100 coins if the transaction wasn't simulated
let counter = contract_methods.mint_coins(100).simulate().await?;
Note that if you use .simulate()
on a method that does change the state of the blockchain, it won't work properly; it will just dry-run
it.
At the moment, it's up to you to know whether a contract method changes state or not, and use .call()
or .simulate()
accordingly.