feat: add pause/unpause methods

This commit is contained in:
royvardhan
2025-01-24 18:12:56 +05:30
parent 70509f547d
commit c982ed99e8
4 changed files with 49 additions and 2 deletions

View File

@@ -7,6 +7,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@permit2/src/interfaces/IAllowanceTransfer.sol"; import "@permit2/src/interfaces/IAllowanceTransfer.sol";
import "./SwapExecutionDispatcher.sol"; import "./SwapExecutionDispatcher.sol";
import "./CallbackVerificationDispatcher.sol"; import "./CallbackVerificationDispatcher.sol";
import "@openzeppelin/contracts/utils/Pausable.sol";
error TychoRouter__WithdrawalFailed(); error TychoRouter__WithdrawalFailed();
error TychoRouter__AddressZero(); error TychoRouter__AddressZero();
@@ -16,7 +17,8 @@ error TychoRouter__NonContractVerifier();
contract TychoRouter is contract TychoRouter is
AccessControl, AccessControl,
SwapExecutionDispatcher, SwapExecutionDispatcher,
CallbackVerificationDispatcher CallbackVerificationDispatcher,
Pausable
{ {
IAllowanceTransfer public immutable permit2; IAllowanceTransfer public immutable permit2;
@@ -29,6 +31,8 @@ contract TychoRouter is
0xe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f88182060; 0xe6ad9a47fbda1dc18de1eb5eeb7d935e5e81b4748f3cfc61e233e64f88182060;
bytes32 public constant PAUSER_ROLE = bytes32 public constant PAUSER_ROLE =
0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a; 0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a;
bytes32 public constant UNPAUSER_ROLE =
0x427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a;
bytes32 public constant FUND_RESCUER_ROLE = bytes32 public constant FUND_RESCUER_ROLE =
0x912e45d663a6f4cc1d0491d8f046e06c616f40352565ea1cdb86a0e1aaefa41b; 0x912e45d663a6f4cc1d0491d8f046e06c616f40352565ea1cdb86a0e1aaefa41b;
@@ -62,6 +66,20 @@ contract TychoRouter is
// TODO execute generic callback // TODO execute generic callback
} }
/**
* @dev Pauses the contract
*/
function pause() external onlyRole(PAUSER_ROLE) {
_pause();
}
/**
* @dev Unpauses the contract
*/
function unpause() external onlyRole(UNPAUSER_ROLE) {
_unpause();
}
/** /**
* @dev Executes a swap graph supporting internal splits token amount * @dev Executes a swap graph supporting internal splits token amount
* splits, checking that the user gets more than minUserAmount of buyToken. * splits, checking that the user gets more than minUserAmount of buyToken.
@@ -76,7 +94,7 @@ contract TychoRouter is
bytes calldata swaps, bytes calldata swaps,
IAllowanceTransfer.PermitSingle calldata permitSingle, IAllowanceTransfer.PermitSingle calldata permitSingle,
bytes calldata signature bytes calldata signature
) external returns (uint256 amountOut) { ) external whenNotPaused returns (uint256 amountOut) {
amountOut = 0; amountOut = 0;
// TODO // TODO
} }

View File

@@ -11,4 +11,6 @@ contract Constants is Test {
// dummy contracts // dummy contracts
address DUMMY = makeAddr("dummy"); address DUMMY = makeAddr("dummy");
address FEE_RECEIVER = makeAddr("feeReceiver"); address FEE_RECEIVER = makeAddr("feeReceiver");
address PAUSER = makeAddr("pauser");
address UNPAUSER = makeAddr("unpauser");
} }

View File

@@ -206,4 +206,29 @@ contract TychoRouterTest is TychoRouterTestSetup {
tychoRouter.setFeeReceiver(FEE_RECEIVER); tychoRouter.setFeeReceiver(FEE_RECEIVER);
vm.stopPrank(); vm.stopPrank();
} }
function testPause() public {
vm.startPrank(PAUSER);
assertEq(tychoRouter.paused(), false);
tychoRouter.pause();
assertEq(tychoRouter.paused(), true);
vm.stopPrank();
vm.startPrank(UNPAUSER);
tychoRouter.unpause();
assertEq(tychoRouter.paused(), false);
vm.stopPrank();
}
function testPauseFailures() public {
vm.startPrank(BOB);
vm.expectRevert();
tychoRouter.pause();
vm.stopPrank();
vm.startPrank(UNPAUSER);
vm.expectRevert();
tychoRouter.unpause();
vm.stopPrank();
}
} }

View File

@@ -17,6 +17,8 @@ contract TychoRouterTestSetup is Test, Constants {
tychoRouter.grantRole(keccak256("EXECUTOR_SETTER_ROLE"), BOB); tychoRouter.grantRole(keccak256("EXECUTOR_SETTER_ROLE"), BOB);
tychoRouter.grantRole(keccak256("FUND_RESCUER_ROLE"), FUND_RESCUER); tychoRouter.grantRole(keccak256("FUND_RESCUER_ROLE"), FUND_RESCUER);
tychoRouter.grantRole(keccak256("FEE_SETTER_ROLE"), FEE_SETTER); tychoRouter.grantRole(keccak256("FEE_SETTER_ROLE"), FEE_SETTER);
tychoRouter.grantRole(keccak256("PAUSER_ROLE"), PAUSER);
tychoRouter.grantRole(keccak256("UNPAUSER_ROLE"), UNPAUSER);
executorSetter = BOB; executorSetter = BOB;
deployDummyContract(); deployDummyContract();
vm.stopPrank(); vm.stopPrank();