mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
192 lines
6.7 KiB
Solidity
192 lines
6.7 KiB
Solidity
//SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.7.0;
|
|
|
|
/**
|
|
* @title Pangolin.
|
|
* @dev Decentralized Exchange.
|
|
*/
|
|
|
|
import { TokenInterface } from "../../../common/interfaces.sol";
|
|
import { Helpers } from "./helpers.sol";
|
|
import { Events } from "./events.sol";
|
|
|
|
abstract contract PangolinStakeResolver is Helpers, Events {
|
|
|
|
// LP Staking
|
|
/**
|
|
* @notice Deposit LP token in MiniChefV2
|
|
* @dev Use the Pangolin Stake resolver to get the pid
|
|
* @param pid The index of the LP token in MiniChefV2.
|
|
* @param amount The amount of the LP token to deposit.
|
|
* @param getId ID to retrieve sellAmt.
|
|
* @param setId ID stores the amount of token brought.
|
|
*/
|
|
function depositLpStake(
|
|
uint pid,
|
|
uint amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
address lpTokenAddr = _depositLPStake(pid, _amt);
|
|
|
|
setUint(setId, _amt);
|
|
_eventName = "LogDepositLpStake(address,uint256,uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(lpTokenAddr, pid, _amt, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @notice Withdraw LP token from MiniChefV2
|
|
* @dev Use the Pangolin Stake resolver to get the pid
|
|
* @param pid The index of the LP token in MiniChefV2.
|
|
* @param amount The amount of the LP token to withdraw.
|
|
* @param getId ID to retrieve sellAmt.
|
|
* @param setId ID stores the amount of token brought.
|
|
*/
|
|
function withdrawLpStake(
|
|
uint pid,
|
|
uint amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
address lpTokenAddr = _withdraw_LP_Stake(pid, _amt);
|
|
|
|
setUint(setId, _amt);
|
|
|
|
_eventName = "LogWithdrawLpStake(address,uint256,uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(lpTokenAddr, pid, _amt, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @notice Withdraw LP token staked and claim rewards from MiniChefV2
|
|
* @dev Use the Pangolin Stake resolver to get the pid
|
|
* @param pid The index of the LP token in MiniChefV2.
|
|
* @param amount The amount of the LP token to withdraw.
|
|
* @param getId ID to retrieve sellAmt.
|
|
* @param setId ID stores the amount of token brought.
|
|
*/
|
|
function withdrawAndClaimLpRewards(
|
|
uint pid,
|
|
uint amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
(uint256 rewardAmount, address lpTokenAddr) = _withdraw_and_getRewards_LP_Stake(pid, _amt);
|
|
|
|
setUint(setId, _amt);
|
|
|
|
_eventName = "LogWithdrawLpAndClaim(address,uint256,uint256,uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(lpTokenAddr, pid, _amt, rewardAmount, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @notice Claim rewards from MiniChefV2
|
|
* @dev Use the Pangolin Stake resolver to get the pid
|
|
* @param pid The index of the LP token in MiniChefV2.
|
|
*/
|
|
function claimLpRewards(
|
|
uint pid
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
(uint256 rewardAmount, address lpTokenAddr) = _getLPStakeReward(pid);
|
|
|
|
_eventName = "LogClaimLpReward(address,uint256,uint256)";
|
|
_eventParam = abi.encode(lpTokenAddr, pid, rewardAmount);
|
|
}
|
|
|
|
/**
|
|
* @notice Emergency withdraw all LP token staked from MiniChefV2
|
|
* @dev Use the Pangolin Stake resolver to get the pid
|
|
* @param pid The index of the LP token in MiniChefV2.
|
|
*/
|
|
function emergencyWithdrawLpStake(
|
|
uint pid
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
(uint amount, address lpTokenAddr) = _emergencyWithdraw_LP_Stake(pid);
|
|
|
|
_eventName = "LogEmergencyWithdrawLpStake(address,uint256,uint256)";
|
|
_eventParam = abi.encode(lpTokenAddr, pid, amount);
|
|
}
|
|
|
|
// PNG Staking
|
|
/**
|
|
* @notice Deposit PNG in staking contract
|
|
* @param stakingContract The address of the single PNG staking contract
|
|
* @param amount The amount of the PNG to deposit.
|
|
* @param getId ID to retrieve sellAmt.
|
|
* @param setId ID stores the amount of token brought.
|
|
*/
|
|
function depositPNGStake(
|
|
address stakingContract,
|
|
uint256 amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
_depositPNGStake(stakingContract, _amt);
|
|
|
|
setUint(setId, _amt);
|
|
|
|
_eventName = "LogDepositPNGStake(address,uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(stakingContract, _amt, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @notice Withdraw PNG staked from staking contract
|
|
* @param stakingContract The address of the single PNG staking contract
|
|
* @param amount The amount of the PNG to withdraw.
|
|
* @param getId ID to retrieve sellAmt.
|
|
* @param setId ID stores the amount of token brought.
|
|
*/
|
|
function withdrawPNGStake(
|
|
address stakingContract,
|
|
uint256 amount,
|
|
uint256 getId,
|
|
uint256 setId
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
uint _amt = getUint(getId, amount);
|
|
|
|
_withdrawPNGStake(stakingContract, _amt);
|
|
|
|
setUint(setId, _amt);
|
|
|
|
_eventName = "LogWithdrawPNGStake(address,uint256,uint256,uint256)";
|
|
_eventParam = abi.encode(stakingContract, _amt, getId, setId);
|
|
}
|
|
|
|
/**
|
|
* @notice Withdraw all PNG staked from staking contract
|
|
* @param stakingContract The address of the single PNG staking contract
|
|
*/
|
|
function exitPNGStake(
|
|
address stakingContract
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
(uint256 exitAmount, uint256 rewardAmount, address rewardToken) = _exitPNGStake(stakingContract);
|
|
|
|
_eventName = "LogExitPNGStake(address,uint256,uint256,address)";
|
|
_eventParam = abi.encode(stakingContract, exitAmount, rewardAmount, rewardToken);
|
|
}
|
|
|
|
/**
|
|
* @notice Claim rewards from staking contract
|
|
* @param stakingContract The address of the single PNG staking contract
|
|
*/
|
|
function claimPNGStakeReward(
|
|
address stakingContract
|
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
|
(uint256 rewardAmount, address rewardToken) = _claimPNGStakeReward(stakingContract);
|
|
|
|
_eventName = "LogClaimPNGStakeReward(address,uint256,address)";
|
|
_eventParam = abi.encode(stakingContract, rewardAmount, rewardToken);
|
|
}
|
|
}
|
|
|
|
contract ConnectV2PngStakeAvalanche is PangolinStakeResolver {
|
|
string public constant name = "Pangolin-Stake-v1";
|
|
}
|