mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
wip: add swap tests
This commit is contained in:
parent
ceb90406cd
commit
972b8a8ebb
|
@ -10,4 +10,10 @@ contract Events {
|
|||
address platformToken,
|
||||
uint256 platformAmount
|
||||
);
|
||||
event LogSwap(
|
||||
address from,
|
||||
address to,
|
||||
uint256 amountIn,
|
||||
uint256 amountOut
|
||||
);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import { TokenInterface } from "../../common/interfaces.sol";
|
|||
import "hardhat/console.sol";
|
||||
|
||||
abstract contract mStableResolver is Events, Helpers {
|
||||
//
|
||||
/***************************************
|
||||
CORE
|
||||
****************************************/
|
||||
|
@ -48,6 +49,7 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
uint256 _amount,
|
||||
uint256 _minOut
|
||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||
//
|
||||
require(
|
||||
IMasset(mUsdToken).bAssetIndexes(_token) != 0,
|
||||
"Token not a bAsset"
|
||||
|
@ -81,6 +83,7 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
uint256 _minOut,
|
||||
address _path
|
||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||
//
|
||||
require(_path != address(0), "Path must be set");
|
||||
require(
|
||||
IMasset(mUsdToken).bAssetIndexes(_token) == 0,
|
||||
|
@ -105,6 +108,7 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
* @return _eventName Event name
|
||||
* @return _eventParam Event parameters
|
||||
*/
|
||||
|
||||
function withdraw(uint256 _credits)
|
||||
external
|
||||
returns (string memory _eventName, bytes memory _eventParam)
|
||||
|
@ -130,6 +134,7 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
uint256 _credits,
|
||||
uint256 _minOut
|
||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||
//
|
||||
require(
|
||||
IMasset(mUsdToken).bAssetIndexes(_token) != 0,
|
||||
"Token not a bAsset"
|
||||
|
@ -164,6 +169,7 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
uint256 _minOut,
|
||||
address _path
|
||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||
//
|
||||
require(_path != address(0), "Path must be set");
|
||||
require(
|
||||
IMasset(mUsdToken).bAssetIndexes(_token) == 0,
|
||||
|
@ -225,6 +231,97 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Swap tokens
|
||||
* @notice Swaps tokens via Masset basket
|
||||
* @param _input Token address to swap from
|
||||
* @param _output Token address to swap to
|
||||
* @param _amount Amount of tokens to swap
|
||||
* @param _minOut Minimum amount of token to mint
|
||||
* @return _eventName Event name
|
||||
* @return _eventParam Event parameters
|
||||
*/
|
||||
|
||||
function swap(
|
||||
address _input,
|
||||
address _output,
|
||||
uint256 _amount,
|
||||
uint256 _minOut
|
||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||
//
|
||||
approve(TokenInterface(_input), mUsdToken, _amount);
|
||||
uint256 amountSwapped;
|
||||
|
||||
// Check the assets and swap accordingly
|
||||
if (_output == mUsdToken) {
|
||||
// bAsset to mUSD => mint
|
||||
amountSwapped = IMasset(mUsdToken).mint(
|
||||
_input,
|
||||
_amount,
|
||||
_minOut,
|
||||
address(this)
|
||||
);
|
||||
} else if (_input == mUsdToken) {
|
||||
// mUSD to bAsset => redeem
|
||||
amountSwapped = IMasset(mUsdToken).redeem(
|
||||
_output,
|
||||
_amount,
|
||||
_minOut,
|
||||
address(this)
|
||||
);
|
||||
} else {
|
||||
// bAsset to another bAsset => swap
|
||||
amountSwapped = IMasset(mUsdToken).swap(
|
||||
_input,
|
||||
_output,
|
||||
_amount,
|
||||
_minOut,
|
||||
address(this)
|
||||
);
|
||||
}
|
||||
|
||||
_eventName = "LogSwap()";
|
||||
_eventParam = abi.encode(_input, _output, _amount, amountSwapped);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Swap tokens via Feeder Pool
|
||||
* @notice Swaps tokens via Feeder Pool
|
||||
* @param _input Token address to swap from
|
||||
* @param _output Token address to swap to
|
||||
* @param _amount Amount of tokens to swap
|
||||
* @param _minOut Minimum amount of token to mint
|
||||
* @param _path Feeder Pool address to use
|
||||
* @return _eventName Event name
|
||||
* @return _eventParam Event parameters
|
||||
*/
|
||||
|
||||
function swapViaFeeder(
|
||||
address _input,
|
||||
address _output,
|
||||
uint256 _amount,
|
||||
uint256 _minOut,
|
||||
address _path
|
||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||
//
|
||||
uint256 amountSwapped;
|
||||
|
||||
approve(TokenInterface(_input), _path, _amount);
|
||||
|
||||
// swaps fAsset to mUSD via Feeder Pool
|
||||
// swaps mUSD to fAsset via Feeder Pool
|
||||
amountSwapped = IFeederPool(_path).swap(
|
||||
_input,
|
||||
_output,
|
||||
_amount,
|
||||
_minOut,
|
||||
address(this)
|
||||
);
|
||||
|
||||
_eventName = "LogSwap()";
|
||||
_eventParam = abi.encode(_input, _output, _amount, amountSwapped);
|
||||
}
|
||||
|
||||
/***************************************
|
||||
Internal
|
||||
****************************************/
|
||||
|
@ -244,6 +341,7 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
uint256 _amount,
|
||||
address _path
|
||||
) internal returns (string memory _eventName, bytes memory _eventParam) {
|
||||
//
|
||||
// 1. Deposit mUSD to Save
|
||||
approve(TokenInterface(mUsdToken), imUsdToken, _amount);
|
||||
uint256 credits = ISavingsContractV2(imUsdToken).depositSavings(
|
||||
|
@ -315,22 +413,6 @@ abstract contract mStableResolver is Events, Helpers {
|
|||
a = TokenInterface(_rewardToken).balanceOf(address(this));
|
||||
b = TokenInterface(_platformToken).balanceOf(address(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Swaps token supported by mStable for another token
|
||||
* @notice Swaps token supported by mStable for another token
|
||||
* @param _token Address of token to swap
|
||||
* @param _amount Amount of token to swap
|
||||
* @param _minOutput Minimum amount of token to swap
|
||||
*/
|
||||
|
||||
// function swap(
|
||||
// address _token,
|
||||
// uint256 _amount,
|
||||
// uint256 _minOutput
|
||||
// ) external returns (string memory _eventName, bytes memory _eventParam);
|
||||
// TODO
|
||||
// function to support via Feeders or separate function?
|
||||
}
|
||||
|
||||
contract ConnectV2mStable is mStableResolver {
|
||||
|
|
|
@ -17,12 +17,16 @@ export const TEN_DAYS = BN.from(60 * 60 * 24 * 10);
|
|||
export const ONE_WEEK = BN.from(60 * 60 * 24 * 7);
|
||||
export const ONE_YEAR = BN.from(60 * 60 * 24 * 365);
|
||||
|
||||
export const connectorName = "MStable";
|
||||
|
||||
interface TokenData {
|
||||
tokenAddress: string;
|
||||
tokenWhaleAddress?: string;
|
||||
feederPool?: string;
|
||||
}
|
||||
|
||||
export const toEther = (amount: BN) => ethers.utils.formatEther(amount);
|
||||
|
||||
export const getToken = (tokenSymbol: string): TokenData => {
|
||||
switch (tokenSymbol) {
|
||||
case "MTA":
|
||||
|
@ -40,6 +44,10 @@ export const getToken = (tokenSymbol: string): TokenData => {
|
|||
tokenAddress: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
|
||||
tokenWhaleAddress: "0x49854708A8c42eEB837A97Dd97D597890CEb1334"
|
||||
};
|
||||
case "USDC":
|
||||
return {
|
||||
tokenAddress: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174"
|
||||
};
|
||||
case "imUSD":
|
||||
return {
|
||||
tokenAddress: "0x5290Ad3d83476CA6A2b178Cd9727eE1EF72432af"
|
||||
|
|
Loading…
Reference in New Issue
Block a user