diff --git a/src/Wallet.sol b/src/Wallet.sol index 30e20aa..10f0de8 100644 --- a/src/Wallet.sol +++ b/src/Wallet.sol @@ -4,11 +4,15 @@ pragma solidity ^0.8.20; contract Wallet { address payable public owner; + event Deposit(address account, uint256 amount); + constructor () payable { owner = payable(msg.sender); } - receive() external payable {} + receive() external payable { + emit Deposit(msg.sender, msg.value); + } function withdraw(uint256 _amount) external { require(msg.sender == owner, "caller is not owner"); diff --git a/test/Wallet.t.sol b/test/Wallet.t.sol new file mode 100644 index 0000000..258eb76 --- /dev/null +++ b/test/Wallet.t.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.20; + +import "forge-std/Test.sol"; +import {Wallet} from "../src/Wallet.sol"; + +// Examples of deal and hoax +// deal(address, uint) - Set balance of address +// hoax(address, uint) - deal + prank, Sets up a prank and set balance + +contract WalletTest is Test { + Wallet public wallet; + + function setUp() public { + wallet = new Wallet{value: 1e18}(); + } + + function _send(uint256 amount) private { + (bool ok,) = address(wallet).call{value: amount}(""); + require(ok, "send ETH failed"); + } + + function testEthBalance() public { + console.log("ETH balance", address(this).balance / 1e18); + } + + function testSendEth() public { + uint bal = address(wallet).balance; + + // deal(address, uint) - Set balance of address + deal(address(1), 100); + assertEq(address(1).balance, 100); + + deal(address(1), 10); + assertEq(address(1).balance, 10); + + // hoax(address, uint) - deal + prank, Sets up a prank and set balance + deal(address(1), 123e18); + vm.prank(address(1)); + _send(123e18); + + hoax(address(1), 456e18); + _send(456e18); + + assertEq(address(wallet).balance, bal + 123e18 + 456e18); + } + +}