@@ -8,6 +8,8 @@ import {Test} from "forge-std/Test.sol";
88import {ForwardingAddress} from "../src/ForwardingAddress.sol " ;
99import {ForwardingAddressFactory} from "../src/ForwardingAddressFactory.sol " ;
1010
11+ contract NonPayableReceiver {}
12+
1113contract ForwardingAddressFactoryTest is Test {
1214 ForwardingAddressFactory public factory;
1315 ERC20Mock public erc20Mock;
@@ -24,6 +26,7 @@ contract ForwardingAddressFactoryTest is Test {
2426 address actualAddress = address (factory.createForwardingAddress (payable (receiver), salt));
2527
2628 assertEq (expectedAddr, actualAddress);
29+ assertEq (ForwardingAddress (payable (actualAddress)).receiver (), receiver);
2730 }
2831
2932 function testFuzz_createForwardingAddressAlreadyDeployed (bytes32 salt ) public {
@@ -36,37 +39,57 @@ contract ForwardingAddressFactoryTest is Test {
3639 assertEq (expectedAddr, actualAddress);
3740 }
3841
42+ function testFuzz_saltUniqueness (bytes32 salt1 , bytes32 salt2 ) public {
43+ vm.assume (salt1 != salt2);
44+ (address receiver ,) = makeAddrAndKey ("receiver " );
45+
46+ ForwardingAddress f1 = factory.createForwardingAddress (payable (receiver), salt1);
47+ ForwardingAddress f2 = factory.createForwardingAddress (payable (receiver), salt2);
48+
49+ assertNotEq (address (f1), address (f2));
50+ assertEq (f1.receiver (), f2.receiver ());
51+ }
52+
53+ function testFuzz_receiverUniqueness (bytes32 salt ) public {
54+ (address r1 ,) = makeAddrAndKey ("r1 " );
55+ (address r2 ,) = makeAddrAndKey ("r2 " );
56+ vm.assume (r1 != r2);
57+
58+ ForwardingAddress f1 = factory.createForwardingAddress (payable (r1), salt);
59+ ForwardingAddress f2 = factory.createForwardingAddress (payable (r2), salt);
60+
61+ assertNotEq (address (f1), address (f2));
62+ assertNotEq (f1.receiver (), f2.receiver ());
63+ }
64+
3965 function testFuzz_sweepForETH (bytes32 salt , uint256 amount ) public {
4066 (address receiver ,) = makeAddrAndKey ("receiver " );
4167
4268 address forwarder = factory.getAddress (receiver, salt);
43- uint256 initBalance = receiver.balance;
4469 vm.deal (forwarder, amount);
45- assertEq (receiver.balance, initBalance );
70+ assertEq (receiver.balance, 0 );
4671 assertEq (forwarder.balance, amount);
4772
4873 address [] memory tokens = new address [](1 );
4974 tokens[0 ] = address (0 );
5075 factory.sweepFor (payable (receiver), salt, tokens);
51- assertEq (receiver.balance, initBalance + amount);
76+ assertEq (receiver.balance, amount);
5277 assertEq (forwarder.balance, 0 );
5378 }
5479
5580 function testFuzz_sweepForFailedETHWithdraw (bytes32 salt , uint256 amount ) public {
56- // create2Deployer address, a known non payable contract
57- address receiver = 0x4e59b44847b379578588920cA78FbF26c0B4956C ;
81+ address receiver = address (new NonPayableReceiver ());
5882
5983 address forwarder = factory.getAddress (receiver, salt);
60- uint256 initBalance = receiver.balance;
6184 vm.deal (forwarder, amount);
62- assertEq (receiver.balance, initBalance );
85+ assertEq (receiver.balance, 0 );
6386 assertEq (forwarder.balance, amount);
6487
6588 address [] memory tokens = new address [](1 );
6689 tokens[0 ] = address (0 );
6790 vm.expectRevert (abi.encodeWithSelector (ForwardingAddress.FailedETHWithdraw.selector , receiver, tokens[0 ]));
6891 factory.sweepFor (payable (receiver), salt, tokens);
69- assertEq (receiver.balance, initBalance );
92+ assertEq (receiver.balance, 0 );
7093 assertEq (forwarder.balance, amount);
7194 }
7295
@@ -89,10 +112,9 @@ contract ForwardingAddressFactoryTest is Test {
89112 (address receiver ,) = makeAddrAndKey ("receiver " );
90113
91114 address forwarder = factory.getAddress (receiver, salt);
92- uint256 initBalance = receiver.balance;
93115 vm.deal (forwarder, amount);
94116 erc20Mock.mint (forwarder, amount);
95- assertEq (receiver.balance, initBalance );
117+ assertEq (receiver.balance, 0 );
96118 assertEq (forwarder.balance, amount);
97119 assertEq (IERC20 (address (erc20Mock)).balanceOf (receiver), 0 );
98120 assertEq (IERC20 (address (erc20Mock)).balanceOf (forwarder), amount);
@@ -101,7 +123,7 @@ contract ForwardingAddressFactoryTest is Test {
101123 tokens[0 ] = address (0 );
102124 tokens[1 ] = address (erc20Mock);
103125 factory.sweepFor (payable (receiver), salt, tokens);
104- assertEq (receiver.balance, initBalance + amount);
126+ assertEq (receiver.balance, amount);
105127 assertEq (forwarder.balance, 0 );
106128 assertEq (IERC20 (address (erc20Mock)).balanceOf (receiver), amount);
107129 assertEq (IERC20 (address (erc20Mock)).balanceOf (forwarder), 0 );
0 commit comments