Skip to content

Commit 1a5dd07

Browse files
committed
c
1 parent f0ae737 commit 1a5dd07

File tree

1 file changed

+33
-11
lines changed

1 file changed

+33
-11
lines changed

test/ForwardingAddressFactory.t.sol

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import {Test} from "forge-std/Test.sol";
88
import {ForwardingAddress} from "../src/ForwardingAddress.sol";
99
import {ForwardingAddressFactory} from "../src/ForwardingAddressFactory.sol";
1010

11+
contract NonPayableReceiver {}
12+
1113
contract 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

Comments
 (0)