@@ -24,9 +24,14 @@ contract ConvexStrategy is BaseCurveStrategy {
2424 uint256 amount
2525 );
2626
27+ event CvxRewardTokenAddressUpdated (
28+ address _oldAddress ,
29+ address _newAddress
30+ );
31+
2732 address internal cvxDepositorAddress;
2833 address internal cvxRewardStakerAddress;
29- address internal crvRewardTokenAddress ;
34+ address internal cvxRewardTokenAddress ;
3035 uint256 internal cvxDepositorPTokenId;
3136
3237 /**
@@ -35,21 +40,21 @@ contract ConvexStrategy is BaseCurveStrategy {
3540 * well within that abstraction.
3641 * @param _platformAddress Address of the Curve 3pool
3742 * @param _vaultAddress Address of the vault
38- * @param _rewardTokenAddress Address of CRVX
39- * @param _crvRewardTokenAddress Address of CRV *yes we get both*
43+ * @param _rewardTokenAddress Address of CRV
44+ * @param _cvxRewardTokenAddress Address of CVX *yes we get both*
4045 * @param _assets Addresses of supported assets. MUST be passed in the same
4146 * order as returned by coins on the pool contract, i.e.
4247 * DAI, USDC, USDT
4348 * @param _pTokens Platform Token corresponding addresses
4449 * @param _cvxDepositorAddress Address of the Convex depositor(AKA booster) for this pool
45- * @param _cvxRewardStakerAddress Address of the CRVX rewards staker
50+ * @param _cvxRewardStakerAddress Address of the CVX rewards staker
4651 * @param _cvxDepositorPTokenId Pid of the pool referred to by Depositor and staker
4752 */
4853 function initialize (
4954 address _platformAddress , // 3Pool address
5055 address _vaultAddress ,
51- address _rewardTokenAddress , // CRVX
52- address _crvRewardTokenAddress ,
56+ address _rewardTokenAddress , // CRV
57+ address _cvxRewardTokenAddress , // CVX
5358 address [] calldata _assets ,
5459 address [] calldata _pTokens ,
5560 address _cvxDepositorAddress ,
@@ -62,7 +67,7 @@ contract ConvexStrategy is BaseCurveStrategy {
6267 cvxDepositorAddress = _cvxDepositorAddress;
6368 cvxRewardStakerAddress = _cvxRewardStakerAddress;
6469 cvxDepositorPTokenId = _cvxDepositorPTokenId;
65- crvRewardTokenAddress = _crvRewardTokenAddress ;
70+ cvxRewardTokenAddress = _cvxRewardTokenAddress ;
6671 pTokenAddress = _pTokens[0 ];
6772 super ._initialize (
6873 _platformAddress,
@@ -74,6 +79,21 @@ contract ConvexStrategy is BaseCurveStrategy {
7479 _approveBase ();
7580 }
7681
82+ /**
83+ * @dev Set the CVX reward token address.
84+ * @param _cvxRewardTokenAddress Address of the reward token
85+ */
86+ function setCvxRewardTokenAddress (address _cvxRewardTokenAddress )
87+ external
88+ onlyGovernor
89+ {
90+ emit CvxRewardTokenAddressUpdated (
91+ cvxRewardTokenAddress,
92+ _cvxRewardTokenAddress
93+ );
94+ cvxRewardTokenAddress = _cvxRewardTokenAddress;
95+ }
96+
7797 function _lpDepositAll () internal override {
7898 IERC20 pToken = IERC20 (pTokenAddress);
7999 // Deposit with staking
@@ -129,19 +149,20 @@ contract ConvexStrategy is BaseCurveStrategy {
129149 }
130150
131151 /**
132- * @dev Collect accumulated CRV and send to Vault.
152+ * @dev Collect accumulated CRV and CVX and send to Vault.
133153 */
134154 function collectRewardToken () external override onlyVault nonReentrant {
135- // Collect is done automatically with withdrawAndUnwrap
136- // Send CVX
137- IERC20 crvxToken = IERC20 (rewardTokenAddress);
138- uint256 balance = crvxToken.balanceOf (address (this ));
139- emit RewardTokenCollected (vaultAddress, rewardTokenAddress, balance);
140- crvxToken.safeTransfer (vaultAddress, balance);
155+ // Collect CRV and CVX
156+ IRewardStaking (cvxRewardStakerAddress).getReward ();
141157 // Send CRV
142- IERC20 crvToken = IERC20 (crvRewardTokenAddress );
143- balance = crvToken.balanceOf (address (this ));
144- emit RewardTokenCollected (vaultAddress, crvRewardTokenAddress , balance);
158+ IERC20 crvToken = IERC20 (rewardTokenAddress );
159+ uint256 balance = crvToken.balanceOf (address (this ));
160+ emit RewardTokenCollected (vaultAddress, rewardTokenAddress , balance);
145161 crvToken.safeTransfer (vaultAddress, balance);
162+ // Send CVX
163+ IERC20 cvxToken = IERC20 (cvxRewardTokenAddress);
164+ balance = cvxToken.balanceOf (address (this ));
165+ emit RewardTokenCollected (vaultAddress, cvxRewardTokenAddress, balance);
166+ cvxToken.safeTransfer (vaultAddress, balance);
146167 }
147168}
0 commit comments