Skip to content

Commit 4610f5d

Browse files
committed
deposit manager fixes + test
1 parent dc723c7 commit 4610f5d

2 files changed

Lines changed: 137 additions & 2 deletions

File tree

contracts/contracts/core/DepositManager.sol

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
pragma solidity 0.8.26;
33

44
import {IBidderRegistry} from "../interfaces/IBidderRegistry.sol";
5+
import {Errors} from "../utils/Errors.sol";
56

67
contract DepositManager {
78

89
mapping(address => uint256) public targetDeposits;
910
address public immutable bidderRegistry;
1011
uint256 public immutable minBalance;
11-
error NotThisEOA();
12+
error NotThisEOA(address msgSender, address thisAddress);
1213

1314
event TargetDepositSet(address indexed provider, uint256 amount);
1415
event TargetDepositDoesNotExist(address indexed provider);
@@ -23,7 +24,7 @@ contract DepositManager {
2324
}
2425

2526
modifier onlyThisEOA() {
26-
require(msg.sender == address(this), NotThisEOA());
27+
require(msg.sender == address(this), NotThisEOA(msg.sender, address(this)));
2728
_;
2829
}
2930

@@ -64,6 +65,10 @@ contract DepositManager {
6465
emit DepositToppedUp(provider, needed);
6566
}
6667

68+
fallback() external payable {
69+
revert Errors.InvalidFallback();
70+
}
71+
6772
receive() external payable {
6873
// Eth transfers allowed.
6974
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
// SPDX-License-Identifier: UNLICENSED
2+
pragma solidity 0.8.26;
3+
4+
import "forge-std/Test.sol";
5+
import {DepositManager} from "../../contracts/core/DepositManager.sol";
6+
import {IBidderRegistry} from "../../contracts/interfaces/IBidderRegistry.sol";
7+
import {BidderRegistry} from "../../contracts/core/BidderRegistry.sol";
8+
import {Errors} from "../../contracts/utils/Errors.sol";
9+
10+
contract DepositManagerTest is Test {
11+
uint256 public constant ALICE_PK = uint256(0xA11CE);
12+
uint256 public constant BOB_PK = uint256(0xB0B);
13+
address public alice = payable(vm.addr(ALICE_PK));
14+
address public bob = payable(vm.addr(BOB_PK));
15+
16+
DepositManager private depositManagerImpl;
17+
18+
function setUp() public {
19+
depositManagerImpl = new DepositManager(address(new BidderRegistry()), 0.01 ether);
20+
vm.deal(alice, 10 ether);
21+
vm.deal(bob, 10 ether);
22+
vm.signAndAttachDelegation(address(depositManagerImpl), ALICE_PK);
23+
vm.signAndAttachDelegation(address(depositManagerImpl), BOB_PK);
24+
}
25+
26+
function testCodeAtAddress() public view {
27+
bytes32 expectedCodehash = keccak256(abi.encodePacked(hex"ef0100", address(depositManagerImpl)));
28+
assertEq(alice.codehash, expectedCodehash);
29+
assertEq(alice.code.length, 23);
30+
}
31+
32+
function testFallbackRevert() public {
33+
bytes memory badData = abi.encodeWithSelector(
34+
DepositManager.setTargetDeposit.selector,
35+
address(0x55555),
36+
1 ether,
37+
1 ether,
38+
1 ether
39+
);
40+
vm.prank(alice);
41+
(bool success, ) = address(depositManagerImpl).call{value: 1 ether}(badData);
42+
assertFalse(success);
43+
}
44+
45+
function testReceiveNoRevert() public {
46+
uint256 beforeBalance = alice.balance;
47+
vm.prank(bob);
48+
(bool success, ) = address(alice).call{value: 1 ether}("");
49+
assertTrue(success);
50+
uint256 afterBalance = alice.balance;
51+
assertEq(afterBalance, beforeBalance + 1 ether, "balance not increased");
52+
}
53+
54+
function testSetTargetDeposit() public {
55+
address provider = vm.addr(0x55555);
56+
57+
uint256 aliceTarget = 1 ether;
58+
uint256 bobTarget = 2 ether;
59+
60+
vm.expectEmit(true, true, true, true);
61+
emit DepositManager.TargetDepositSet(provider, aliceTarget);
62+
vm.prank(alice);
63+
DepositManager(payable(alice)).setTargetDeposit(provider, aliceTarget);
64+
65+
uint256 aliceStored = DepositManager(payable(alice)).targetDeposits(provider);
66+
assertEq(aliceStored, aliceTarget, "target deposit not set for alice");
67+
uint256 bobStored = DepositManager(payable(bob)).targetDeposits(provider);
68+
assertEq(bobStored, 0, "target deposit not set for bob");
69+
70+
vm.expectEmit(true, true, true, true);
71+
emit DepositManager.TargetDepositSet(provider, bobTarget);
72+
vm.prank(bob);
73+
DepositManager(payable(bob)).setTargetDeposit(provider, bobTarget);
74+
75+
aliceStored = DepositManager(payable(alice)).targetDeposits(provider);
76+
assertEq(aliceStored, aliceTarget, "target deposit changed for alice");
77+
bobStored = DepositManager(payable(bob)).targetDeposits(provider);
78+
assertEq(bobStored, bobTarget, "target deposit not set for bob");
79+
80+
uint256 newTarget = 3 ether;
81+
vm.expectRevert(abi.encodeWithSelector(DepositManager.NotThisEOA.selector, bob, alice));
82+
vm.prank(bob);
83+
DepositManager(payable(alice)).setTargetDeposit(provider, newTarget);
84+
85+
vm.expectEmit(true, true, true, true);
86+
emit DepositManager.TargetDepositSet(provider, newTarget);
87+
vm.prank(bob);
88+
DepositManager(payable(bob)).setTargetDeposit(provider, newTarget);
89+
bobStored = DepositManager(payable(bob)).targetDeposits(provider);
90+
assertEq(bobStored, newTarget, "target deposit not set for bob");
91+
92+
uint256 newTargetForNewProvider = 4 ether;
93+
address newProvider = vm.addr(0x123);
94+
95+
vm.expectEmit(true, true, true, true);
96+
emit DepositManager.TargetDepositSet(newProvider, newTargetForNewProvider);
97+
vm.prank(alice);
98+
DepositManager(payable(alice)).setTargetDeposit(newProvider, newTargetForNewProvider);
99+
100+
uint256 aliceStoredForNewProvider = DepositManager(payable(alice)).targetDeposits(newProvider);
101+
assertEq(aliceStoredForNewProvider, newTargetForNewProvider, "target deposit not set for alice");
102+
aliceStored = DepositManager(payable(alice)).targetDeposits(provider);
103+
assertEq(aliceStored, aliceTarget, "target deposit changed for alice");
104+
}
105+
106+
function testSetTargetDeposit_RevertNotThisEOA() public {
107+
address provider = vm.addr(0x55555);
108+
uint256 target = 7 ether;
109+
110+
vm.expectRevert(abi.encodeWithSelector(DepositManager.NotThisEOA.selector, provider, alice));
111+
vm.prank(provider);
112+
DepositManager(payable(alice)).setTargetDeposit(provider, target);
113+
114+
vm.expectRevert(abi.encodeWithSelector(DepositManager.NotThisEOA.selector, alice, bob));
115+
vm.prank(alice);
116+
DepositManager(payable(bob)).setTargetDeposit(provider, target);
117+
118+
vm.expectRevert(abi.encodeWithSelector(DepositManager.NotThisEOA.selector, bob, alice));
119+
vm.prank(bob);
120+
DepositManager(payable(alice)).setTargetDeposit(provider, target);
121+
122+
vm.expectRevert(abi.encodeWithSelector(DepositManager.NotThisEOA.selector, address(depositManagerImpl), alice));
123+
vm.prank(address(depositManagerImpl));
124+
DepositManager(payable(alice)).setTargetDeposit(provider, target);
125+
126+
vm.expectRevert(abi.encodeWithSelector(DepositManager.NotThisEOA.selector, alice, address(depositManagerImpl)));
127+
vm.prank(alice);
128+
DepositManager(payable(address(depositManagerImpl))).setTargetDeposit(provider, target);
129+
}
130+
}

0 commit comments

Comments
 (0)