Mishandling of ETH (Má gestão de ETH)
contract VulnerableContract {
mapping(address => uint) public balances;
function deposit() external payable {
balances[msg.sender] += msg.value;
}
function withdraw(uint _amount) external {
require(balances[msg.sender] >= _amount, "Insufficient balance");
balances[msg.sender] -= _amount;
msg.sender.transfer(_amount); // Vulnerable to failure if the recipient contract consumes too much gas
}
}function withdraw(uint _amount) external { require(balances[msg.sender] >= _amount, "Insufficient balance"); balances[msg.sender] -= _amount; (bool success, ) = msg.sender.call{value: _amount}(""); require(success, "Transfer failed"); }function withdraw(uint _amount) external { require(balances[msg.sender] >= _amount, "Insufficient balance"); balances[msg.sender] -= _amount; // Actualizar el estado antes de la llamada externa (bool success, ) = msg.sender.call{value: _amount}(""); require(success, "Transfer failed"); }receive() external payable { balances[msg.sender] += msg.value; }function emergencyWithdraw() external onlyOwner { payable(owner).transfer(address(this).balance); }
Last updated