pragma solidity ^0.8.29; contract TokenDeposit { mapping(address => uint256) public balances; event Deposit(address indexed from, uint256 amount); event Withdrawal(address indexed to, uint256 amount); function deposit() public payable { require(msg.value > 0, "Deposit amount must be greater than zero"); balances[msg.sender] += msg.value; emit Deposit(msg.sender, msg.value); } function withdraw(uint256 amount) public { require(balances[msg.sender] >= amount, "Insufficient balance"); balances[msg.sender] -= amount; payable(msg.sender).transfer(amount); emit Withdrawal(msg.sender, amount); } function getBalance() public view returns (uint256) { return balances[msg.sender]; } }