From 64a00cd47ef75c7303b2e431b762ff76aab73188 Mon Sep 17 00:00:00 2001 From: Thrilok Kumar Date: Sat, 25 Jul 2020 12:18:56 +0530 Subject: [PATCH] Added staking position in curve_sbtc resolver --- contracts/protocols/curve_sbtc.sol | 38 ++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/contracts/protocols/curve_sbtc.sol b/contracts/protocols/curve_sbtc.sol index fe59b51..56d5b92 100644 --- a/contracts/protocols/curve_sbtc.sol +++ b/contracts/protocols/curve_sbtc.sol @@ -15,6 +15,10 @@ interface TokenInterface { function balanceOf(address) external view returns (uint); } +interface IStakingRewards { + function balanceOf(address) external view returns (uint256); + function earned(address) external view returns (uint256); +} contract DSMath { @@ -57,6 +61,20 @@ contract CurveHelpers is DSMath { return 0x075b1bb99792c9E1041bA13afEf80C91a1e70fB3; } + /** + * @dev Return Curve sBTC Staking Address + */ + function getCurveStakingAddr() internal pure returns (address) { + return 0x13C1542A468319688B89E323fe9A3Be3A90EBb27; + } + + /** + * @dev Return BPT Token address. + */ + function getBPTAddr() internal pure returns (address) { + return 0x330416C863f2acCE7aF9C9314B422d24c672534a; + } + function getTokenI(address token) internal pure returns (int128 i) { if (token == address(0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D)) { // renBTC Token @@ -178,7 +196,10 @@ contract Resolver is CurveHelpers { uint userShare, uint poolRenBtcBal, uint poolWbtcBal, - uint poolSbtcBal + uint poolSbtcBal, + uint stakedBal, + uint rewardsEarned, + uint rewardBal ) { TokenInterface curveToken = TokenInterface(getCurveTokenAddr()); userBal = curveToken.balanceOf(user); @@ -189,10 +210,23 @@ contract Resolver is CurveHelpers { poolRenBtcBal = TokenInterface(curveContract.coins(0)).balanceOf(getCurveSwapAddr()); poolWbtcBal = TokenInterface(curveContract.coins(1)).balanceOf(getCurveSwapAddr()); poolSbtcBal = TokenInterface(curveContract.coins(2)).balanceOf(getCurveSwapAddr()); + + (stakedBal, rewardsEarned, rewardBal) = getStakingPosition(user); + } + + function getStakingPosition(address user) public view returns ( + uint stakedBal, + uint rewardsEarned, + uint rewardBal + ) { + IStakingRewards stakingContract = IStakingRewards(getCurveStakingAddr()); + stakedBal = stakingContract.balanceOf(user); + rewardsEarned = stakingContract.earned(user); + rewardBal = TokenInterface(getBPTAddr()).balanceOf(user); } } contract InstaCurveSBTCResolver is Resolver { - string public constant name = "Curve-sBTC-Resolver-v1.1"; + string public constant name = "Curve-sBTC-Resolver-v1.2"; } \ No newline at end of file