Skip to content

Commit

Permalink
Merge pull request #305 from mysofinance/investigate-curve-efficiency
Browse files Browse the repository at this point in the history
added withdraw function for gauges 3 and above
  • Loading branch information
jpick713 authored May 17, 2023
2 parents 526415a + c7caf56 commit dd0e17b
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,23 +114,43 @@ contract CurveLPStakingCompartment is BaseCompartment {

IStakingHelper(CRV_MINTER_ADDR).mint(_liqGaugeAddr);

uint256 index = 0;
while (index < 8) {
try IStakingHelper(_liqGaugeAddr).reward_tokens(index) returns (
address rewardTokenAddr
) {
_rewardTokenAddr[index] = rewardTokenAddr;
} catch {
break;
}
unchecked {
index++;
uint256 index;

try IStakingHelper(_liqGaugeAddr).reward_tokens(0) returns (
address rewardTokenAddrZeroIndex
) {
// versions 2, 3, 4, or 5
_rewardTokenAddr[0] = rewardTokenAddrZeroIndex;
index = 1;
address rewardTokenAddr;
while (index < 8) {
rewardTokenAddr = IStakingHelper(_liqGaugeAddr).reward_tokens(
index
);
if (rewardTokenAddr != address(0)) {
_rewardTokenAddr[index] = rewardTokenAddr;
} else {
break;
}
unchecked {
index++;
}
}
} catch {
// version 1 gauge
IStakingHelper(_liqGaugeAddr).withdraw(withdrawAmount);
}
if (index > 0) {
IStakingHelper(_liqGaugeAddr).claim_rewards();
try IStakingHelper(_liqGaugeAddr).withdraw(withdrawAmount, true) {
// version 3, 4, or 5 gauge
} catch {
// version 2 gauge
if (_rewardTokenAddr[0] != address(0)) {
IStakingHelper(_liqGaugeAddr).claim_rewards();
}
IStakingHelper(_liqGaugeAddr).withdraw(withdrawAmount);
}
}
IStakingHelper(_liqGaugeAddr).withdraw(withdrawAmount);
}

function _collAccountingHelper(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,19 @@ interface IStakingHelper {

/**
* @notice Withdraw `value` LP tokens, curve type take pools
* @dev This withdraw function is for gauges v1 and v2
* @param value Number of tokens to withdraw
*/
function withdraw(uint256 value) external;

/**
* @notice Withdraw `value` LP tokens, curve type take pools
* @dev This withdraw function is for gauges v3, v4 and v5
* @param value Number of tokens to withdraw
* @param withdrawRewards true if withdrawing rewards
*/
function withdraw(uint256 value, bool withdrawRewards) external;

/**
* @notice Claim all available reward tokens for msg.sender
*/
Expand Down

0 comments on commit dd0e17b

Please sign in to comment.