IPegStabilityModule
Volt Protocol
Fei Peg Stability Module
The Fei PSM is a contract which holds a reserve of assets in order to exchange FEI at $1 of underlying assets with a fee. mint()
- buy FEI for $1 of underlying tokens redeem()
- sell FEI back for $1 of the same The contract has a reservesThreshold() of underlying meant to stand ready for redemptions. Any surplus reserves can be sent into the PCV using allocateSurplus()
The contract is a PCVDeposit - to track reserves OracleRef - to determine price of underlying, and RateLimitedMinter - to stop infinite mints and related issues (but this is in the implementation due to inheritance-linearization difficulties) Inspired by MakerDAO PSM, code written without reference
Methods
MAX_FEE
function MAX_FEE() external view returns (uint256)
the max mint and redeem fee in basis points
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
allocateSurplus
function allocateSurplus() external nonpayable
send any surplus reserves to the PCV allocation
getMaxMintAmountOut
function getMaxMintAmountOut() external view returns (uint256)
the maximum mint amount out
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
getMintAmountOut
function getMintAmountOut(uint256 amountIn) external view returns (uint256 amountFeiOut)
calculate the amount of FEI out for a given amountIn
of underlying
Parameters
Name | Type | Description |
---|---|---|
amountIn | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
amountFeiOut | uint256 | undefined |
getRedeemAmountOut
function getRedeemAmountOut(uint256 amountFeiIn) external view returns (uint256 amountOut)
calculate the amount of underlying out for a given amountFeiIn
of FEI
Parameters
Name | Type | Description |
---|---|---|
amountFeiIn | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
amountOut | uint256 | undefined |
hasSurplus
function hasSurplus() external view returns (bool)
a flag for whether the current balance is above (true) or below and equal (false) to the reservesThreshold
Returns
Name | Type | Description |
---|---|---|
_0 | bool | undefined |
mint
function mint(address to, uint256 amountIn, uint256 minAmountOut) external nonpayable returns (uint256 amountFeiOut)
mint amountFeiOut
FEI to address to
for amountIn
underlying tokens
see getMintAmountOut() to pre-calculate amount out
Parameters
Name | Type | Description |
---|---|---|
to | address | undefined |
amountIn | uint256 | undefined |
minAmountOut | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
amountFeiOut | uint256 | undefined |
mintFeeBasisPoints
function mintFeeBasisPoints() external view returns (uint256)
the mint fee vs oracle price in basis point terms
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
redeem
function redeem(address to, uint256 amountFeiIn, uint256 minAmountOut) external nonpayable returns (uint256 amountOut)
redeem amountFeiIn
FEI for amountOut
underlying tokens and send to address to
see getRedeemAmountOut() to pre-calculate amount out
Parameters
Name | Type | Description |
---|---|---|
to | address | undefined |
amountFeiIn | uint256 | undefined |
minAmountOut | uint256 | undefined |
Returns
Name | Type | Description |
---|---|---|
amountOut | uint256 | undefined |
redeemFeeBasisPoints
function redeemFeeBasisPoints() external view returns (uint256)
the redemption fee vs oracle price in basis point terms
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
reservesSurplus
function reservesSurplus() external view returns (int256)
an integer representing the positive surplus or negative deficit of contract balance vs reservesThreshold
Returns
Name | Type | Description |
---|---|---|
_0 | int256 | undefined |
reservesThreshold
function reservesThreshold() external view returns (uint256)
the ideal amount of reserves for the contract to hold for redemptions
Returns
Name | Type | Description |
---|---|---|
_0 | uint256 | undefined |
setMintFee
function setMintFee(uint256 newMintFeeBasisPoints) external nonpayable
set the mint fee vs oracle price in basis point terms
Parameters
Name | Type | Description |
---|---|---|
newMintFeeBasisPoints | uint256 | undefined |
setRedeemFee
function setRedeemFee(uint256 newRedeemFeeBasisPoints) external nonpayable
set the redemption fee vs oracle price in basis point terms
Parameters
Name | Type | Description |
---|---|---|
newRedeemFeeBasisPoints | uint256 | undefined |
setReservesThreshold
function setReservesThreshold(uint256 newReservesThreshold) external nonpayable
set the ideal amount of reserves for the contract to hold for redemptions
Parameters
Name | Type | Description |
---|---|---|
newReservesThreshold | uint256 | undefined |
setSurplusTarget
function setSurplusTarget(contract IPCVDeposit newTarget) external nonpayable
set the target for sending surplus reserves
Parameters
Name | Type | Description |
---|---|---|
newTarget | contract IPCVDeposit | undefined |
surplusTarget
function surplusTarget() external view returns (contract IPCVDeposit)
the PCV deposit target to send surplus reserves
Returns
Name | Type | Description |
---|---|---|
_0 | contract IPCVDeposit | undefined |
underlyingToken
function underlyingToken() external view returns (contract IERC20)
the underlying token exchanged for FEI
Returns
Name | Type | Description |
---|---|---|
_0 | contract IERC20 | undefined |
Events
AllocateSurplus
event AllocateSurplus(address indexed caller, uint256 amount)
event emitted when excess PCV is allocated
Parameters
Name | Type | Description |
---|---|---|
caller indexed | address | undefined |
amount | uint256 | undefined |
MaxFeeUpdate
event MaxFeeUpdate(uint256 oldMaxFee, uint256 newMaxFee)
event emitted when a new max fee is set
Parameters
Name | Type | Description |
---|---|---|
oldMaxFee | uint256 | undefined |
newMaxFee | uint256 | undefined |
Mint
event Mint(address to, uint256 amountIn, uint256 amountFeiOut)
event emitted when fei gets minted
Parameters
Name | Type | Description |
---|---|---|
to | address | undefined |
amountIn | uint256 | undefined |
amountFeiOut | uint256 | undefined |
MintFeeUpdate
event MintFeeUpdate(uint256 oldMintFee, uint256 newMintFee)
event emitted when a new mint fee is set
Parameters
Name | Type | Description |
---|---|---|
oldMintFee | uint256 | undefined |
newMintFee | uint256 | undefined |
Redeem
event Redeem(address to, uint256 amountFeiIn, uint256 amountAssetOut)
event emitted upon a redemption
Parameters
Name | Type | Description |
---|---|---|
to | address | undefined |
amountFeiIn | uint256 | undefined |
amountAssetOut | uint256 | undefined |
RedeemFeeUpdate
event RedeemFeeUpdate(uint256 oldRedeemFee, uint256 newRedeemFee)
event emitted when a new redeem fee is set
Parameters
Name | Type | Description |
---|---|---|
oldRedeemFee | uint256 | undefined |
newRedeemFee | uint256 | undefined |
ReservesThresholdUpdate
event ReservesThresholdUpdate(uint256 oldReservesThreshold, uint256 newReservesThreshold)
event emitted when reservesThreshold is updated
Parameters
Name | Type | Description |
---|---|---|
oldReservesThreshold | uint256 | undefined |
newReservesThreshold | uint256 | undefined |
SurplusTargetUpdate
event SurplusTargetUpdate(contract IPCVDeposit oldTarget, contract IPCVDeposit newTarget)
event emitted when surplus target is updated
Parameters
Name | Type | Description |
---|---|---|
oldTarget | contract IPCVDeposit | undefined |
newTarget | contract IPCVDeposit | undefined |