USX Controller

MintUSX

The mintUSX function mints and transfers USX from the protocol to the user, and adds a borrow balance. The amount minted must be less than the user's Account Liquidity and the mint USX limit.

USXController

function mintUSX(uint mintUSXAmount) returns (uint)
  • msg.sender: The account to which minted USX shall be transferred.

  • mintUSXAmount: The amount of the USX to be minted.

  • RETURN: 0 on success, otherwise an Error code

Solidity

USXController usxController = USXController(0x0040...);
require(sToken.borrow(100) == 0, "got collateral and has usx mint rate?");

Web3 1.0

const usxController = USXController.at(0x0040...);
await usxController.methods.mintUSX(50).send({from: 0xMyAccount});

RepayUSX

The repay function transfers USX into the protocol and burn, reducing the user's borrow balance.

USXController

function repayUSX(uint repayUSXAmount) returns (uint)
  • msg.sender: The account which minted the USX, and shall repay the USX.

  • borrowAmount: The amount of the USX to be repaid.

  • RETURN: 0 on success, otherwise an Error code

Before repaying an asset, users must first approve the USX to access their USX balance.

Solidity

USXController usxController = USXController(0x0040...);
require(usxController.repayUSX.value(100)() == 0, "transfer approved?");

Web3 1.0

const usxController = USXController.at(0x0040...);
usxController.methods.repayUSX(10000).send({from: ...});

LiquidateUSX

A user who has negative account liquidity is subject to liquidation by other users of the protocol to return his/her account liquidity back to positive (i.e. above the collateral requirement). When a liquidation occurs, a liquidator may repay some or all of an outstanding borrow on behalf of a borrower and in return receive a discounted amount of collateral held by the borrower; this discount is defined as the liquidation incentive.

A liquidator may close up to a certain fixed percentage (i.e. close factor) of any individual outstanding borrow of the underwater account. Liquidators must interact with USXUnitroller contract in which they wish to repay USX and seize another asset as collateral. When collateral is seized, the liquidator is transferred sTokens, which they may redeem the same as if they had supplied the asset themselves. Users must approve USX contract before calling liquidateUSX, as they are transferring funds into the contract.

USXController

function liquidateUSX(address borrower, uint amount, address collateral) returns (uint)
  • msg.sender: The account which shall liquidate the borrower by repaying their USX and seizing their collateral.

  • borrower: The account with negative account liquidity that shall be liquidated.

  • repayAmount: The amount of the minted USX to be repaid and converted into collateral.

  • sTokenCollateral: The address of the sToken currently held as collateral by a borrower, that the liquidator shall seize.

  • RETURN: 0 on success, otherwise an Error code

Before supplying USX, users must first approve the USXController to access their USX balance.

Solidity

USXController usxController = USXController(0x0040...);
SBep20 sTokenCollateral = SBep20(0xfD58...);
require(sToken.liquidateUSX(0xBorrower, 100, sTokenCollateral) == 0, "borrower underwater??");

Web3 1.0

const usxController = USXController.at(0x0040...);
const xTokenCollateral = SBep20.at(0xfD58...);
await usxController.methods.liquidateUSX(0xBorrower, 33, sTokenCollateral).send({from: 0xLiquidator})

Key Events

Event
Description

MintUSX(address minter, uint mintUSXAmount)

Emitted upon a successful MintUSX.

RepayMAI(address payer, address borrower, uint repayAmount)

Emitted upon a successful RepayUSX.

LiquidateUSX(address liquidator, address borrower, uint repayAmount, address sTokenCollateral, uint seizeTokens)

Emitted upon a successful LiquidateUSX.

Error Codes

Code
Name
Description

0

NO_ERROR

Not a failure.

1

UNAUTHORIZED

The sender is not authorized to perform this action.

2

REJECTION

The action would violate the comptroller, usxcontroller policy.

3

SNAPSHOT_ERROR

The comptroller could not get the account borrows and exchange rate from the market.

4

PRICE_ERROR

The comptroller could not obtain a required price of an asset.

5

MATH_ERROR

A math calculation error occurred.

6

MARKET_NOT_FRESH

Interest has not been properly accrued.

7

INSUFFICIENT_BALANCE_FOR_USX

Caller does not have sufficient balance to mint USX.

Failure Info

Name

0

SET_PENDING_ADMIN_OWNER_CHECK

1

SET_PENDING_IMPLEMENTATION_OWNER_CHECK

2

SET_COMPTROLLER_OWNER_CHECK

3

ACCEPT_ADMIN_PENDING_ADMIN_CHECK

4

ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK

5

USX_MINT_REJECTION

6

USX_BURN_REJECTION

7

USX_LIQUIDATE_ACCRUE_BORROW_INTEREST_FAILED

8

USX_LIQUIDATE_ACCRUE_COLLATERAL_INTEREST_FAILED

9

USX_LIQUIDATE_COLLATERAL_FRESHNESS_CHECK

10

USX_LIQUIDATE_COMPTROLLER_REJECTION

11

USX_LIQUIDATE_COMPTROLLER_CALCULATE_AMOUNT_SEIZE_FAILED

12

USX_LIQUIDATE_CLOSE_AMOUNT_IS_UINT_MAX

13

USX_LIQUIDATE_CLOSE_AMOUNT_IS_ZERO

14

USX_LIQUIDATE_FRESHNESS_CHECK

15

USX_LIQUIDATE_LIQUIDATOR_IS_BORROWER

16

USX_LIQUIDATE_REPAY_BORROW_FRESH_FAILED

17

USX_LIQUIDATE_SEIZE_BALANCE_INCREMENT_FAILED

18

USX_LIQUIDATE_SEIZE_BALANCE_DECREMENT_FAILED

19

USX_LIQUIDATE_SEIZE_COMPTROLLER_REJECTION

20

USX_LIQUIDATE_SEIZE_LIQUIDATOR_IS_BORROWER

21

USX_LIQUIDATE_SEIZE_TOO_MUCH

22

MINT_FEE_CALCULATION_FAILED

23

SET_TREASURY_OWNER_CHECK

Last updated