diff --git a/onchain/src/Kraiken.sol b/onchain/src/Kraiken.sol index 9455586..ea2362e 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() { @@ -81,6 +82,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..8dc7ac0 100644 --- a/onchain/test/Kraiken.t.sol +++ b/onchain/test/Kraiken.t.sol @@ -207,6 +207,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");