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,
|
address platformToken,
|
||||||
uint256 platformAmount
|
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";
|
import "hardhat/console.sol";
|
||||||
|
|
||||||
abstract contract mStableResolver is Events, Helpers {
|
abstract contract mStableResolver is Events, Helpers {
|
||||||
|
//
|
||||||
/***************************************
|
/***************************************
|
||||||
CORE
|
CORE
|
||||||
****************************************/
|
****************************************/
|
||||||
|
@ -48,6 +49,7 @@ abstract contract mStableResolver is Events, Helpers {
|
||||||
uint256 _amount,
|
uint256 _amount,
|
||||||
uint256 _minOut
|
uint256 _minOut
|
||||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||||
|
//
|
||||||
require(
|
require(
|
||||||
IMasset(mUsdToken).bAssetIndexes(_token) != 0,
|
IMasset(mUsdToken).bAssetIndexes(_token) != 0,
|
||||||
"Token not a bAsset"
|
"Token not a bAsset"
|
||||||
|
@ -81,6 +83,7 @@ abstract contract mStableResolver is Events, Helpers {
|
||||||
uint256 _minOut,
|
uint256 _minOut,
|
||||||
address _path
|
address _path
|
||||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||||
|
//
|
||||||
require(_path != address(0), "Path must be set");
|
require(_path != address(0), "Path must be set");
|
||||||
require(
|
require(
|
||||||
IMasset(mUsdToken).bAssetIndexes(_token) == 0,
|
IMasset(mUsdToken).bAssetIndexes(_token) == 0,
|
||||||
|
@ -105,6 +108,7 @@ abstract contract mStableResolver is Events, Helpers {
|
||||||
* @return _eventName Event name
|
* @return _eventName Event name
|
||||||
* @return _eventParam Event parameters
|
* @return _eventParam Event parameters
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function withdraw(uint256 _credits)
|
function withdraw(uint256 _credits)
|
||||||
external
|
external
|
||||||
returns (string memory _eventName, bytes memory _eventParam)
|
returns (string memory _eventName, bytes memory _eventParam)
|
||||||
|
@ -130,6 +134,7 @@ abstract contract mStableResolver is Events, Helpers {
|
||||||
uint256 _credits,
|
uint256 _credits,
|
||||||
uint256 _minOut
|
uint256 _minOut
|
||||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||||
|
//
|
||||||
require(
|
require(
|
||||||
IMasset(mUsdToken).bAssetIndexes(_token) != 0,
|
IMasset(mUsdToken).bAssetIndexes(_token) != 0,
|
||||||
"Token not a bAsset"
|
"Token not a bAsset"
|
||||||
|
@ -164,6 +169,7 @@ abstract contract mStableResolver is Events, Helpers {
|
||||||
uint256 _minOut,
|
uint256 _minOut,
|
||||||
address _path
|
address _path
|
||||||
) external returns (string memory _eventName, bytes memory _eventParam) {
|
) external returns (string memory _eventName, bytes memory _eventParam) {
|
||||||
|
//
|
||||||
require(_path != address(0), "Path must be set");
|
require(_path != address(0), "Path must be set");
|
||||||
require(
|
require(
|
||||||
IMasset(mUsdToken).bAssetIndexes(_token) == 0,
|
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
|
Internal
|
||||||
****************************************/
|
****************************************/
|
||||||
|
@ -244,6 +341,7 @@ abstract contract mStableResolver is Events, Helpers {
|
||||||
uint256 _amount,
|
uint256 _amount,
|
||||||
address _path
|
address _path
|
||||||
) internal returns (string memory _eventName, bytes memory _eventParam) {
|
) internal returns (string memory _eventName, bytes memory _eventParam) {
|
||||||
|
//
|
||||||
// 1. Deposit mUSD to Save
|
// 1. Deposit mUSD to Save
|
||||||
approve(TokenInterface(mUsdToken), imUsdToken, _amount);
|
approve(TokenInterface(mUsdToken), imUsdToken, _amount);
|
||||||
uint256 credits = ISavingsContractV2(imUsdToken).depositSavings(
|
uint256 credits = ISavingsContractV2(imUsdToken).depositSavings(
|
||||||
|
@ -315,22 +413,6 @@ abstract contract mStableResolver is Events, Helpers {
|
||||||
a = TokenInterface(_rewardToken).balanceOf(address(this));
|
a = TokenInterface(_rewardToken).balanceOf(address(this));
|
||||||
b = TokenInterface(_platformToken).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 {
|
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_WEEK = BN.from(60 * 60 * 24 * 7);
|
||||||
export const ONE_YEAR = BN.from(60 * 60 * 24 * 365);
|
export const ONE_YEAR = BN.from(60 * 60 * 24 * 365);
|
||||||
|
|
||||||
|
export const connectorName = "MStable";
|
||||||
|
|
||||||
interface TokenData {
|
interface TokenData {
|
||||||
tokenAddress: string;
|
tokenAddress: string;
|
||||||
tokenWhaleAddress?: string;
|
tokenWhaleAddress?: string;
|
||||||
feederPool?: string;
|
feederPool?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const toEther = (amount: BN) => ethers.utils.formatEther(amount);
|
||||||
|
|
||||||
export const getToken = (tokenSymbol: string): TokenData => {
|
export const getToken = (tokenSymbol: string): TokenData => {
|
||||||
switch (tokenSymbol) {
|
switch (tokenSymbol) {
|
||||||
case "MTA":
|
case "MTA":
|
||||||
|
@ -40,6 +44,10 @@ export const getToken = (tokenSymbol: string): TokenData => {
|
||||||
tokenAddress: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
|
tokenAddress: "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
|
||||||
tokenWhaleAddress: "0x49854708A8c42eEB837A97Dd97D597890CEb1334"
|
tokenWhaleAddress: "0x49854708A8c42eEB837A97Dd97D597890CEb1334"
|
||||||
};
|
};
|
||||||
|
case "USDC":
|
||||||
|
return {
|
||||||
|
tokenAddress: "0x2791bca1f2de4661ed88a30c99a7a9449aa84174"
|
||||||
|
};
|
||||||
case "imUSD":
|
case "imUSD":
|
||||||
return {
|
return {
|
||||||
tokenAddress: "0x5290Ad3d83476CA6A2b178Cd9727eE1EF72432af"
|
tokenAddress: "0x5290Ad3d83476CA6A2b178Cd9727eE1EF72432af"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user