mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			381 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			381 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
//SPDX-License-Identifier: MIT
 | 
						|
pragma solidity ^0.7.6;
 | 
						|
 | 
						|
interface IMasset {
 | 
						|
	function mint(
 | 
						|
		address _input,
 | 
						|
		uint256 _inputQuantity,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 mintOutput);
 | 
						|
 | 
						|
	function mintMulti(
 | 
						|
		address[] calldata _inputs,
 | 
						|
		uint256[] calldata _inputQuantities,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 mintOutput);
 | 
						|
 | 
						|
	function getMintOutput(address _input, uint256 _inputQuantity)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256 mintOutput);
 | 
						|
 | 
						|
	function getMintMultiOutput(
 | 
						|
		address[] calldata _inputs,
 | 
						|
		uint256[] calldata _inputQuantities
 | 
						|
	) external view returns (uint256 mintOutput);
 | 
						|
 | 
						|
	function swap(
 | 
						|
		address _input,
 | 
						|
		address _output,
 | 
						|
		uint256 _inputQuantity,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 swapOutput);
 | 
						|
 | 
						|
	function getSwapOutput(
 | 
						|
		address _input,
 | 
						|
		address _output,
 | 
						|
		uint256 _inputQuantity
 | 
						|
	) external view returns (uint256 swapOutput);
 | 
						|
 | 
						|
	function redeem(
 | 
						|
		address _output,
 | 
						|
		uint256 _mAssetQuantity,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 outputQuantity);
 | 
						|
 | 
						|
	function redeemMasset(
 | 
						|
		uint256 _mAssetQuantity,
 | 
						|
		uint256[] calldata _minOutputQuantities,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256[] memory outputQuantities);
 | 
						|
 | 
						|
	function redeemExactBassets(
 | 
						|
		address[] calldata _outputs,
 | 
						|
		uint256[] calldata _outputQuantities,
 | 
						|
		uint256 _maxMassetQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 mAssetRedeemed);
 | 
						|
 | 
						|
	function getRedeemOutput(address _output, uint256 _mAssetQuantity)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256 bAssetOutput);
 | 
						|
 | 
						|
	function getRedeemExactBassetsOutput(
 | 
						|
		address[] calldata _outputs,
 | 
						|
		uint256[] calldata _outputQuantities
 | 
						|
	) external view returns (uint256 mAssetAmount);
 | 
						|
 | 
						|
	// Views
 | 
						|
	// This return an index, could be used to check if it's part of the basket
 | 
						|
	function bAssetIndexes(address) external view returns (uint8);
 | 
						|
 | 
						|
	function getPrice() external view returns (uint256 price, uint256 k);
 | 
						|
}
 | 
						|
 | 
						|
interface ISavingsContractV2 {
 | 
						|
	function depositInterest(uint256 _amount) external; // V1 & V2
 | 
						|
 | 
						|
	function depositSavings(uint256 _amount)
 | 
						|
		external
 | 
						|
		returns (uint256 creditsIssued); // V1 & V2
 | 
						|
 | 
						|
	function depositSavings(uint256 _amount, address _beneficiary)
 | 
						|
		external
 | 
						|
		returns (uint256 creditsIssued); // V2
 | 
						|
 | 
						|
	function redeemCredits(uint256 _amount)
 | 
						|
		external
 | 
						|
		returns (uint256 underlyingReturned); // V2
 | 
						|
 | 
						|
	function redeemUnderlying(uint256 _amount)
 | 
						|
		external
 | 
						|
		returns (uint256 creditsBurned); // V2
 | 
						|
 | 
						|
	function exchangeRate() external view returns (uint256); // V1 & V2
 | 
						|
 | 
						|
	function balanceOfUnderlying(address _user)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256 balance); // V2
 | 
						|
 | 
						|
	function underlyingToCredits(uint256 _credits)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256 underlying); // V2
 | 
						|
 | 
						|
	function creditsToUnderlying(uint256 _underlying)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256 credits); // V2
 | 
						|
}
 | 
						|
 | 
						|
interface IBoostedSavingsVault {
 | 
						|
	/**
 | 
						|
	 * @dev Stakes a given amount of the StakingToken for the sender
 | 
						|
	 * @param _amount Units of StakingToken
 | 
						|
	 */
 | 
						|
	function stake(uint256 _amount) external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Stakes a given amount of the StakingToken for a given beneficiary
 | 
						|
	 * @param _beneficiary Staked tokens are credited to this address
 | 
						|
	 * @param _amount      Units of StakingToken
 | 
						|
	 */
 | 
						|
	function stake(address _beneficiary, uint256 _amount) external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Withdraws stake from pool and claims any unlocked rewards.
 | 
						|
	 * Note, this function is costly - the args for _claimRewards
 | 
						|
	 * should be determined off chain and then passed to other fn
 | 
						|
	 */
 | 
						|
	function exit() external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Withdraws stake from pool and claims any unlocked rewards.
 | 
						|
	 * @param _first    Index of the first array element to claim
 | 
						|
	 * @param _last     Index of the last array element to claim
 | 
						|
	 */
 | 
						|
	function exit(uint256 _first, uint256 _last) external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Withdraws given stake amount from the pool
 | 
						|
	 * @param _amount Units of the staked token to withdraw
 | 
						|
	 */
 | 
						|
	function withdraw(uint256 _amount) external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Claims only the tokens that have been immediately unlocked, not including
 | 
						|
	 * those that are in the lockers.
 | 
						|
	 */
 | 
						|
	function claimReward() external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Claims all unlocked rewards for sender.
 | 
						|
	 * Note, this function is costly - the args for _claimRewards
 | 
						|
	 * should be determined off chain and then passed to other fn
 | 
						|
	 */
 | 
						|
	function claimRewards() external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Claims all unlocked rewards for sender. Both immediately unlocked
 | 
						|
	 * rewards and also locked rewards past their time lock.
 | 
						|
	 * @param _first    Index of the first array element to claim
 | 
						|
	 * @param _last     Index of the last array element to claim
 | 
						|
	 */
 | 
						|
	function claimRewards(uint256 _first, uint256 _last) external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Pokes a given account to reset the boost
 | 
						|
	 */
 | 
						|
	function pokeBoost(address _account) external;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Gets the RewardsToken
 | 
						|
	 */
 | 
						|
	function getRewardToken() external view returns (IERC20);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Gets the last applicable timestamp for this reward period
 | 
						|
	 */
 | 
						|
	function lastTimeRewardApplicable() external view returns (uint256);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Calculates the amount of unclaimed rewards per token since last update,
 | 
						|
	 * and sums with stored to give the new cumulative reward per token
 | 
						|
	 * @return 'Reward' per staked token
 | 
						|
	 */
 | 
						|
	function rewardPerToken() external view returns (uint256);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Returned the units of IMMEDIATELY claimable rewards a user has to receive. Note - this
 | 
						|
	 * does NOT include the majority of rewards which will be locked up.
 | 
						|
	 * @param _account User address
 | 
						|
	 * @return Total reward amount earned
 | 
						|
	 */
 | 
						|
	function earned(address _account) external view returns (uint256);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Calculates all unclaimed reward data, finding both immediately unlocked rewards
 | 
						|
	 * and those that have passed their time lock.
 | 
						|
	 * @param _account User address
 | 
						|
	 * @return amount Total units of unclaimed rewards
 | 
						|
	 * @return first Index of the first userReward that has unlocked
 | 
						|
	 * @return last Index of the last userReward that has unlocked
 | 
						|
	 */
 | 
						|
	function unclaimedRewards(address _account)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (
 | 
						|
			uint256 amount,
 | 
						|
			uint256 first,
 | 
						|
			uint256 last
 | 
						|
		);
 | 
						|
}
 | 
						|
 | 
						|
interface IFeederPool {
 | 
						|
	// Mint
 | 
						|
	function mint(
 | 
						|
		address _input,
 | 
						|
		uint256 _inputQuantity,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 mintOutput);
 | 
						|
 | 
						|
	function mintMulti(
 | 
						|
		address[] calldata _inputs,
 | 
						|
		uint256[] calldata _inputQuantities,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 mintOutput);
 | 
						|
 | 
						|
	function getMintOutput(address _input, uint256 _inputQuantity)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256 mintOutput);
 | 
						|
 | 
						|
	function getMintMultiOutput(
 | 
						|
		address[] calldata _inputs,
 | 
						|
		uint256[] calldata _inputQuantities
 | 
						|
	) external view returns (uint256 mintOutput);
 | 
						|
 | 
						|
	// Swaps
 | 
						|
	function swap(
 | 
						|
		address _input,
 | 
						|
		address _output,
 | 
						|
		uint256 _inputQuantity,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 swapOutput);
 | 
						|
 | 
						|
	function getSwapOutput(
 | 
						|
		address _input,
 | 
						|
		address _output,
 | 
						|
		uint256 _inputQuantity
 | 
						|
	) external view returns (uint256 swapOutput);
 | 
						|
 | 
						|
	// Redemption
 | 
						|
	function redeem(
 | 
						|
		address _output,
 | 
						|
		uint256 _fpTokenQuantity,
 | 
						|
		uint256 _minOutputQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 outputQuantity);
 | 
						|
 | 
						|
	function redeemProportionately(
 | 
						|
		uint256 _fpTokenQuantity,
 | 
						|
		uint256[] calldata _minOutputQuantities,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256[] memory outputQuantities);
 | 
						|
 | 
						|
	function redeemExactBassets(
 | 
						|
		address[] calldata _outputs,
 | 
						|
		uint256[] calldata _outputQuantities,
 | 
						|
		uint256 _maxMassetQuantity,
 | 
						|
		address _recipient
 | 
						|
	) external returns (uint256 mAssetRedeemed);
 | 
						|
 | 
						|
	function getRedeemOutput(address _output, uint256 _fpTokenQuantity)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256 bAssetOutput);
 | 
						|
 | 
						|
	function getRedeemExactBassetsOutput(
 | 
						|
		address[] calldata _outputs,
 | 
						|
		uint256[] calldata _outputQuantities
 | 
						|
	) external view returns (uint256 mAssetAmount);
 | 
						|
 | 
						|
	// Views
 | 
						|
	function mAsset() external view returns (address);
 | 
						|
 | 
						|
	function getPrice() external view returns (uint256 price, uint256 k);
 | 
						|
}
 | 
						|
 | 
						|
interface IERC20 {
 | 
						|
	/**
 | 
						|
	 * @dev Returns the amount of tokens in existence.
 | 
						|
	 */
 | 
						|
	function totalSupply() external view returns (uint256);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Returns the amount of tokens owned by `account`.
 | 
						|
	 */
 | 
						|
	function balanceOf(address account) external view returns (uint256);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Moves `amount` tokens from the caller's account to `recipient`.
 | 
						|
	 *
 | 
						|
	 * Returns a boolean value indicating whether the operation succeeded.
 | 
						|
	 *
 | 
						|
	 * Emits a {Transfer} event.
 | 
						|
	 */
 | 
						|
	function transfer(address recipient, uint256 amount)
 | 
						|
		external
 | 
						|
		returns (bool);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Returns the remaining number of tokens that `spender` will be
 | 
						|
	 * allowed to spend on behalf of `owner` through {transferFrom}. This is
 | 
						|
	 * zero by default.
 | 
						|
	 *
 | 
						|
	 * This value changes when {approve} or {transferFrom} are called.
 | 
						|
	 */
 | 
						|
	function allowance(address owner, address spender)
 | 
						|
		external
 | 
						|
		view
 | 
						|
		returns (uint256);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
 | 
						|
	 *
 | 
						|
	 * Returns a boolean value indicating whether the operation succeeded.
 | 
						|
	 *
 | 
						|
	 * IMPORTANT: Beware that changing an allowance with this method brings the risk
 | 
						|
	 * that someone may use both the old and the new allowance by unfortunate
 | 
						|
	 * transaction ordering. One possible solution to mitigate this race
 | 
						|
	 * condition is to first reduce the spender's allowance to 0 and set the
 | 
						|
	 * desired value afterwards:
 | 
						|
	 * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
 | 
						|
	 *
 | 
						|
	 * Emits an {Approval} event.
 | 
						|
	 */
 | 
						|
	function approve(address spender, uint256 amount) external returns (bool);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Moves `amount` tokens from `sender` to `recipient` using the
 | 
						|
	 * allowance mechanism. `amount` is then deducted from the caller's
 | 
						|
	 * allowance.
 | 
						|
	 *
 | 
						|
	 * Returns a boolean value indicating whether the operation succeeded.
 | 
						|
	 *
 | 
						|
	 * Emits a {Transfer} event.
 | 
						|
	 */
 | 
						|
	function transferFrom(
 | 
						|
		address sender,
 | 
						|
		address recipient,
 | 
						|
		uint256 amount
 | 
						|
	) external returns (bool);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Emitted when `value` tokens are moved from one account (`from`) to
 | 
						|
	 * another (`to`).
 | 
						|
	 *
 | 
						|
	 * Note that `value` may be zero.
 | 
						|
	 */
 | 
						|
	event Transfer(address indexed from, address indexed to, uint256 value);
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @dev Emitted when the allowance of a `spender` for an `owner` is set by
 | 
						|
	 * a call to {approve}. `value` is the new allowance.
 | 
						|
	 */
 | 
						|
	event Approval(
 | 
						|
		address indexed owner,
 | 
						|
		address indexed spender,
 | 
						|
		uint256 value
 | 
						|
	);
 | 
						|
}
 |