LoopingHook
Looping Hook contract, which uses the same implementation as MarginTradingHook contract.
View Functions
swapHelper
Get the swap helper contract that this contract swaps between quote and base assets.
function swapHelper() external view returns (address swapHelper);
lastOrderId
Last running order (take profit or stop loss) id.
function lastOrderId() external view returns (uint256 orderId);
getBaseAssetAndQuoteAsset
Get a unique base and quote assets from a pair of tokens.
function getBaseAssetAndQuoteAsset(address _tokenA, address _tokenB) external view returns (address baseAsset, address quoteAsset);
getMarginPos
Get a looping position.
function getMarginPos(uint256 _initPosId) external view returns (MarginPos memory pos);
struct MarginPos {
address collPool; // lending pool to deposit holdToken
address borrPool; // lending pool to borrow borrowToken
address baseAsset; // base asset of position
address quoteAsset; // quote asset of position
bool isLongBaseAsset; // long base asset or not
}
External Functions
openPos
Open a new looping position by swapping borrPool
's underlying token into collPool
's underlying token via swap data _data
.
The fucntion perform multicall
to InitCore:
borrow tokens
callback (perform swap from borrow token to collateral token)
deposit collateral tokens to lending pool
collateralize inTokens
The swap callback is routed back to this contract's coreCallback
which performs a swap using _data
on swapHelper
contract with slippage control amtOut
.
SwapInfo memory swapInfo = SwapInfo(_param.initPosId, SwapType.OpenExactIn, borrToken, collToken, _param.minAmtOut, _param.data);
multicallData[1] = abi.encodeWithSelector(IInitCore(CORE).callback.selector, address(this), 0, abi.encode(swapInfo));
struct SwapInfo {
uint initPosId; // nft id
SwapType swapType; // swap type
address tokenIn; // token to swap
address tokenOut; // token to receive from swap
uint amtOut; // token amount out info for the swap
bytes data; // swap data
}
enum SwapType {
OpenExactIn,
CloseExactIn,
CloseExactOut
}
function openPos(
uint16 _mode,
address _viewer,
address _tokenIn,
uint256 _amtIn,
address _borrPool,
uint256 _borrAmt,
address _collPool,
bytes calldata _data,
uint256 _minAmtOut
) external payable returns (uint256 posId, uint256 initPosId, uint256 amtOut);
_mode
uint16
mode to open a looping position
_viewer
address
viewer address that represents the actual position owner
_tokenIn
address
token to take from position owner
_amtIn
uint256
amount of tokenIn
to take from position owner
_borrPool
address
lending pool to borrow
_borrAmt
uint256
amount of _borrPool
's underlying token to borrow
_collPool
address
lending pool to use as collateral
_data
bytes
swap data to be used in InitCore's callback
function
_minAmtOut
uint256
min amount out from swap as slippage control
Returns:
posId
uint256
running position id for position owner
initPosId
uint256
InitCore's position id
amtOut
uint256
amount of token received from swap using _data
increasePos
Increase an existing position's size by taking token from position owner and/or borrow more tokens.
function increasePos(
uint256 _posId,
address _tokenIn,
uint256 _amtIn,
uint256 _borrAmt,
bytes calldata _data,
uint256 _minAmtOut
) external payable returns (uint256 amtOut);
_posId
uint256
owner's position id on this hook to increase position size
_tokenIn
address
token to take from position owner
_amtIn
uint256
amount of tokenIn
to take from position owner
_borrAmt
uint256
amount of _borrPool
's underlying token to borrow
_data
bytes
swap data to be used in InitCore's callback
function
_minAmtOut
uint256
min amount out from swap as slippage control
Returns:
amtOut
uint256
amount of token received from swap using _data
addCollateral
Decrease position's leverage by adding more collateral token.
function addCollateral(uint256 _posId, uint256 _amtIn) external payable;
Parameters:
_posId
uint256
owner's position id on this hook
_amtIn
uint256
amount of collateral token's underlying token to take from owner
removeCollateral
Increase position's leverage by removing collateral token.
function removeCollateral(uint _posId, uint256 _shares, bool _returnNative) external;
Parameters:
_posId
uint256
owner's position id on this hook
_shares
uint256
amount of shares to remove collateral token
_returnNative
bool
whether to unwrap wrapped native token to native token to return to position owner
repayDebt
Decrease position's leverage by repaying borrow token.
function repayDebt(uint256 _posId, uint256 _repayShares) external returns (uint256 repayAmt);
Parameters:
_posId
uint256
owner's position id on this hook
_repayShares
uint256
amount of shares to repay borrow token to borrow lending pool
Returns:
repayAmt
uint256
amount of underlying token of borrow lending pool repaid
reducePos
Reduce an existing position's size by withdrawing collateral and repaying borrow token. The withdrawn collateral token can be swapped to repay borrow token using _data
. The user can specify which token to receive, if there is still left after swap.
function reducePos(
uint256 _posId,
uint256 _collAmt,
uint256 _repayShares,
address _tokenOut,
uint256 _minAmtOut,
bool _returnNative,
bytes calldata _data
) external returns (uint256 amtOut);
Parameters:
_posId
uint256
owner's position id on this hook
_collAmt
uint256
collateral amount to reduce from position
_repayShares
uint256
amount of shares to repay borrow token to borrow lending pool
_tokenOut
address
token to receive from reducing position (either collalteral's underlying token or borrow's underlying token)
_minAmtOut
uint256
min amount out from swap as slippage control
_returnNative
bool
whether to unwrap wrapped native token to native token to return to position owner
_data
bytes
swap data to be used in InitCore's callback
function
Returns:
amtOut
uint256
amount of token received from swap using _data
Last updated