diff --git a/onchain/src/Kraiken.sol b/onchain/src/Kraiken.sol index 9455586..8a5efaf 100644 --- a/onchain/src/Kraiken.sol +++ b/onchain/src/Kraiken.sol @@ -43,6 +43,7 @@ contract Kraiken is ERC20, ERC20Permit { // Custom errors error ZeroAddressInSetter(); error AddressAlreadySet(); + error InvalidAddress(); // Modifier to restrict access to the liquidity manager modifier onlyLiquidityManager() { @@ -68,6 +69,7 @@ contract Kraiken is ERC20, ERC20Permit { function setLiquidityManager(address liquidityManager_) external { require(msg.sender == deployer, "only deployer"); if (address(0) == liquidityManager_) revert ZeroAddressInSetter(); + if (liquidityManager_ == stakingPool) revert InvalidAddress(); if (liquidityManager != address(0)) revert AddressAlreadySet(); liquidityManager = liquidityManager_; } @@ -81,6 +83,7 @@ contract Kraiken is ERC20, ERC20Permit { function setStakingPool(address stakingPool_) external { require(msg.sender == deployer, "only deployer"); if (address(0) == stakingPool_) revert ZeroAddressInSetter(); + if (stakingPool_ == liquidityManager) revert InvalidAddress(); if (stakingPool != address(0)) revert AddressAlreadySet(); stakingPool = stakingPool_; } diff --git a/onchain/test/Kraiken.t.sol b/onchain/test/Kraiken.t.sol index 93c27d7..055a092 100644 --- a/onchain/test/Kraiken.t.sol +++ b/onchain/test/Kraiken.t.sol @@ -187,6 +187,14 @@ contract KraikenTest is Test { kraiken.setLiquidityManager(makeAddr("anotherLiquidityManager")); } + function testSetLiquidityManagerRejectsStakingPool() public { + Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK"); + address sp = makeAddr("stakingPool"); + freshKraiken.setStakingPool(sp); + vm.expectRevert(Kraiken.InvalidAddress.selector); + freshKraiken.setLiquidityManager(sp); + } + function testSetLiquidityManagerOnlyDeployer() public { Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK"); address nonDeployer = makeAddr("nonDeployer"); @@ -207,6 +215,14 @@ contract KraikenTest is Test { kraiken.setStakingPool(makeAddr("anotherStakingPool")); } + function testSetStakingPoolRejectsLiquidityManager() public { + Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK"); + address lm = makeAddr("liquidityManager"); + freshKraiken.setLiquidityManager(lm); + vm.expectRevert(Kraiken.InvalidAddress.selector); + freshKraiken.setStakingPool(lm); + } + function testSetStakingPoolOnlyDeployer() public { Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK"); address nonDeployer = makeAddr("nonDeployer");