Skip to content

Commit 657ac83

Browse files
committed
Change toggle to add/remove
1 parent f26e69e commit 657ac83

File tree

5 files changed

+48
-52
lines changed

5 files changed

+48
-52
lines changed

contracts/AngstromBalancer.sol

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -376,19 +376,21 @@ contract AngstromBalancer is IBatchRouter, BatchRouterHooks, OwnableAuthenticati
376376
***************************************************************************/
377377

378378
/**
379-
* @notice Register/unregister nodes that are allowed to unlock the system.
380-
* @param nodes The nodes to toggle (register/unregister)
379+
* @notice Register a node that is allowed to unlock the system.
380+
* @param node The node to register
381381
*/
382-
function toggleNodes(address[] memory nodes) external authenticate {
383-
for (uint256 i = 0; i < nodes.length; i++) {
384-
address node = nodes[i];
385-
_angstromValidatorNodes[node] = !_angstromValidatorNodes[node];
386-
if (_angstromValidatorNodes[node]) {
387-
emit NodeRegistered(node);
388-
} else {
389-
emit NodeUnregistered(node);
390-
}
391-
}
382+
function addNode(address node) external authenticate {
383+
_angstromValidatorNodes[node] = true;
384+
emit NodeRegistered(node);
385+
}
386+
387+
/**
388+
* @notice Unregister a node that is no longer allowed to unlock the system.
389+
* @param node The node to unregister
390+
*/
391+
function removeNode(address node) external authenticate {
392+
_angstromValidatorNodes[node] = false;
393+
emit NodeUnregistered(node);
392394
}
393395

394396
/***************************************************************************

test/foundry/AngstromBalancerUnit.t.sol

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,29 @@ import { BaseAngstromTest } from "./utils/BaseAngstromTest.sol";
1515
contract AngstromBalancerUnitTest is BaseAngstromTest {
1616
using ArrayHelpers for *;
1717

18-
function testToggleNodesIsAuthenticated() public {
18+
function testAddNodeIsAuthenticated() public {
1919
vm.prank(alice);
2020
vm.expectRevert(IAuthentication.SenderNotAllowed.selector);
21-
angstromBalancer.toggleNodes([bob].toMemoryArray());
21+
angstromBalancer.addNode(bob);
2222
}
2323

24-
function testToggleNodes() public {
25-
makeAngstromNode(bob);
26-
assertTrue(angstromBalancer.isRegisteredNode(bob), "Bob is not a node");
24+
function testRemoveNodeIsAuthenticated() public {
25+
vm.prank(alice);
26+
vm.expectRevert(IAuthentication.SenderNotAllowed.selector);
27+
angstromBalancer.removeNode(bob);
2728
}
2829

2930
function testAddAndRemoveNodes() public {
30-
makeAngstromNodes([bob, alice].toMemoryArray());
31-
assertTrue(angstromBalancer.isRegisteredNode(bob), "Bob is not a node");
32-
assertTrue(angstromBalancer.isRegisteredNode(alice), "Alice is not a node");
33-
34-
vm.prank(admin);
35-
angstromBalancer.toggleNodes([bob].toMemoryArray());
31+
addAngstromNode(bob);
32+
addAngstromNode(alice);
33+
removeAngstromNode(bob);
3634

3735
assertFalse(angstromBalancer.isRegisteredNode(bob), "Bob is still a node");
3836
assertTrue(angstromBalancer.isRegisteredNode(alice), "Alice is not a node after bob was removed");
3937
}
4038

4139
function testUnlockAngstromSetsLastUnlockBlockNumber() public {
42-
makeAngstromNode(bob);
40+
addAngstromNode(bob);
4341

4442
assertEq(angstromBalancer.getLastUnlockBlockNumber(), 0, "Last unlock block number is not 0");
4543

@@ -51,8 +49,4 @@ contract AngstromBalancerUnitTest is BaseAngstromTest {
5149
"Last unlock block number is not the current block number"
5250
);
5351
}
54-
55-
function testGetVault() public view {
56-
assertEq(address(angstromBalancer.getVault()), address(vault), "Wrong vault address");
57-
}
5852
}

test/foundry/AngstromHook.t.sol

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,15 @@ contract AngstromHookTest is BaseAngstromTest {
5151
// If the signature is invalid, the hook reverts (in this case, signer and key do not match).
5252
(, bytes memory userData) = generateSignatureAndUserData(bob, aliceKey);
5353

54-
vm.prank(admin);
55-
angstromBalancer.toggleNodes([bob].toMemoryArray());
54+
addAngstromNode(bob);
5655

5756
vm.expectRevert(AngstromBalancer.InvalidSignature.selector);
5857
vm.prank(bob);
5958
router.swapSingleTokenExactIn(pool, dai, usdc, 1e18, 0, MAX_UINT256, false, userData);
6059
}
6160

6261
function testOnBeforeSwapSucceedsAndSetBlockNumber() public {
63-
makeAngstromNode(bob);
62+
addAngstromNode(bob);
6463

6564
vm.prank(bob);
6665
router.swapSingleTokenExactIn(pool, dai, usdc, 1e18, 0, MAX_UINT256, false, bobUserData);
@@ -72,7 +71,7 @@ contract AngstromHookTest is BaseAngstromTest {
7271
}
7372

7473
function testOnlyOncePerBlock() public {
75-
makeAngstromNode(bob);
74+
addAngstromNode(bob);
7675

7776
vm.prank(bob);
7877
angstromBalancer.unlockWithEmptyAttestation(bob, bobSignature);
@@ -119,15 +118,15 @@ contract AngstromHookTest is BaseAngstromTest {
119118
function testOnBeforeAddLiquidityUnbalancedInvalidSignature() public {
120119
(, bytes memory userData) = generateSignatureAndUserData(alice, bobKey);
121120

122-
makeAngstromNode(alice);
121+
addAngstromNode(alice);
123122

124123
vm.expectRevert(AngstromBalancer.InvalidSignature.selector);
125124
vm.prank(alice);
126125
router.addLiquidityUnbalanced(pool, [FixedPoint.ONE, FixedPoint.ONE].toMemoryArray(), 1e18, false, userData);
127126
}
128127

129128
function testOnBeforeAddLiquidityUnbalancedSucceedsAndSetBlockNumber() public {
130-
makeAngstromNode(alice);
129+
addAngstromNode(alice);
131130

132131
vm.prank(alice);
133132
uint256 expectedBptAmountOut = router.addLiquidityUnbalanced(
@@ -181,15 +180,15 @@ contract AngstromHookTest is BaseAngstromTest {
181180
function testOnBeforeRemoveLiquidityUnbalancedInvalidSignature() public {
182181
(, bytes memory userData) = generateSignatureAndUserData(lp, bobKey);
183182

184-
makeAngstromNode(lp);
183+
addAngstromNode(lp);
185184

186185
vm.expectRevert(AngstromBalancer.InvalidSignature.selector);
187186
vm.prank(lp);
188187
router.removeLiquiditySingleTokenExactIn(pool, 1e18, dai, 0.1e18, false, userData);
189188
}
190189

191190
function testOnBeforeRemoveLiquidityUnbalancedSucceedsAndSetBlockNumber() public {
192-
makeAngstromNode(lp);
191+
addAngstromNode(lp);
193192

194193
Balances memory balancesBefore = getBalances(lp);
195194

test/foundry/AngstromRouter.t.sol

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ contract AngstromRouterTest is BaseAngstromTest {
3636
}
3737

3838
function testSwapExactInAlreadyUnlocked() public {
39-
makeAngstromNode(bob);
39+
addAngstromNode(bob);
4040

4141
SwapPathExactAmountIn[] memory paths;
4242

@@ -48,7 +48,7 @@ contract AngstromRouterTest is BaseAngstromTest {
4848
}
4949

5050
function testSwapExactInUnlocksAngstrom() public {
51-
makeAngstromNode(bob);
51+
addAngstromNode(bob);
5252

5353
SwapPathExactAmountIn[] memory paths;
5454

@@ -76,7 +76,7 @@ contract AngstromRouterTest is BaseAngstromTest {
7676
) = angstromBalancer.querySwapExactIn(paths, bob, bytes(""));
7777
vm.revertTo(snapId);
7878

79-
makeAngstromNode(bob);
79+
addAngstromNode(bob);
8080

8181
vm.prank(bob);
8282
(uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut) = angstromBalancer
@@ -100,7 +100,7 @@ contract AngstromRouterTest is BaseAngstromTest {
100100
}
101101

102102
function testSwapExactOutAlreadyUnlocked() public {
103-
makeAngstromNode(bob);
103+
addAngstromNode(bob);
104104

105105
SwapPathExactAmountOut[] memory paths;
106106

@@ -112,7 +112,7 @@ contract AngstromRouterTest is BaseAngstromTest {
112112
}
113113

114114
function testSwapExactOutUnlocksRouter() public {
115-
makeAngstromNode(bob);
115+
addAngstromNode(bob);
116116

117117
SwapPathExactAmountOut[] memory paths;
118118
vm.prank(bob);
@@ -144,7 +144,7 @@ contract AngstromRouterTest is BaseAngstromTest {
144144
) = angstromBalancer.querySwapExactOut(paths, bob, bytes(""));
145145
vm.revertTo(snapId);
146146

147-
makeAngstromNode(bob);
147+
addAngstromNode(bob);
148148

149149
vm.prank(bob);
150150
(uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn) = angstromBalancer

test/foundry/utils/BaseAngstromTest.sol

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ contract BaseAngstromTest is BaseVaultTest {
3535
}
3636

3737
function createHook() internal override returns (address) {
38+
vm.startPrank(admin);
3839
if (reusingArtifacts) {
3940
angstromBalancer = AngstromBalancerMock(
4041
payable(
@@ -47,27 +48,27 @@ contract BaseAngstromTest is BaseVaultTest {
4748
} else {
4849
angstromBalancer = new AngstromBalancerMock(vault, weth, permit2, "AngstromBalancer Mock v1");
4950
}
50-
authorizer.grantRole(angstromBalancer.getActionId(AngstromBalancer.toggleNodes.selector), admin);
51+
vm.stopPrank();
5152

5253
return address(angstromBalancer);
5354
}
5455

55-
function makeAngstromNode(address account) internal {
56-
_ensureEventTogglingNode(account);
56+
function addAngstromNode(address account) internal {
57+
vm.expectEmit();
58+
emit AngstromBalancer.NodeRegistered(account);
5759

5860
vm.prank(admin);
59-
angstromBalancer.toggleNodes([account].toMemoryArray());
61+
angstromBalancer.addNode(account);
6062
assertTrue(angstromBalancer.isRegisteredNode(account), "Node registration failed");
6163
}
6264

63-
function makeAngstromNodes(address[] memory accounts) internal {
64-
for (uint256 i = 0; i < accounts.length; i++) {
65-
address account = accounts[i];
66-
_ensureEventTogglingNode(account);
67-
}
65+
function removeAngstromNode(address account) internal {
66+
vm.expectEmit();
67+
emit AngstromBalancer.NodeUnregistered(account);
6868

6969
vm.prank(admin);
70-
angstromBalancer.toggleNodes(accounts);
70+
angstromBalancer.removeNode(account);
71+
assertFalse(angstromBalancer.isRegisteredNode(account), "Node registration failed");
7172
}
7273

7374
function generateSignatureAndUserData(

0 commit comments

Comments
 (0)