CMPVault

Initialization

constructor

constructor(IERC20 asset_, bytes memory data)

Description

The constructor initializes the CMPVault contract, setting up the initial parameters required.

Parameters

  • asset_: Instance of the ERC20 token (Tether Gold - XAUT) used as collateral to mint aUSDT.

  • data: Encoded data containing essential parameters required for the contract initialization.

Functionality

  1. Asset Initialization: Sets the asset variable to the specified ERC20 token instance.

  2. Decoding Parameters: Decodes the input data to extract the following parameters:

    • collateral: Instance of the collateral token (Tether Gold - XAUT) used.

    • oracle: Oracle contract address.

    • LIQUIDATION_MULTIPLIER: Multiplier used in determining the liquidation threshold.

    • COLLATERALIZATION_RATE: Rate at which collateralization must be maintained.

    • MINT_OPENING_RETURN_FEE: Fee charged for mint and return.

Usage

The constructor is called during the deployment of the CMPVault contract. It initializes the necessary parameters for the functioning of the contract and disables further initializers by calling _disableInitializers().

initialize

function initialize(bytes memory oracleData_, uint64 interest) public initializer

Description

The initialize function further initializes the contract after deployment, setting additional parameters and executing specific actions required for functionality.

Parameters

  • oracleData_: Empty memory bytes.

  • interest: The chosen interest rate.

Functionality

  1. Ownership Initialization: Initializes ownership through the __Ownable_init() function.

  2. Interest: Updates the accrueInfo.interest variable.

  3. Mint Limit Setup: Sets the mintLimit to the maximum allowed value.

  4. Blacklist Callees: Adds the contract's own address, collateral token address, and asset token address to the blacklistedCallees to prevent recursive calls.

  5. Fetching Exchange Rate: Retrieves the current exchange rate from the Oracle contract.

  6. Accrue Function Call: Executes the accrue() function to initialize certain internal values.

Usage

This function is called after the contract deployment to set up additional parameters and perform initial actions required for the contract's functionality.

Write Methods

accrue

function accrue() public

Description

This function is responsible for calculating and accruing interest on outstanding mintings.

Emits

LogAccrue

updateExchangeRate

function updateExchangeRate() public 
    returns (bool updated, uint256 rate)

Description

Updates the exchange rate (see oracle).

Returns

Emits

LogExchangeRate

addCollateral

function addCollateral(address to, uint256 share)
    public virtual onlyWhitelisted(to)

Description

Adds a share amount of collateral token to to.

Your smart contract must approveaddress(this) to transfer the shares:

collateral.approve(address(CMPVault), share);

Parameters

Emits

LogAddCollateral

removeCollateral

function removeCollateral(address to, uint256 share)
    public onlyWhitelisted(msg.sender) solvent

Description

Removes a share amount of collateral token from msg.sender.

Parameters

Emits

LogRemoveCollateral

mint

function mint(address to, uint256 amount)
    public solvent onlyWhitelisted(msg.sender)
    returns (uint256 part, uint256 share)

Description

Mints an amount of asset tokens.

Parameters

Returns

Emits

LogAccrue

LogMint

returning

function returning(address to, uint256 part)
    public returns (uint256 amount)

Description

Returns a loan.

Parameters

Returns

Emits

LogAccrue

LogReturn

manage

function manage(
    uint8[] calldata actions,
    uint256[] calldata values,
    bytes[] calldata datas
) external payable virtual onlyWhitelisted(msg.sender)
    returns (uint256 value1, uint256 value2)

Description

Executes a set of actions and allows composability (contract calls) to other contracts.

The manage function allows to bundle functionality within one contract call while passing return values from one call to the next one.

Actions are defined by a numeric identifier and can return two values, value1 and value2 to the next function. The input arrays actions, values and datas define the sequential actions. In the values array the ether value of a call may be defined.

Whereas calling functions like mint that have the solvent modifier requires solvency at the end of the function, solvency only needs to be guaranteed at the end of the manage function, thereby allowing more complicated operations such as leveraging within one call.

For certain parameters either an external value can be passed in or the identifier USEVALUE1 (-1) or USE_VALUE2 (-2) to access either of the local variables. The following variables are marked in bold italic in the table below. If an action returns one value it is saved as value1, if two are returned they are saved as value1 and value2 respectively. Any action can access these values during the whole duration of the manage call.

The call data for the actions is ABI encoded as listed below.

Parameters

Returns

liquidate

function liquidate(
    address[] memory users,
    uint256[] memory maxMintParts,
    address to,
    ISwapperV2 swapper,
    bytes memory swapperData
) public virtual onlyLiquidators(msg.sender)

Description

Handles the liquidation of users' balances, once the users' amount of collateral is too low.

Parameters

Emits

LogRemoveCollateral

LogReturn

LogLiquidation

withdrawFees

function withdrawFees() public

Description

Transfers all available fees to feeTo.

Emits

LogAccrue

LogWithdrawFees

setFeeTo

function setFeeTo(address newFeeTo) public onlyOwner

Description

Allows owner to change the recipient of the fees.

Parameters

Emits

LogFeeTo

reduceSupply

function reduceSupply(uint256 amount) public onlyOwner

Description

Reduce the available supply of asset tokens.

Parameters

changeInterestRate

function changeInterestRate(uint64 newInterestRate) public onlyOwner

Description

Allows owner to change the interest rate.

Parameters

Emits

LogInterestChange

changeMintLimit

function changeMintLimit(uint128 newMintLimit, uint128 perAddressPart) public onlyOwner

Description

Allows owner to change the mint limit.

Parameters

Emits

LogChangeMintLimit

changePermissionControl

function changePermissionControl(PermissionControl newPermissionControl) public onlyOwner

Description

Allows owner to change the permission control contract.

Parameters

Emits

LogChangePermissionControl

setBlacklistedCallee

function setBlacklistedCallee(address callee, bool blacklisted) public onlyOwner

Description

Allows owner to:

  • add a callee to the blacklist.

  • remove a callee from the blacklist.

Parameters

Emits

LogChangeBlacklistedCallee

View Methods

asset

IERC20 public immutable asset;

Description

The ERC20 token the users can mint.

collateral

IERC20 public immutable collateral;

Description

The ERC20 token that acts as collateral to mint asset tokens.

userMintPart

mapping(address => uint256) public userMintPart;

Description

Maps each user to its total debt (i.e. its mint part).

You can convert this number into a numerical amount of asset tokens with:

totalMint.elastic / totalMint.base * userMintPart[user]

userCollateralAmount

mapping(address => uint256) public userCollateralAmount;

Description

Maps each user to its amount of collateral tokens.

totalMint

Rebase public totalMint;

Description

Represents the total loan held by minters.

Properties

totalCollateralAmount

uint256 public totalCollateralAmount;

Description

The total amount of collateral tokens.

feeTo

address public feeTo;

Description

The recipient that will receive the fees.

oracle

IOracle public immutable oracle;

Description

The oracle from which to fetch the exchange rate.

oracleData

bytes public oracleData;

Description

The ABI encoding to pass to the oracle get function.

blacklistedCallees

mapping(address => bool) public blacklistedCallees;

Description

If an address maps to true all manageCall actions to its functions are forbidden.

accrueInfo

AccrueInfo public accrueInfo;

Description

Some data about the accrue function.

Properties

permissionControl

PermissionControl public permissionControl;

Description

See PermissionControl.

mintLimit

MintCap public mintLimit;

Description

The current mint limit (in mint parts).

Properties

COLLATERALIZATION_RATE

uint256 public immutable COLLATERALIZATION_RATE;

Description

The collateralization rate (i.e. maximum % mintable with current collateral).

LIQUIDATION_MULTIPLIER

uint256 public immutable LIQUIDATION_MULTIPLIER;

Description

The liquidation multiplier.

MINT_OPENING_RETURN_FEE

uint256 public immutable MINT_OPENING_RETURN_FEE;

Description

The mint/return fee.

Modifiers

onlyWhitelisted

modifier onlyWhitelisted(address user)

Description

Checks if user is present in the whitelist.

Parameters

onlyLiquidators

modifier onlyLiquidators(address liquidator)

Description

Checks if liquidator is a liquidator.

Parameters

solvent

modifier solvent()

Description

Checks if msg.sender is solvent after executing the function body.

Events

LogAccrue

event LogAccrue(uint128 accruedAmount)

Parameters

LogExchangeRate

event LogExchangeRate(uint256 rate);

Parameters

LogAddCollateral

event LogAddCollateral(
    address indexed from,
    address indexed to,
    uint256 share
)

Parameters

LogRemoveCollateral

event LogRemoveCollateral(
    address indexed from,
    address indexed to,
    uint256 share
)

Parameters

LogMint

event LogMint(
    address indexed from,
    address indexed to,
    uint256 amount,
    uint256 part
)

Parameters

LogReturn

event LogReturn(
    address indexed from,
    address indexed to,
    uint256 amount,
    uint256 part
);

Parameters

LogLiquidation

event LogLiquidation(
    address indexed from,
    address indexed user,
    address indexed to,
    uint256 collateralAmount,
    uint256 mintAmount,
    uint256 mintPart
);

Parameters

LogWithdrawFees

event LogWithdrawFees(
    address indexed feeTo,
    uint256 feesEarnedFraction
);

Parameters

LogFeeTo

event LogFeeTo(address indexed newFeeTo);

Parameters

LogInterestChange

event LogInterestChange(
    uint64 oldInterestRate,
    uint64 newInterestRate
);

Parameters

LogChangeMintLimit

event LogChangeMintLimit(
    uint128 newLimit,
    uint128 perAddressPart
);

Parameters

LogChangeBlacklistedCallee

event LogChangeBlacklistedCallee(
    address indexed account,
    bool blacklisted
);

Parameters

LogChangePermissionControl

event LogChangePermissionControl(PermissionControl indexed newPermissionControl);

Parameters

Last updated