Skip to main content

INonCustodialPSM

Volt Protocol

Fei Peg Stability Module

The Fei PSM is a contract which pulls reserve assets from PCV Deposits 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 is a OracleRef - to determine price of underlying, and RateLimitedReplenishable - to stop infinite mints and related DOS issues 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

NameTypeDescription
_0uint256undefined

getMaxMintAmountOut

function getMaxMintAmountOut() external view returns (uint256)

the maximum mint amount out

Returns

NameTypeDescription
_0uint256undefined

getMintAmountOut

function getMintAmountOut(uint256 amountIn) external view returns (uint256 amountFeiOut)

calculate the amount of FEI out for a given amountIn of underlying

Parameters

NameTypeDescription
amountInuint256undefined

Returns

NameTypeDescription
amountFeiOutuint256undefined

getRedeemAmountOut

function getRedeemAmountOut(uint256 amountFeiIn) external view returns (uint256 amountOut)

calculate the amount of underlying out for a given amountFeiIn of FEI

Parameters

NameTypeDescription
amountFeiInuint256undefined

Returns

NameTypeDescription
amountOutuint256undefined

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

NameTypeDescription
toaddressundefined
amountInuint256undefined
minAmountOutuint256undefined

Returns

NameTypeDescription
amountFeiOutuint256undefined

mintFeeBasisPoints

function mintFeeBasisPoints() external view returns (uint256)

the mint fee vs oracle price in basis point terms

Returns

NameTypeDescription
_0uint256undefined

pcvDeposit

function pcvDeposit() external view returns (contract IPCVDeposit)

the PCV deposit target to deposit and withdraw from

Returns

NameTypeDescription
_0contract IPCVDepositundefined

rateLimitedMinter

function rateLimitedMinter() external view returns (contract IGlobalRateLimitedMinter)

Rate Limited Minter contract that will be called when FEI needs to be minted

Returns

NameTypeDescription
_0contract IGlobalRateLimitedMinterundefined

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

NameTypeDescription
toaddressundefined
amountFeiInuint256undefined
minAmountOutuint256undefined

Returns

NameTypeDescription
amountOutuint256undefined

redeemFeeBasisPoints

function redeemFeeBasisPoints() external view returns (uint256)

the redemption fee vs oracle price in basis point terms

Returns

NameTypeDescription
_0uint256undefined

setGlobalRateLimitedMinter

function setGlobalRateLimitedMinter(contract IGlobalRateLimitedMinter newMinter) external nonpayable

set the target to call for FEI minting

Parameters

NameTypeDescription
newMintercontract IGlobalRateLimitedMinterundefined

setMintFee

function setMintFee(uint256 newMintFeeBasisPoints) external nonpayable

set the mint fee vs oracle price in basis point terms

Parameters

NameTypeDescription
newMintFeeBasisPointsuint256undefined

setPCVDeposit

function setPCVDeposit(contract IPCVDeposit newTarget) external nonpayable

set the target for sending surplus reserves

Parameters

NameTypeDescription
newTargetcontract IPCVDepositundefined

setRedeemFee

function setRedeemFee(uint256 newRedeemFeeBasisPoints) external nonpayable

set the redemption fee vs oracle price in basis point terms

Parameters

NameTypeDescription
newRedeemFeeBasisPointsuint256undefined

underlyingToken

function underlyingToken() external view returns (contract IERC20)

the underlying token exchanged for FEI

Returns

NameTypeDescription
_0contract IERC20undefined

withdrawERC20

function withdrawERC20(address token, address to, uint256 amount) external nonpayable

withdraw ERC20 from the contract

Parameters

NameTypeDescription
tokenaddressundefined
toaddressundefined
amountuint256undefined

Events

GlobalRateLimitedMinterUpdate

event GlobalRateLimitedMinterUpdate(contract IGlobalRateLimitedMinter oldMinter, contract IGlobalRateLimitedMinter newMinter)

event emitted when global rate limited minter is updated

Parameters

NameTypeDescription
oldMintercontract IGlobalRateLimitedMinterundefined
newMintercontract IGlobalRateLimitedMinterundefined

MaxFeeUpdate

event MaxFeeUpdate(uint256 oldMaxFee, uint256 newMaxFee)

event emitted when a new max fee is set

Parameters

NameTypeDescription
oldMaxFeeuint256undefined
newMaxFeeuint256undefined

Mint

event Mint(address to, uint256 amountIn, uint256 amountFeiOut)

event emitted when fei gets minted

Parameters

NameTypeDescription
toaddressundefined
amountInuint256undefined
amountFeiOutuint256undefined

MintFeeUpdate

event MintFeeUpdate(uint256 oldMintFee, uint256 newMintFee)

event emitted when a new mint fee is set

Parameters

NameTypeDescription
oldMintFeeuint256undefined
newMintFeeuint256undefined

MintingPaused

event MintingPaused(address account)

event that is emitted when minting is paused

Parameters

NameTypeDescription
accountaddressundefined

MintingUnpaused

event MintingUnpaused(address account)

event that is emitted when minting is unpaused

Parameters

NameTypeDescription
accountaddressundefined

PCVDepositUpdate

event PCVDepositUpdate(contract IPCVDeposit oldTarget, contract IPCVDeposit newTarget)

event emitted when surplus target is updated

Parameters

NameTypeDescription
oldTargetcontract IPCVDepositundefined
newTargetcontract IPCVDepositundefined

Redeem

event Redeem(address to, uint256 amountFeiIn, uint256 amountAssetOut)

event emitted upon a redemption

Parameters

NameTypeDescription
toaddressundefined
amountFeiInuint256undefined
amountAssetOutuint256undefined

RedeemFeeUpdate

event RedeemFeeUpdate(uint256 oldRedeemFee, uint256 newRedeemFee)

event emitted when a new redeem fee is set

Parameters

NameTypeDescription
oldRedeemFeeuint256undefined
newRedeemFeeuint256undefined

RedemptionsPaused

event RedemptionsPaused(address account)

event that is emitted when redemptions are paused

Parameters

NameTypeDescription
accountaddressundefined

RedemptionsUnpaused

event RedemptionsUnpaused(address account)

event that is emitted when redemptions are unpaused

Parameters

NameTypeDescription
accountaddressundefined

ReservesThresholdUpdate

event ReservesThresholdUpdate(uint256 oldReservesThreshold, uint256 newReservesThreshold)

event emitted when reservesThreshold is updated

Parameters

NameTypeDescription
oldReservesThresholduint256undefined
newReservesThresholduint256undefined

WithdrawERC20

event WithdrawERC20(address indexed _caller, address indexed _token, address indexed _to, uint256 _amount)

event emitted when ERC20 tokens get withdrawn

Parameters

NameTypeDescription
_caller indexedaddressundefined
_token indexedaddressundefined
_to indexedaddressundefined
_amountuint256undefined