Merge pull request 'fix: Kraiken.setStakingPool() allows stakingPool == liquidityManager with no guard (#935)' (#954) from fix/issue-935 into master

This commit is contained in:
johba 2026-03-18 11:17:06 +01:00
commit 16616d868e
2 changed files with 19 additions and 0 deletions

View file

@ -43,6 +43,7 @@ contract Kraiken is ERC20, ERC20Permit {
// Custom errors // Custom errors
error ZeroAddressInSetter(); error ZeroAddressInSetter();
error AddressAlreadySet(); error AddressAlreadySet();
error InvalidAddress();
// Modifier to restrict access to the liquidity manager // Modifier to restrict access to the liquidity manager
modifier onlyLiquidityManager() { modifier onlyLiquidityManager() {
@ -68,6 +69,7 @@ contract Kraiken is ERC20, ERC20Permit {
function setLiquidityManager(address liquidityManager_) external { function setLiquidityManager(address liquidityManager_) external {
require(msg.sender == deployer, "only deployer"); require(msg.sender == deployer, "only deployer");
if (address(0) == liquidityManager_) revert ZeroAddressInSetter(); if (address(0) == liquidityManager_) revert ZeroAddressInSetter();
if (liquidityManager_ == stakingPool) revert InvalidAddress();
if (liquidityManager != address(0)) revert AddressAlreadySet(); if (liquidityManager != address(0)) revert AddressAlreadySet();
liquidityManager = liquidityManager_; liquidityManager = liquidityManager_;
} }
@ -81,6 +83,7 @@ contract Kraiken is ERC20, ERC20Permit {
function setStakingPool(address stakingPool_) external { function setStakingPool(address stakingPool_) external {
require(msg.sender == deployer, "only deployer"); require(msg.sender == deployer, "only deployer");
if (address(0) == stakingPool_) revert ZeroAddressInSetter(); if (address(0) == stakingPool_) revert ZeroAddressInSetter();
if (stakingPool_ == liquidityManager) revert InvalidAddress();
if (stakingPool != address(0)) revert AddressAlreadySet(); if (stakingPool != address(0)) revert AddressAlreadySet();
stakingPool = stakingPool_; stakingPool = stakingPool_;
} }

View file

@ -187,6 +187,14 @@ contract KraikenTest is Test {
kraiken.setLiquidityManager(makeAddr("anotherLiquidityManager")); 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 { function testSetLiquidityManagerOnlyDeployer() public {
Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK"); Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK");
address nonDeployer = makeAddr("nonDeployer"); address nonDeployer = makeAddr("nonDeployer");
@ -207,6 +215,14 @@ contract KraikenTest is Test {
kraiken.setStakingPool(makeAddr("anotherStakingPool")); 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 { function testSetStakingPoolOnlyDeployer() public {
Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK"); Kraiken freshKraiken = new Kraiken("KRAIKEN", "KRK");
address nonDeployer = makeAddr("nonDeployer"); address nonDeployer = makeAddr("nonDeployer");