A new Web3 version was just released and it comes with a new feature that should make your life easier. With the latest version 1.2.5, you can now see the the revert reason if you use the new handleRevert option.
You can activate it easily by using web3.eth.handleRevert = true
. Now when you use call or send functions, precisely one of the following:
web3.eth.call()
web3.eth.sendTransaction()
contract.methods.myMethod(…).send(…)
contract.methods.myMethod(…).call(…)
you will see a new message like
Error: Your request got reverted with the following reason string: This is the revert reason!\
If you have to use sendSignedTransaction
, that is not yet implemented. However, you can work around that by catching a reverted transaction and then calling it.
try {
const result = await sendTxWithSendSignedTransaction()
console.log({ result })
} catch (error) {
TestContract.methods.myMethod(myParam).call({
from,
value,
}).then(result => { throw Error('unlikely to happen') })
.catch(revertReason => console.log({ revertReason }))
}
This will hopefully make it a lot easier trying to find out why transactions reverted in a live system. Incorporate this into your error logging system to make the most use of it.
Solidity Developer
As we've discussed last week, flash loans are a commonly used pattern for hacks. But what exactly are they and how are they implemented in the contracts? As of right now each protocol has its own way of implementing flash loans. With EIP-3156 we will get a standardized interface. The standard was...
With the recent Yearn vault v1 hack from just a few days ago, we can see a new pattern of hacks emerging: Get anonymous ETH via tornado.cash . Use the ETH to pay for the hack transaction(s). Use a flash loan to decrease capital requirements. Create some imbalances given the large capital and...
It's always best to learn with examples. So let's build a little online casino on the blockchain. We'll also make it secure enough to allow playing in really high stakes by adding a secure randomness generator. Let's discuss the overall design first. Designing the contract Before we program...