diff --git a/src/LockstakeEngine.sol b/src/LockstakeEngine.sol index 85f092a1..efbbaf6c 100644 --- a/src/LockstakeEngine.sol +++ b/src/LockstakeEngine.sol @@ -98,7 +98,7 @@ contract LockstakeEngine { event SelectFarm(address indexed urn, address farm); event Stake(address indexed urn, address indexed farm, uint256 wad, uint16 ref); event Withdraw(address indexed urn, address indexed farm, uint256 wad); - event GetReward(address indexed urn, address indexed farm); + event GetReward(address indexed urn, address indexed farm, address indexed to, uint256 amt); event OnKick(address indexed urn, uint256 wad); event OnTake(address indexed urn, address indexed who, uint256 wad); event OnTakeLeftovers(address indexed urn, uint256 tot, uint256 left, uint256 burn); @@ -289,9 +289,9 @@ contract LockstakeEngine { emit Withdraw(urn, selectedFarmUrn, wad); } - function getReward(address urn, address farm) external urnOwner(urn) { - LockstakeUrn(urn).getReward(farm, msg.sender); - emit GetReward(urn, farm); + function getReward(address urn, address farm, address to) external urnOwner(urn) { + uint256 amt = LockstakeUrn(urn).getReward(farm, to); + emit GetReward(urn, farm, to, amt); } // --- liquidation callback functions --- diff --git a/src/LockstakeUrn.sol b/src/LockstakeUrn.sol index 07033482..1c1ea4d4 100644 --- a/src/LockstakeUrn.sol +++ b/src/LockstakeUrn.sol @@ -66,9 +66,10 @@ contract LockstakeUrn { StakingRewardsLike(farm).withdraw(wad); } - function getReward(address farm, address usr) external isEngine { + function getReward(address farm, address to) external isEngine returns (uint256 amt) { StakingRewardsLike(farm).getReward(); GemLike rewardsToken = StakingRewardsLike(farm).rewardsToken(); - rewardsToken.transfer(usr, rewardsToken.balanceOf(address(this))); + amt = rewardsToken.balanceOf(address(this)); + rewardsToken.transfer(to, amt); } } diff --git a/test/LockstakeEngine.t.sol b/test/LockstakeEngine.t.sol index e905062e..7a80791d 100644 --- a/test/LockstakeEngine.t.sol +++ b/test/LockstakeEngine.t.sol @@ -89,7 +89,7 @@ contract AllocatorVaultTest is DssTest { event SelectFarm(address indexed urn, address farm); event Stake(address indexed urn, address indexed farm, uint256 wad, uint16 ref); event Withdraw(address indexed urn, address indexed farm, uint256 wad); - event GetReward(address indexed urn, address indexed farm); + event GetReward(address indexed urn, address indexed farm, address indexed to, uint256 amt); event OnKick(address indexed urn, uint256 wad); event OnTake(address indexed urn, address indexed who, uint256 wad); event OnTakeLeftovers(address indexed urn, uint256 tot, uint256 left, uint256 burn); @@ -396,9 +396,9 @@ contract AllocatorVaultTest is DssTest { farm.setReward(address(urn), 20_000); assertEq(GemMock(address(farm.rewardsToken())).balanceOf(address(this)), 0); vm.expectEmit(true, true, true, true); - emit GetReward(urn, address(farm)); - engine.getReward(urn, address(farm)); - assertEq(GemMock(address(farm.rewardsToken())).balanceOf(address(this)), 20_000); + emit GetReward(urn, address(farm), address(123), 20_000); + engine.getReward(urn, address(farm), address(123)); + assertEq(GemMock(address(farm.rewardsToken())).balanceOf(address(123)), 20_000); } function _clipperSetUp(bool withDelegate) internal returns (address urn) {