BCredit Contract Reference

The BCredit contract handles borrowing and leverage operations. It enables 0% interest loans backed by BLV and non-liquidatable leverage positions.

📝

Contract: BCredit.sol Version: Latest License: AGPL-3.0-only

Overview

BCredit provides two main capabilities:

  1. Borrowing : Take loans against bToken collateral at BLV
  2. Leverage : Create multiplied positions through borrow + buy loops

All positions are non-liquidatable because collateral is valued at BLV (guaranteed floor).

Borrowing Functions

borrow

Borrow reserves against bToken collateral.

function borrow(
  BToken _bToken,
  address _user,
  uint256 _collateralAmount,
  uint256 _borrowAmount
) external returns (uint256 fee_)
ParameterTypeDescription
_bTokenBTokenThe bToken collateral
_useraddressUser borrowing
_collateralAmountuint256bTokens to lock as collateral
_borrowAmountuint256Reserves to borrow

Returns:

  • fee_: Origination fee charged

Requirements:

  • Collateral must support the borrow amount at BLV
  • User must have approved bToken transfer

repay

Repay borrowed reserves and unlock collateral.

function repay(
  BToken _bToken,
  address _user,
  uint256 _collateralAmount,
  uint256 _repayAmount
) external
ParameterTypeDescription
_bTokenBTokenThe bToken collateral
_useraddressUser repaying
_collateralAmountuint256Collateral to unlock
_repayAmountuint256Debt to repay

Errors:

  • BCredit_RepaidMoreThanDebt: Repaying more than owed

defaultSelf

Allow user to forfeit collateral to clear debt (emergency exit).

function defaultSelf(BToken _bToken, address _user) external

Leverage Functions

leverage

Create a leveraged position by borrowing and buying more bTokens.

function leverage(
  BToken _bToken,
  address _user,
  uint256 _collateral,
  uint256 _leverageFactor,
  uint256 _limitAmount
) external returns (
  uint256 collateralAdded_,
  uint256 debtAdded_,
  uint256 collateralIn_,
  uint256 reservesIn_
)
ParameterTypeDescription
_bTokenBTokenThe bToken to leverage
_useraddressUser creating position
_collateraluint256Initial bToken collateral
_leverageFactoruint256Target leverage (WAD, e.g., 2e18 = 2x)
_limitAmountuint256Maximum reserves to spend (slippage)

Returns:

  • collateralAdded_: Total collateral after leverage
  • debtAdded_: Debt created
  • collateralIn_: bTokens used as input
  • reservesIn_: Reserves borrowed

deleverage

Reduce leverage by selling collateral to repay debt.

function deleverage(
  BToken _bToken,
  address _user,
  uint256 _collateralToSell,
  uint256 _limitAmount
) external returns (
  uint256 collateralRedeemed_,
  uint256 debtRepaid_,
  uint256 collateralSold_,
  uint256 refund_
)
ParameterTypeDescription
_bTokenBTokenThe leveraged bToken
_useraddressUser deleveraging
_collateralToSelluint256Collateral to sell for debt repayment
_limitAmountuint256Minimum reserves from sale (slippage)

View Functions

getCreditAccount

Get a user's credit account state.

function getCreditAccount(BToken _bToken, address _user) 
  external view returns (State.CreditAccount memory)

Returns: CreditAccount struct:

  • collateral: Locked bTokens
  • debt: Outstanding debt

Events

event Borrow(
  BToken bToken, 
  address user, 
  uint256 borrowed, 
  uint256 fee, 
  State.CreditAccount post
);
 
event Repay(
  BToken bToken, 
  address user, 
  uint256 collateralRedeemed, 
  uint256 debtRepaid, 
  State.CreditAccount post
);
 
event Leverage(
  BToken bToken,
  address user,
  uint256 collateralAdded,
  uint256 debtAdded,
  uint256 collateralIn,
  uint256 reservesIn,
  State.CreditAccount post
);
 
event Deleverage(
  BToken bToken,
  address user,
  uint256 collateralRedeemed,
  uint256 debtRepaid,
  uint256 collateralSold,
  uint256 refund,
  State.CreditAccount post
);
 
event DefaultSelf(BToken bToken, address user);

Errors

ErrorDescription
BCredit_InsufficientCollateralNot enough collateral for borrow
BCredit_RepaidMoreThanDebtRepaying more than owed
BCredit_Leverage_ZeroCollateralLeverage with no collateral
BCredit_Leverage_BorrowAmountTooLowBorrow doesn't meet minimum
BCredit_Deleverage_InvalidCollateralToSellInvalid deleverage amount
BCredit_Deleverage_UndercollateralizedWould leave position undercollateralized

Collateral Calculation

Borrowing capacity is calculated against BLV:

Max Borrow = Collateral × BLV × LTV

Where:

  • Collateral = bTokens locked
  • BLV = Current floor price
  • LTV = Loan-to-value ratio (up to 90%)

Usage Example

// Borrow 900 reserves against 1000 bTokens at 90% LTV
bToken.approve(address(bcredit), 1000e18);
uint256 fee = bcredit.borrow(
  bToken,
  msg.sender,
  1000e18,  // collateral
  900e18   // borrow amount
);
 
// Create 2x leverage
bcredit.leverage(
  bToken,
  msg.sender,
  1000e18,  // initial collateral
  2e18,    // 2x leverage
  1100e18   // max reserves to use
);
 
// Repay and unlock
reserve.approve(address(bcredit), 900e18);
bcredit.repay(
  bToken,
  msg.sender,
  1000e18,  // collateral to unlock
  900e18   // debt to repay
);

Related