Checks-effect-interaction pattern
Why does it matter?
When calling an external address, for example when transferring tokens to another account, the calling contract is also transferring the control flow to the external entity.
Assuming this external entity is a smart contract as well, the external entity is now in charge of the control flow and can execute any inherent code within it.
This can leave your contract open to re-entrancy attacks.
Negative Example
wmdToken.transfer
could be maliciously coded to callwithdrawToken
again, and the contract would transfer more tokens out without modifying the user balance.The attacker would only have to be careful of stopping the loop before running out of gas, and it would drain your contract of iToken.
Solution
The high-level idea is as follows:
check & update the internal states (balances)
keep external interactions (function calls) to the last step
Positive Example
Further Readings
Last updated