PtHandler
Inherits: IonHandlerBase, IPMarketSwapCallback
This contract allows for easy creation of leverage positions for PT collateralized Ion markets.
State Variables
MARKET
IPMarketV3 public immutable MARKET;
SY
IStandardizedYield public immutable SY;
PT
IERC20 public immutable PT;
YT
IERC20 public immutable YT;
flashswapInitiated
uint256 private flashswapInitiated = 1;
Functions
constructor
Creates a new PtHandler
instance
constructor(
IonPool pool,
GemJoin join,
Whitelist whitelist,
IPMarketV3 _market
)
IonHandlerBase(0, pool, join, whitelist);
Parameters
pool
IonPool
The related IonPool.
join
GemJoin
The related GemJoin.
whitelist
Whitelist
The whitelist contract.
_market
IPMarketV3
The related Pendle market.
ptLeverage
Allows a borrower to create a leveraged position on Ion Protocol
Transfer PT from user -> Flashswap PT token -> Deposit all PT into IonPool -> Borrow base asset -> Mint SY using base asset -> Repay Flashswap with SY.
function ptLeverage(
uint256 initialDeposit,
uint256 resultingAdditionalCollateral,
uint256 maxResultingDebt,
uint256 deadline,
bytes32[] calldata proof
)
external
onlyWhitelistedBorrowers(proof)
checkDeadline(deadline);
swapCallback
This function should never be called directly.
On small enough swaps, the SY to send back can be 0. This function can only be called by the market. This function can only be called by market if the swap was initiated by this contract.
function swapCallback(int256 ptToAccount, int256 syToAccount, bytes calldata data) external;
Parameters
ptToAccount
int256
Amount of PT sent from the perspective of the pool (negative means pool is sending, positive means user is receiving)
syToAccount
int256
Amount of SY sent from the perspective of the pool (negative means pool is sending, positive means user is receiving)
data
bytes
Arbitrary data passed by the market
Errors
InvalidGemJoin
error InvalidGemJoin(address invalidJoin);
MarketMustBeCaller
error MarketMustBeCaller(address caller);
ExternalFlashswapNotAllowed
error ExternalFlashswapNotAllowed();
InvalidSwapDirection
error InvalidSwapDirection();
UnexpectedSyOut
error UnexpectedSyOut(uint256 amountSyOut, uint256 expectedSyOut);
FlashswapTooExpensive
error FlashswapTooExpensive(uint256 amountSyIn, uint256 maxResultingDebt);