PtHandler

Git Source

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

NameTypeDescription

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

NameTypeDescription

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);