From ea504faca12bdf19f4c98946a4173167a73fba2d Mon Sep 17 00:00:00 2001 From: royvardhan Date: Thu, 30 Jan 2025 18:58:54 +0530 Subject: [PATCH 1/5] feat: replace setExecutor with batchSetExecutor --- foundry/src/TychoRouter.sol | 10 ++++++---- foundry/test/Constants.sol | 7 +++++-- foundry/test/TychoRouter.t.sol | 27 +++++++++++++++++++++++---- foundry/test/TychoRouterTestSetup.sol | 6 ++++-- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/foundry/src/TychoRouter.sol b/foundry/src/TychoRouter.sol index 7b7d674..792989d 100644 --- a/foundry/src/TychoRouter.sol +++ b/foundry/src/TychoRouter.sol @@ -235,13 +235,15 @@ contract TychoRouter is /** * @dev Entrypoint to add or replace an approved executor contract address - * @param target address of the executor contract + * @param targets address of the executor contract */ - function setExecutor(address target) + function batchSetExecutor(address[] memory targets) external onlyRole(EXECUTOR_SETTER_ROLE) { - _setExecutor(target); + for (uint256 i = 0; i < targets.length; i++) { + _setExecutor(targets[i]); + } } /** @@ -394,4 +396,4 @@ contract TychoRouter is return (amountOwed, tokenOwed); } -} +} \ No newline at end of file diff --git a/foundry/test/Constants.sol b/foundry/test/Constants.sol index 8776c7d..6f2c361 100644 --- a/foundry/test/Constants.sol +++ b/foundry/test/Constants.sol @@ -16,6 +16,7 @@ contract Constants is Test { // Dummy contracts address DUMMY = makeAddr("dummy"); + address DUMMY2 = makeAddr("dummy2"); address PAUSER = makeAddr("pauser"); address UNPAUSER = makeAddr("unpauser"); @@ -37,6 +38,8 @@ contract Constants is Test { */ function deployDummyContract() internal { bytes memory minimalBytecode = hex"01"; // Single-byte bytecode - vm.etch(DUMMY, minimalBytecode); // Deploy minimal bytecode + // Deploy minimal bytecode + vm.etch(DUMMY, minimalBytecode); + vm.etch(DUMMY2, minimalBytecode); } -} +} \ No newline at end of file diff --git a/foundry/test/TychoRouter.t.sol b/foundry/test/TychoRouter.t.sol index d1a82c7..3e3e94d 100644 --- a/foundry/test/TychoRouter.t.sol +++ b/foundry/test/TychoRouter.t.sol @@ -20,15 +20,32 @@ contract TychoRouterTest is TychoRouterTestSetup { ); function testSetExecutorValidRole() public { + // Set single executor + address[] memory executors = new address[](1); + executors[0] = DUMMY; vm.startPrank(EXECUTOR_SETTER); - tychoRouter.setExecutor(DUMMY); + tychoRouter.batchSetExecutor(executors); vm.stopPrank(); assert(tychoRouter.executors(DUMMY) == true); } + function testSetExecutorMultipleValidRole() public { + // Set multiple executors + address[] memory executors = new address[](2); + executors[0] = DUMMY; + executors[1] = DUMMY2; + vm.startPrank(EXECUTOR_SETTER); + tychoRouter.batchSetExecutor(executors); + vm.stopPrank(); + assert(tychoRouter.executors(DUMMY) == true); + assert(tychoRouter.executors(DUMMY2) == true); + } + function testRemoveExecutorValidRole() public { vm.startPrank(EXECUTOR_SETTER); - tychoRouter.setExecutor(DUMMY); + address[] memory executors = new address[](1); + executors[0] = DUMMY; + tychoRouter.batchSetExecutor(executors); tychoRouter.removeExecutor(DUMMY); vm.stopPrank(); assert(tychoRouter.executors(DUMMY) == false); @@ -41,7 +58,9 @@ contract TychoRouterTest is TychoRouterTestSetup { function testSetExecutorMissingSetterRole() public { vm.expectRevert(); - tychoRouter.setExecutor(DUMMY); + address[] memory executors = new address[](1); + executors[0] = DUMMY; + tychoRouter.batchSetExecutor(executors); } function testSetVerifierValidRole() public { @@ -606,4 +625,4 @@ contract TychoRouterTest is TychoRouterTestSetup { vm.stopPrank(); } -} +} \ No newline at end of file diff --git a/foundry/test/TychoRouterTestSetup.sol b/foundry/test/TychoRouterTestSetup.sol index 97b653d..9e0ccc0 100644 --- a/foundry/test/TychoRouterTestSetup.sol +++ b/foundry/test/TychoRouterTestSetup.sol @@ -56,7 +56,9 @@ contract TychoRouterTestSetup is Test, Constants { usv2Executor = new UniswapV2Executor(); vm.startPrank(EXECUTOR_SETTER); - tychoRouter.setExecutor(address(usv2Executor)); + address[] memory executors = new address[](1); + executors[0] = address(usv2Executor); + tychoRouter.batchSetExecutor(executors); vm.stopPrank(); vm.startPrank(BOB); @@ -190,4 +192,4 @@ contract TychoRouterTestSetup is Test, Constants { ) internal pure returns (bytes memory) { return abi.encodePacked(tokenIn, target, receiver, zero2one); } -} +} \ No newline at end of file From 719a15c0e52868e46883263b219277b6b22432fb Mon Sep 17 00:00:00 2001 From: royvardhan Date: Thu, 30 Jan 2025 19:00:15 +0530 Subject: [PATCH 2/5] chore: fmt --- foundry/src/TychoRouter.sol | 2 +- foundry/test/Constants.sol | 2 +- foundry/test/TychoRouter.t.sol | 2 +- foundry/test/TychoRouterTestSetup.sol | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/foundry/src/TychoRouter.sol b/foundry/src/TychoRouter.sol index 792989d..ed2ebe3 100644 --- a/foundry/src/TychoRouter.sol +++ b/foundry/src/TychoRouter.sol @@ -396,4 +396,4 @@ contract TychoRouter is return (amountOwed, tokenOwed); } -} \ No newline at end of file +} diff --git a/foundry/test/Constants.sol b/foundry/test/Constants.sol index 6f2c361..8cad6fb 100644 --- a/foundry/test/Constants.sol +++ b/foundry/test/Constants.sol @@ -42,4 +42,4 @@ contract Constants is Test { vm.etch(DUMMY, minimalBytecode); vm.etch(DUMMY2, minimalBytecode); } -} \ No newline at end of file +} diff --git a/foundry/test/TychoRouter.t.sol b/foundry/test/TychoRouter.t.sol index 3e3e94d..017a594 100644 --- a/foundry/test/TychoRouter.t.sol +++ b/foundry/test/TychoRouter.t.sol @@ -625,4 +625,4 @@ contract TychoRouterTest is TychoRouterTestSetup { vm.stopPrank(); } -} \ No newline at end of file +} diff --git a/foundry/test/TychoRouterTestSetup.sol b/foundry/test/TychoRouterTestSetup.sol index 9e0ccc0..dc5e713 100644 --- a/foundry/test/TychoRouterTestSetup.sol +++ b/foundry/test/TychoRouterTestSetup.sol @@ -192,4 +192,4 @@ contract TychoRouterTestSetup is Test, Constants { ) internal pure returns (bytes memory) { return abi.encodePacked(tokenIn, target, receiver, zero2one); } -} \ No newline at end of file +} From c65306202783ec80e8086423a4cec4261728da03 Mon Sep 17 00:00:00 2001 From: royvardhan Date: Thu, 30 Jan 2025 19:29:24 +0530 Subject: [PATCH 3/5] feat: rename batchSetExecutor to setExecutors --- foundry/src/TychoRouter.sol | 2 +- foundry/test/TychoRouter.t.sol | 12 ++++++------ foundry/test/TychoRouterTestSetup.sol | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/foundry/src/TychoRouter.sol b/foundry/src/TychoRouter.sol index ed2ebe3..93fc8ee 100644 --- a/foundry/src/TychoRouter.sol +++ b/foundry/src/TychoRouter.sol @@ -237,7 +237,7 @@ contract TychoRouter is * @dev Entrypoint to add or replace an approved executor contract address * @param targets address of the executor contract */ - function batchSetExecutor(address[] memory targets) + function setExecutors(address[] memory targets) external onlyRole(EXECUTOR_SETTER_ROLE) { diff --git a/foundry/test/TychoRouter.t.sol b/foundry/test/TychoRouter.t.sol index 017a594..d37c202 100644 --- a/foundry/test/TychoRouter.t.sol +++ b/foundry/test/TychoRouter.t.sol @@ -19,12 +19,12 @@ contract TychoRouterTest is TychoRouterTestSetup { address indexed token, uint256 amount, address indexed receiver ); - function testSetExecutorValidRole() public { + function testSetExecutorsValidRole() public { // Set single executor address[] memory executors = new address[](1); executors[0] = DUMMY; vm.startPrank(EXECUTOR_SETTER); - tychoRouter.batchSetExecutor(executors); + tychoRouter.setExecutors(executors); vm.stopPrank(); assert(tychoRouter.executors(DUMMY) == true); } @@ -35,7 +35,7 @@ contract TychoRouterTest is TychoRouterTestSetup { executors[0] = DUMMY; executors[1] = DUMMY2; vm.startPrank(EXECUTOR_SETTER); - tychoRouter.batchSetExecutor(executors); + tychoRouter.setExecutors(executors); vm.stopPrank(); assert(tychoRouter.executors(DUMMY) == true); assert(tychoRouter.executors(DUMMY2) == true); @@ -45,7 +45,7 @@ contract TychoRouterTest is TychoRouterTestSetup { vm.startPrank(EXECUTOR_SETTER); address[] memory executors = new address[](1); executors[0] = DUMMY; - tychoRouter.batchSetExecutor(executors); + tychoRouter.setExecutors(executors); tychoRouter.removeExecutor(DUMMY); vm.stopPrank(); assert(tychoRouter.executors(DUMMY) == false); @@ -56,11 +56,11 @@ contract TychoRouterTest is TychoRouterTestSetup { tychoRouter.removeExecutor(BOB); } - function testSetExecutorMissingSetterRole() public { + function testSetExecutorsMissingSetterRole() public { vm.expectRevert(); address[] memory executors = new address[](1); executors[0] = DUMMY; - tychoRouter.batchSetExecutor(executors); + tychoRouter.setExecutors(executors); } function testSetVerifierValidRole() public { diff --git a/foundry/test/TychoRouterTestSetup.sol b/foundry/test/TychoRouterTestSetup.sol index dc5e713..0470bad 100644 --- a/foundry/test/TychoRouterTestSetup.sol +++ b/foundry/test/TychoRouterTestSetup.sol @@ -58,7 +58,7 @@ contract TychoRouterTestSetup is Test, Constants { vm.startPrank(EXECUTOR_SETTER); address[] memory executors = new address[](1); executors[0] = address(usv2Executor); - tychoRouter.batchSetExecutor(executors); + tychoRouter.setExecutors(executors); vm.stopPrank(); vm.startPrank(BOB); From bd49c86d86ef82bfb8ec083bd559dd4e75ea0486 Mon Sep 17 00:00:00 2001 From: Harsh Vardhan Roy <42067944+royvardhan@users.noreply.github.com> Date: Thu, 30 Jan 2025 20:53:28 +0530 Subject: [PATCH 4/5] Update TychoRouter.t.sol Co-authored-by: Tamara --- foundry/test/TychoRouter.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundry/test/TychoRouter.t.sol b/foundry/test/TychoRouter.t.sol index d37c202..5fa72ac 100644 --- a/foundry/test/TychoRouter.t.sol +++ b/foundry/test/TychoRouter.t.sol @@ -29,7 +29,7 @@ contract TychoRouterTest is TychoRouterTestSetup { assert(tychoRouter.executors(DUMMY) == true); } - function testSetExecutorMultipleValidRole() public { + function testSetExecutorsValidRole() public { // Set multiple executors address[] memory executors = new address[](2); executors[0] = DUMMY; From 24e95b1206d403a9c7b2c82b12bd14c3fc7ee6c4 Mon Sep 17 00:00:00 2001 From: royvardhan Date: Thu, 30 Jan 2025 21:01:28 +0530 Subject: [PATCH 5/5] fix: rm redundant test --- foundry/test/Constants.sol | 2 ++ foundry/test/TychoRouter.t.sol | 12 +++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/foundry/test/Constants.sol b/foundry/test/Constants.sol index 8cad6fb..c1b5d57 100644 --- a/foundry/test/Constants.sol +++ b/foundry/test/Constants.sol @@ -17,6 +17,7 @@ contract Constants is Test { // Dummy contracts address DUMMY = makeAddr("dummy"); address DUMMY2 = makeAddr("dummy2"); + address DUMMY3 = makeAddr("dummy3"); address PAUSER = makeAddr("pauser"); address UNPAUSER = makeAddr("unpauser"); @@ -41,5 +42,6 @@ contract Constants is Test { // Deploy minimal bytecode vm.etch(DUMMY, minimalBytecode); vm.etch(DUMMY2, minimalBytecode); + vm.etch(DUMMY3, minimalBytecode); } } diff --git a/foundry/test/TychoRouter.t.sol b/foundry/test/TychoRouter.t.sol index 5fa72ac..5d8ebea 100644 --- a/foundry/test/TychoRouter.t.sol +++ b/foundry/test/TychoRouter.t.sol @@ -27,18 +27,16 @@ contract TychoRouterTest is TychoRouterTestSetup { tychoRouter.setExecutors(executors); vm.stopPrank(); assert(tychoRouter.executors(DUMMY) == true); - } - function testSetExecutorsValidRole() public { // Set multiple executors - address[] memory executors = new address[](2); - executors[0] = DUMMY; - executors[1] = DUMMY2; + address[] memory executors2 = new address[](2); + executors2[0] = DUMMY2; + executors2[1] = DUMMY3; vm.startPrank(EXECUTOR_SETTER); - tychoRouter.setExecutors(executors); + tychoRouter.setExecutors(executors2); vm.stopPrank(); - assert(tychoRouter.executors(DUMMY) == true); assert(tychoRouter.executors(DUMMY2) == true); + assert(tychoRouter.executors(DUMMY3) == true); } function testRemoveExecutorValidRole() public {