Done with staking contract

This commit is contained in:
Thrilok Kumar 2020-07-19 20:31:00 +05:30
parent d82d3a79bc
commit 737423a6b4
2 changed files with 71 additions and 29 deletions

View File

@ -18,6 +18,7 @@ interface SynthetixMapping {
struct StakingData { struct StakingData {
address stakingPool; address stakingPool;
address stakingToken; address stakingToken;
address rewardToken;
} }
function stakingMapping(bytes32) external view returns(StakingData memory); function stakingMapping(bytes32) external view returns(StakingData memory);
@ -52,6 +53,7 @@ contract StakingHelper is DSMath, Stores {
returns ( returns (
IStakingRewards stakingContract, IStakingRewards stakingContract,
TokenInterface stakingToken, TokenInterface stakingToken,
TokenInterface rewardToken,
bytes32 stakingType bytes32 stakingType
) )
{ {
@ -60,29 +62,30 @@ contract StakingHelper is DSMath, Stores {
require(stakingData.stakingPool != address(0) && stakingData.stakingToken != address(0), "Wrong Staking Name"); require(stakingData.stakingPool != address(0) && stakingData.stakingToken != address(0), "Wrong Staking Name");
stakingContract = IStakingRewards(stakingData.stakingPool); stakingContract = IStakingRewards(stakingData.stakingPool);
stakingToken = TokenInterface(stakingData.stakingToken); stakingToken = TokenInterface(stakingData.stakingToken);
rewardToken = TokenInterface(stakingData.rewardToken);
} }
} }
contract Staking is StakingHelper { contract Staking is StakingHelper {
event LogDeposit( event LogDeposit(
address token, address indexed stakingToken,
bytes32 stakingType, bytes32 indexed stakingType,
uint256 amount, uint256 amount,
uint getId, uint getId,
uint setId uint setId
); );
event LogWithdraw( event LogWithdraw(
address token, address indexed stakingToken,
bytes32 stakingType, bytes32 indexed stakingType,
uint256 amount, uint256 amount,
uint getId, uint getId,
uint setId uint setId
); );
event LogClaimedReward( event LogClaimedReward(
address token, address indexed rewardToken,
bytes32 stakingType, bytes32 indexed stakingType,
uint256 rewardAmt, uint256 rewardAmt,
uint setId uint setId
); );
@ -101,7 +104,13 @@ contract Staking is StakingHelper {
uint setId uint setId
) external payable { ) external payable {
uint _amt = getUint(getId, amt); uint _amt = getUint(getId, amt);
(IStakingRewards stakingContract, TokenInterface stakingToken, bytes32 stakingType) = getStakingData(stakingPoolName); (
IStakingRewards stakingContract,
TokenInterface stakingToken,
,
bytes32 stakingType
) = getStakingData(stakingPoolName);
_amt = _amt == uint(-1) ? stakingToken.balanceOf(address(this)) : _amt; _amt = _amt == uint(-1) ? stakingToken.balanceOf(address(this)) : _amt;
stakingToken.approve(address(stakingContract), _amt); stakingToken.approve(address(stakingContract), _amt);
@ -130,13 +139,18 @@ contract Staking is StakingHelper {
uint setIdReward uint setIdReward
) external payable { ) external payable {
uint _amt = getUint(getId, amt); uint _amt = getUint(getId, amt);
(IStakingRewards stakingContract, TokenInterface stakingToken, bytes32 stakingType) = getStakingData(stakingPoolName); (
IStakingRewards stakingContract,
TokenInterface stakingToken,
TokenInterface rewardToken,
bytes32 stakingType
) = getStakingData(stakingPoolName);
_amt = _amt == uint(-1) ? stakingContract.balanceOf(address(this)) : _amt; _amt = _amt == uint(-1) ? stakingContract.balanceOf(address(this)) : _amt;
uint intialBal = stakingToken.balanceOf(address(this)); uint intialBal = rewardToken.balanceOf(address(this));
stakingContract.withdraw(_amt); stakingContract.withdraw(_amt);
stakingContract.getReward(); stakingContract.getReward();
uint finalBal = stakingToken.balanceOf(address(this)); uint finalBal = rewardToken.balanceOf(address(this));
uint rewardAmt = sub(finalBal, intialBal); uint rewardAmt = sub(finalBal, intialBal);
@ -148,9 +162,9 @@ contract Staking is StakingHelper {
bytes memory _eventParamWithdraw = abi.encode(address(stakingToken), _amt, getId, setIdAmount); bytes memory _eventParamWithdraw = abi.encode(address(stakingToken), _amt, getId, setIdAmount);
emitEvent(_eventCodeWithdraw, _eventParamWithdraw); emitEvent(_eventCodeWithdraw, _eventParamWithdraw);
emit LogClaimedReward(address(stakingToken), stakingType, rewardAmt, setIdReward); emit LogClaimedReward(address(rewardToken), stakingType, rewardAmt, setIdReward);
bytes32 _eventCodeReward = keccak256("LogClaimedReward(address,bytes32,uint256,uint256)"); bytes32 _eventCodeReward = keccak256("LogClaimedReward(address,bytes32,uint256,uint256)");
bytes memory _eventParamReward = abi.encode(address(stakingToken), rewardAmt, setIdReward); bytes memory _eventParamReward = abi.encode(address(rewardToken), rewardAmt, setIdReward);
emitEvent(_eventCodeReward, _eventParamReward); emitEvent(_eventCodeReward, _eventParamReward);
} }
@ -163,22 +177,27 @@ contract Staking is StakingHelper {
string calldata stakingPoolName, string calldata stakingPoolName,
uint setId uint setId
) external payable { ) external payable {
(IStakingRewards stakingContract, TokenInterface stakingToken, bytes32 stakingType) = getStakingData(stakingPoolName); (
IStakingRewards stakingContract,
,
TokenInterface rewardToken,
bytes32 stakingType
) = getStakingData(stakingPoolName);
uint intialBal = stakingToken.balanceOf(address(this)); uint intialBal = rewardToken.balanceOf(address(this));
stakingContract.getReward(); stakingContract.getReward();
uint finalBal = stakingToken.balanceOf(address(this)); uint finalBal = rewardToken.balanceOf(address(this));
uint rewardAmt = sub(finalBal, intialBal); uint rewardAmt = sub(finalBal, intialBal);
setUint(setId, rewardAmt); setUint(setId, rewardAmt);
emit LogClaimedReward(address(stakingToken), stakingType, rewardAmt, setId); emit LogClaimedReward(address(rewardToken), stakingType, rewardAmt, setId);
bytes32 _eventCode = keccak256("LogClaimedReward(address,bytes32,uint256,uint256)"); bytes32 _eventCode = keccak256("LogClaimedReward(address,bytes32,uint256,uint256)");
bytes memory _eventParam = abi.encode(address(stakingToken), stakingType, rewardAmt, setId); bytes memory _eventParam = abi.encode(address(rewardToken), stakingType, rewardAmt, setId);
emitEvent(_eventCode, _eventParam); emitEvent(_eventCode, _eventParam);
} }
} }
contract ConnectStaking is Staking { contract ConnectStaking is Staking {
string public name = "staking-v1"; string public name = "Staking-v1.1";
} }

View File

@ -50,11 +50,23 @@ contract Helpers is BytesHelper {
struct StakingData { struct StakingData {
address stakingPool; address stakingPool;
address stakingToken; address stakingToken;
address rewardToken;
} }
event LogAddStakingMapping(string stakingName, bytes32 stakingType, address stakingAddress, address stakingToken); event LogAddStakingMapping(
event LogRemoveStakingMapping(string stakingName, bytes32 stakingType, address stakingAddress, address stakingToken); string stakingName,
bytes32 stakingType,
address stakingAddress,
address stakingToken,
address rewardToken
);
event LogRemoveStakingMapping(
string stakingName,
bytes32 stakingType,
address stakingAddress,
address stakingToken,
address rewardToken
);
modifier isChief virtual { modifier isChief virtual {
require( require(
ConnectorsInterface(connectors).chief(msg.sender) || ConnectorsInterface(connectors).chief(msg.sender) ||
@ -62,34 +74,45 @@ contract Helpers is BytesHelper {
_; _;
} }
function addStakingMapping(string memory stakingName, address stakingAddress, address stakingToken) public isChief { function addStakingMapping(
string memory stakingName,
address stakingAddress,
address stakingToken,
address rewardToken
) public isChief {
require(stakingAddress != address(0), "stakingAddress-not-vaild"); require(stakingAddress != address(0), "stakingAddress-not-vaild");
require(stakingToken != address(0), "stakingToken-not-vaild"); require(stakingToken != address(0), "stakingToken-not-vaild");
require(bytes(stakingName).length <= 32, "Length-exceeds"); require(bytes(stakingName).length <= 32, "Length-exceeds");
bytes32 stakeType = stringToBytes32(stakingName); bytes32 stakeType = stringToBytes32(stakingName);
require(stakingMapping[stakeType].stakingPool == address(0), "StakingPool-already-added"); require(stakingMapping[stakeType].stakingPool == address(0), "StakingPool-already-added");
require(stakingMapping[stakeType].stakingToken == address(0), "StakingToken-already-added"); require(stakingMapping[stakeType].stakingToken == address(0), "StakingToken-already-added");
require(stakingMapping[stakeType].rewardToken == address(0), "rewardToken-already-added");
stakingMapping[stakeType] = StakingData( stakingMapping[stakeType] = StakingData(
stakingAddress, stakingAddress,
stakingToken stakingToken,
rewardToken
); );
emit LogAddStakingMapping(stakingName, stakeType, stakingAddress, stakingToken); emit LogAddStakingMapping(stakingName, stakeType, stakingAddress, stakingToken, rewardToken);
} }
function removeStakingMapping(string memory stakingName, address stakingAddress) public isChief { function removeStakingMapping(string memory stakingName, address stakingAddress) public isChief {
require(stakingAddress != address(0), "stakingAddress-not-vaild"); require(stakingAddress != address(0), "stakingAddress-not-vaild");
bytes32 stakeType = stringToBytes32(stakingName); bytes32 stakeType = stringToBytes32(stakingName);
require(stakingMapping[stakeType].stakingPool != address(0), "StakingPool-not-added-yet");
require(stakingMapping[stakeType].stakingToken != address(0), "StakingToken-not-added-yet");
require(stakingMapping[stakeType].stakingPool == stakingAddress, "different-staking-pool"); require(stakingMapping[stakeType].stakingPool == stakingAddress, "different-staking-pool");
emit LogRemoveStakingMapping(stakingName, stakeType, stakingAddress, stakingMapping[stakeType].stakingToken); emit LogRemoveStakingMapping(
stakingName,
stakeType,
stakingAddress,
stakingMapping[stakeType].stakingToken,
stakingMapping[stakeType].rewardToken
);
delete stakingMapping[stakeType]; delete stakingMapping[stakeType];
} }
} }
contract InstaMapping is Helpers { contract InstaStakingMapping is Helpers {
string constant public name = "Synthetix-Mapping-v1"; string constant public name = "Staking-Mapping-v1";
} }