This visual trace shows a reentrancy attack in a blockchain smart contract. The withdraw function sends Ether to the caller before updating the caller's balance. Because the balance update happens after the external call, a malicious contract can call withdraw again during the external call, draining funds multiple times. The execution table tracks each step, showing the balance remains unchanged during the reentrant call, allowing repeated withdrawals. The variable tracker highlights how balances[msg.sender] changes only after the reentrant call finishes, causing the vulnerability. Key moments clarify why the order of operations matters and how reentrancy happens. The quiz tests understanding of the balance changes and call flow. The snapshot summarizes the key rule: always update state before external calls to prevent reentrancy.