mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	feat: add fluid staking contract
This commit is contained in:
		
							parent
							
								
									ca7879da10
								
							
						
					
					
						commit
						0c0f8199ee
					
				
							
								
								
									
										29
									
								
								contracts/mainnet/connectors/fluid-stake/events.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								contracts/mainnet/connectors/fluid-stake/events.sol
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					//SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					pragma solidity ^0.7.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contract Events {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  event LogDeposit(
 | 
				
			||||||
 | 
					    address indexed stakingPool,
 | 
				
			||||||
 | 
					    uint256 amount,
 | 
				
			||||||
 | 
					    uint getId,
 | 
				
			||||||
 | 
					    uint setId
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  event LogWithdrawAndClaimedReward(
 | 
				
			||||||
 | 
					    address indexed stakingPool,
 | 
				
			||||||
 | 
					    uint256 amount,
 | 
				
			||||||
 | 
					    uint256 rewardAmt,
 | 
				
			||||||
 | 
					    uint getId,
 | 
				
			||||||
 | 
					    uint setIdAmount,
 | 
				
			||||||
 | 
					    uint setIdReward
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  event LogClaimedReward(
 | 
				
			||||||
 | 
					    address indexed stakingPool,
 | 
				
			||||||
 | 
					    address indexed rewardToken,
 | 
				
			||||||
 | 
					    uint256 rewardAmt,
 | 
				
			||||||
 | 
					    uint setId
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								contracts/mainnet/connectors/fluid-stake/helpers.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								contracts/mainnet/connectors/fluid-stake/helpers.sol
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					//SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					pragma solidity ^0.7.0;
 | 
				
			||||||
 | 
					pragma experimental ABIEncoderV2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { DSMath } from "../../common/math.sol";
 | 
				
			||||||
 | 
					import { Basic } from "../../common/basic.sol";
 | 
				
			||||||
 | 
					import { TokenInterface } from "../../common/interfaces.sol";
 | 
				
			||||||
 | 
					import { IStakingRewards, IStakingRewardsFactory, IGUniPoolResolver } from "./interface.sol";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					abstract contract Helpers is DSMath, Basic {
 | 
				
			||||||
 | 
					  TokenInterface constant internal rewardToken = TokenInterface(0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								contracts/mainnet/connectors/fluid-stake/interface.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								contracts/mainnet/connectors/fluid-stake/interface.sol
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					//SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					pragma solidity ^0.7.0;
 | 
				
			||||||
 | 
					pragma experimental ABIEncoderV2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IStakingRewards {
 | 
				
			||||||
 | 
					  function stake(uint256 amount) external;
 | 
				
			||||||
 | 
					  function withdraw(uint256 amount) external;
 | 
				
			||||||
 | 
					  function getReward() external;
 | 
				
			||||||
 | 
					  function balanceOf(address) external view returns(uint);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IStakingRewardsFactory {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  struct StakingRewardsInfo {
 | 
				
			||||||
 | 
					    address stakingRewards;
 | 
				
			||||||
 | 
					    uint rewardAmount;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function stakingRewardsInfoByStakingToken(address) external view returns(StakingRewardsInfo memory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface IGUniPoolResolver {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function getStakingFactory() external view returns(IStakingRewardsFactory);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										113
									
								
								contracts/mainnet/connectors/fluid-stake/main.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								contracts/mainnet/connectors/fluid-stake/main.sol
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,113 @@
 | 
				
			||||||
 | 
					//SPDX-License-Identifier: MIT
 | 
				
			||||||
 | 
					pragma solidity ^0.7.0;
 | 
				
			||||||
 | 
					pragma experimental ABIEncoderV2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @title G-UNI Staking.
 | 
				
			||||||
 | 
					 * @dev Stake G-UNI for earning rewards.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { TokenInterface } from "../../common/interfaces.sol";
 | 
				
			||||||
 | 
					import { Stores } from "../../common/stores.sol";
 | 
				
			||||||
 | 
					import { Helpers } from "./helpers.sol";
 | 
				
			||||||
 | 
					import { Events } from "./events.sol";
 | 
				
			||||||
 | 
					import { IStakingRewards, IStakingRewardsFactory } from "./interface.sol";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contract Main is Helpers, Events {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					    * @dev Deposit ERC20.
 | 
				
			||||||
 | 
					    * @notice Deposit Tokens to staking pool.
 | 
				
			||||||
 | 
					    * @param stakingPool staking pool address.
 | 
				
			||||||
 | 
					    * @param stakingToken staking token address.
 | 
				
			||||||
 | 
					    * @param amt staking token amount.
 | 
				
			||||||
 | 
					    * @param getId ID to retrieve amount.
 | 
				
			||||||
 | 
					    * @param setId ID stores the amount of staked tokens.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  function deposit(
 | 
				
			||||||
 | 
					    address stakingPool,
 | 
				
			||||||
 | 
					    address stakingToken,
 | 
				
			||||||
 | 
					    uint amt,
 | 
				
			||||||
 | 
					    uint getId,
 | 
				
			||||||
 | 
					    uint setId
 | 
				
			||||||
 | 
					  ) external payable returns (string memory _eventName, bytes memory _eventParam) {
 | 
				
			||||||
 | 
					    uint _amt = getUint(getId, amt);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    IStakingRewards stakingContract = IStakingRewards(stakingPool);
 | 
				
			||||||
 | 
					    TokenInterface stakingTokenContract = TokenInterface(stakingToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _amt = _amt == uint(-1) ? stakingTokenContract.balanceOf(address(this)) : _amt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    approve(stakingTokenContract, address(stakingContract), _amt);
 | 
				
			||||||
 | 
					    stakingContract.stake(_amt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setUint(setId, _amt);
 | 
				
			||||||
 | 
					    _eventName = "LogDeposit(address,uint256,uint256,uint256)";
 | 
				
			||||||
 | 
					    _eventParam = abi.encode(address(stakingPool), _amt, getId, setId);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					    * @dev Withdraw ERC20.
 | 
				
			||||||
 | 
					    * @notice Withdraw Tokens from the staking pool.
 | 
				
			||||||
 | 
					    * @param stakingPool staking pool address.
 | 
				
			||||||
 | 
					    * @param stakingToken staking token address.
 | 
				
			||||||
 | 
					    * @param amt staking token amount.
 | 
				
			||||||
 | 
					    * @param getId ID to retrieve amount.
 | 
				
			||||||
 | 
					    * @param setIdAmount ID stores the amount of stake tokens withdrawn.
 | 
				
			||||||
 | 
					    * @param setIdReward ID stores the amount of reward tokens claimed.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  function withdraw(
 | 
				
			||||||
 | 
					    address stakingPool,
 | 
				
			||||||
 | 
					    address stakingToken,
 | 
				
			||||||
 | 
					    uint amt,
 | 
				
			||||||
 | 
					    uint getId,
 | 
				
			||||||
 | 
					    uint setIdAmount,
 | 
				
			||||||
 | 
					    uint setIdReward
 | 
				
			||||||
 | 
					  ) external payable returns (string memory _eventName, bytes memory _eventParam) {
 | 
				
			||||||
 | 
					    uint _amt = getUint(getId, amt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    IStakingRewards stakingContract = IStakingRewards(stakingPool);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _amt = _amt == uint(-1) ? stakingContract.balanceOf(address(this)) : _amt;
 | 
				
			||||||
 | 
					    uint intialBal = rewardToken.balanceOf(address(this));
 | 
				
			||||||
 | 
					    stakingContract.withdraw(_amt);
 | 
				
			||||||
 | 
					    stakingContract.getReward();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint rewardAmt = sub(rewardToken.balanceOf(address(this)), intialBal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setUint(setIdAmount, _amt);
 | 
				
			||||||
 | 
					    setUint(setIdReward, rewardAmt);
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    _eventName = "LogWithdrawAndClaimedReward(address,uint256,uint256,uint256,uint256,uint256)";
 | 
				
			||||||
 | 
					    _eventParam = abi.encode(address(stakingPool), _amt, rewardAmt, getId, setIdAmount, setIdReward);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					    * @dev Claim Reward.
 | 
				
			||||||
 | 
					    * @notice Claim Pending Rewards of tokens staked.
 | 
				
			||||||
 | 
					    * @param stakingPool staking pool address.
 | 
				
			||||||
 | 
					    * @param setId ID stores the amount of reward tokens claimed.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  function claimReward(
 | 
				
			||||||
 | 
					    address stakingPool,
 | 
				
			||||||
 | 
					    uint setId
 | 
				
			||||||
 | 
					  ) external payable returns (string memory _eventName, bytes memory _eventParam) {
 | 
				
			||||||
 | 
					    IStakingRewards stakingContract = IStakingRewards(stakingPool);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint intialBal = rewardToken.balanceOf(address(this));
 | 
				
			||||||
 | 
					    stakingContract.getReward();
 | 
				
			||||||
 | 
					    uint finalBal = rewardToken.balanceOf(address(this));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint rewardAmt = sub(finalBal, intialBal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setUint(setId, rewardAmt);
 | 
				
			||||||
 | 
					    _eventName = "LogClaimedReward(address,address,uint256,uint256)";
 | 
				
			||||||
 | 
					    _eventParam = abi.encode(address(stakingPool), address(rewardToken), rewardAmt, setId);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					contract connectV2StakeGUNI is Main {
 | 
				
			||||||
 | 
					    string public constant name = "Stake-G-UNI-v1.1";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user