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