From d5f013b7d6b1210707b6084c534bed38149fc100 Mon Sep 17 00:00:00 2001 From: Lecky Lao Date: Sun, 19 Jul 2020 23:07:27 +1000 Subject: [PATCH] update to use getMappingAddr instead of getStakingAddr to remove dependancy; --- contracts/protocols/staking.sol | 44 ++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/contracts/protocols/staking.sol b/contracts/protocols/staking.sol index 9556a25..e3f9abb 100644 --- a/contracts/protocols/staking.sol +++ b/contracts/protocols/staking.sol @@ -9,28 +9,34 @@ interface TokenInterface { interface IStakingRewards { function balanceOf(address) external view returns (uint256); - function totalSupply() external view returns (uint256) { + function totalSupply() external view returns (uint256); function earned(address) external view returns (uint256); } -interface Staking { - function getStakingData(string calldata stakingName) - external - view - returns ( - IStakingRewards stakingContract, - TokenInterface stakingToken, - bytes32 stakingType - ); +interface SynthetixMapping { + struct StakingData { + address stakingPool; + address stakingToken; + } + function stakingMapping(bytes32) external view returns(StakingData memory); } contract CurveStakingHelpers { /** - * @dev Return mapping contract Address - */ - function getStakingAddr() internal virtual view returns (address) { - return 0x772590F33eD05b0E83553650BF9e75A04b337526; + * @dev Return InstaDApp Staking Mapping Addresses + */ + function getMappingAddr() internal virtual view returns (address) { + return 0x772590F33eD05b0E83553650BF9e75A04b337526; // InstaMapping Address } + + function stringToBytes32(string memory str) internal pure returns (bytes32 result) { + require(bytes(str).length != 0, "string-empty"); + // solium-disable-next-line security/no-inline-assembly + assembly { + result := mload(add(str, 32)) + } + } + } contract Resolver is CurveStakingHelpers { @@ -42,16 +48,20 @@ contract Resolver is CurveStakingHelpers { uint tokenBal, uint tokenTotalSupply ) { - Staking staking = Staking(getStakingAddr()); - (IStakingRewards stakingContract, TokenInterface stakingToken, bytes32 stakingType) = staking.getStakingData(stakingPoolName); + bytes32 stakingType = stringToBytes32(stakingPoolName); + SynthetixMapping.StakingData memory stakingData = SynthetixMapping(getMappingAddr()).stakingMapping(stakingType); + require(stakingData.stakingPool != address(0) && stakingData.stakingToken != address(0), "Wrong Staking Name"); + IStakingRewards stakingContract = IStakingRewards(stakingData.stakingPool); + TokenInterface stakingToken = TokenInterface(stakingData.stakingToken); + stakedBal = stakingContract.balanceOf(user); stakedBal = stakingContract.totalSupply(); rewardsEarned = stakingContract.earned(user); tokenBal = stakingToken.balanceOf(user); tokenBal = stakingToken.totalSupply(); } -} +} contract InstaCurveStakingResolver is Resolver { string public constant name = "Synthetix-Staking-Resolver-v1";