Lender.sol
This document describes the functions, attributes and modifiers in Lender.sol
Lender
Author: Sourabh Marathe, Julian Traversa, Rob Robbins
The lender contract executes loans on behalf of users
The contract holds the principal tokens and mints an ERC-5095 tokens to users to represent their loans
State Variables
HOLD
minimum wait before the admin may withdraw funds or change the fee rate
admin
address that is allowed to set and withdraw fees, disable principals, etc. It is commonly used in the authorized modifier.
marketPlace
address of the MarketPlace contract, used to access the markets mapping
paused
mapping that determines if a principal has been paused by the admin
halted
flag that allows admin to stop all lending and minting across the entire protocol
swivelAddr
contract used to execute swaps on Swivel's exchange
pendleAddr
a SushiSwap router used by Pendle to execute swaps
apwineAddr
a pool router used by APWine to execute swaps
premiums
a mapping that tracks the amount of unswapped premium by market. This underlying is later transferred to the Redeemer during Swivel's redeem call
feenominator
this value determines the amount of fees paid on loans
feeChange
represents a point in time where the feenominator may change
MIN_FEENOMINATOR
represents a minimum that the feenominator must exceed
fees
maps underlying tokens to the amount of fees accumulated for that token
withdrawals
maps a token address to a point in time, a hold, after which a withdrawal can be made
_NOT_ENTERED
_ENTERED
_status
MAX_VALUE
maximum amount of value that can flow through a protocol in a day (in USD)
protocolFlow
maps protocols to how much value, in USD, has flowed through each protocol
periodStart
timestamp from which values flowing through protocol has begun
etherPrice
estimated price of ether, set by the admin
Functions
authorized
ensures that only a certain address can call the function
Parameters
a
address
address that msg.sender must be to be authorized
unpaused
reverts on all markets where the paused mapping returns true
Parameters
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
p
uint8
principal value according to the MarketPlace's Principals Enum
matured
reverts if called after maturity
Parameters
m
uint256
maturity (timestamp) of the market
nonReentrant
prevents users from re-entering contract
constructor
initializes the Lender contract
Parameters
s
address
the Swivel contract
p
address
the Pendle contract
a
address
the APWine contract
approve
approves the redeemer contract to spend the principal tokens held by the lender contract.
Parameters
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
r
address
the address being approved, in this case the redeemer contract
Returns
<none>
bool
bool true if the approval was successful
approve
bulk approves the usage of addresses at the given ERC20 addresses.
the lengths of the inputs must match because the arrays are paired by index
Parameters
u
address[]
array of ERC20 token addresses that will be approved on
a
address[]
array of addresses that will be approved
Returns
<none>
bool
true if successful
approve
approves market contracts that require lender approval
Parameters
u
address
address of an underlying asset
a
address
APWine's router contract
e
address
Element's vault contract
n
address
Notional's token contract
p
address
Sense's periphery contract
setAdmin
sets the admin address
Parameters
a
address
address of a new admin
Returns
<none>
bool
bool true if successful
setFee
sets the feenominator to the given value
Parameters
f
uint256
the new value of the feenominator, fees are not collected when the feenominator is 0
Returns
<none>
bool
bool true if successful
setMarketPlace
sets the address of the marketplace contract which contains the addresses of all the fixed rate markets
Parameters
m
address
the address of the marketplace contract
Returns
<none>
bool
bool true if the address was set
setEtherPrice
sets the ethereum price which is used in rate limiting
Parameters
p
uint256
the new price
Returns
<none>
bool
bool true if the price was set
mint
mint swaps the sender's principal tokens for Illuminate's ERC5095 tokens in effect, this opens a new fixed rate position for the sender on Illuminate
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint256
amount being minted
Returns
<none>
bool
bool true if the mint was successful
lend
lend method for the Illuminate and Yield protocols
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint256
amount of underlying tokens to lend
y
address
Yield Space Pool for the principal token
minimum
uint256
slippage limit, minimum amount to PTs to buy
Returns
<none>
uint256
uint256 the amount of principal tokens lent out
lend
lend method signature for Swivel
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint256[]
array of amounts of underlying tokens lent to each order in the orders array
y
address
Yield Space Pool for the Illuminate PT in this market
o
Order.Swivel[]
array of Swivel orders being filled
s
Components.Swivel[]
array of signatures for each order in the orders array
e
bool
flag to indicate if returned funds should be swapped in Yield Space Pool
premiumSlippage
uint256
slippage limit, minimum amount to PTs to buy
Returns
<none>
uint256
uint256 the amount of principal tokens lent out
lend
lend method signature for Element
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint256
amount of underlying tokens to lend
r
uint256
slippage limit, minimum amount to PTs to buy
d
uint256
deadline is a timestamp by which the swap must be executed
e
address
Element pool that is lent to
i
bytes32
the id of the pool
Returns
<none>
uint256
uint256 the amount of principal tokens lent out
lend
lend method signature for Pendle
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint256
amount of underlying tokens to lend
r
uint256
slippage limit, minimum amount to PTs to buy
g
ApproxParams.Pendle
guess parameters for the swap
market
address
contract that corresponds to the market for the PT
Returns
<none>
uint256
uint256 the amount of principal tokens lent out
lend
lend method signature for Tempus and APWine
Parameters
p
uint8
value of a specific principal according to the Illuminate Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint256
amount of principal tokens to lend
r
uint256
minimum amount to return when executing the swap (sets a limit to slippage)
d
uint256
deadline is a timestamp by which the swap must be executed
x
address
Tempus or APWine AMM that executes the swap
Returns
<none>
uint256
uint256 the amount of principal tokens lent out
lend
lend method signature for Sense
this method can be called before maturity to lend to Sense while minting Illuminate tokens
Sense provides a [divider] contract that splits [target] assets (underlying) into PTs and YTs. Each [target] asset has a [series] of contracts, each identifiable by their [maturity].
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint128
amount of underlying tokens to lend
r
uint256
slippage limit, minimum amount to PTs to buy
x
address
periphery contract that is used to conduct the swap
s
uint256
Sense's maturity for the given market
adapter
address
Sense's adapter necessary to facilitate the swap
Returns
<none>
uint256
uint256 the amount of principal tokens lent out
lend
lend method signature for Notional
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
a
uint256
amount of underlying tokens to lend
r
uint256
slippage limit, minimum amount to PTs to buy
Returns
<none>
uint256
uint256 the amount of principal tokens lent out
scheduleWithdrawal
allows the admin to schedule the withdrawal of tokens
Parameters
e
address
address of (erc20) token to withdraw
Returns
<none>
bool
bool true if successful
blockWithdrawal
emergency function to block unplanned withdrawals
Parameters
e
address
address of token withdrawal to block
Returns
<none>
bool
bool true if successful
scheduleFeeChange
allows the admin to schedule a change to the fee denominators
blockFeeChange
Emergency function to block unplanned changes to fee structure
withdraw
allows the admin to withdraw the given token, provided the holding period has been observed
Parameters
e
address
Address of token to withdraw
Returns
<none>
bool
bool true if successful
withdrawFee
withdraws accumulated lending fees of the underlying token
Parameters
e
address
address of the underlying token to withdraw
Returns
<none>
bool
bool true if successful
pause
pauses a market and prevents execution of all lending for that principal
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
b
bool
bool representing whether to pause or unpause
Returns
<none>
bool
bool true if successful
pauseIlluminate
pauses Illuminate's redeem, mint and lend methods from being used
Parameters
b
bool
bool representing whether to pause or unpause Illuminate
Returns
<none>
bool
bool true if successfully set
transferFYTs
Tranfers FYTs to Redeemer (used specifically for APWine redemptions)
Parameters
f
address
FYT contract address
a
uint256
amount of tokens to send to the redeemer
transferPremium
Transfers premium from the market to Redeemer (used specifically for Swivel redemptions)
Parameters
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
batch
Allows batched call to self (this contract).
Parameters
c
bytes[]
An array of inputs for each call.
yield
swaps underlying premium via a Yield Space Pool
this method is only used by the Yield, Illuminate and Swivel protocols
Parameters
u
address
address of an underlying asset
y
address
Yield Space Pool for the principal token
a
uint256
amount of underlying tokens to lend
r
address
the receiving address for PTs
p
address
the principal token in the Yield Space Pool
m
uint256
the minimum amount to purchase
Returns
<none>
uint256
uint256 the amount of tokens sent to the Yield Space Pool
swivelAmount
returns the amount of underlying tokens to be used in a Swivel lend
swivelVerify
reverts if any orders are not for the market
elementSwap
executes a swap for and verifies receipt of Element PTs
apwineTokenPath
returns array token path required for APWine's swap method
Returns
<none>
uint256[]
array of uint256[] as laid out in APWine's docs
apwinePairPath
returns array pair path required for APWine's swap method
Returns
<none>
uint256[]
array of uint256[] as laid out in APWine's docs
principalToken
retrieves the ERC5095 token for the given market
Parameters
u
address
address of an underlying asset
m
uint256
maturity (timestamp) of the market
Returns
<none>
address
address of the ERC5095 token for the market
convertDecimals
converts principal decimal amount to underlying's decimal amount
Parameters
u
address
address of an underlying asset
p
address
address of a principal token
a
uint256
amount denominated in principal token's decimals
Returns
<none>
uint256
uint256 in underlying decimals
rateLimit
limits the amount of funds (in USD value) that can flow through a principal in a day
Parameters
p
uint8
principal value according to the MarketPlace's Principals Enum
u
address
address of an underlying asset
a
uint256
amount being minted which is normalized to 18 decimals prior to check
Returns
<none>
bool
bool true if successful, reverts otherwise
Events
Lend
emitted upon lending to a protocol
Mint
emitted upon minting Illuminate principal tokens
ScheduleWithdrawal
emitted upon scheduling a withdrawal
BlockWithdrawal
emitted upon blocking a scheduled withdrawal
SetAdmin
emitted upon changing the admin
SetFee
emitted upon setting the fee rate
ScheduleFeeChange
emitted upon scheduling a fee change
BlockFeeChange
emitted upon blocking a scheduled fee change
PausePrincipal
emitted upon pausing or unpausing of a principal
PauseIlluminate
emitted upon pausing or unpausing minting, lending and redeeming
Last updated