This is the library that is used by the Accounts contract to track the balances of each user.

In the Accounts contract, there is a field mapping(address => Account) public accounts; that is used to record the balance status, and Account struct is:

struct Account {
    mapping(address => AccountTokenLib.TokenInfo) tokenInfos;
    uint128 depositBitmap;
    uint128 borrowBitmap;

The depositBitmap and borrowBitmap are used to check whether one user has depositings/borrowings for each specific token with less gas cost.

And the TokenInfo struct is the following:

struct TokenInfo {
    // Deposit info
    uint256 depositPrincipal;   // total deposit principal of ther user
    uint256 depositInterest;    // total deposit interest of the user
    uint256 lastDepositBlock;   // the block number of user's last deposit
    // Borrow info
    uint256 borrowPrincipal;    // total borrow principal of ther user
    uint256 borrowInterest;     // total borrow interest of ther user
    uint256 lastBorrowBlock;    // the block number of user's last borrow

For each operation one user interacting with our contract, we update accounts field.


Token Info Registry to manage Token information. The Owner of the contract allowed to update the information. TokenInfo struct stores Token Information, this includes: ERC20 Token address, Compound Token address, ChainLink Aggregator address etc.

    struct TokenInfo {
        // Token index, can store upto 255
        uint8 index;
        // ERC20 Token decimal
        uint8 decimals;
        // If token is enabled / disabled
        bool enabled;
        // Is ERC20 token charge transfer fee?
        bool isTransferFeeEnabled;
        // Is Token supported on Compound
        bool isSupportedOnCompound;
        // cToken address on Compound
        address cToken;
        // Chain Link Aggregator address for TOKEN/ETH pair
        address chainLinkAggregator;
        // Borrow LTV, by default 60%
        uint256 borrowLTV;
        // Liquidation threshold, by default 85%
        uint256 liquidationThreshold;
        // Liquidation discount ratio, by default 95%
        uint256 liquidationDiscountRatio;

Last updated