https://cointelegraph.com/explained/reentrancy-attacks-in-smart-contracts-explained