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:
- Borrowing : Take loans against bToken collateral at BLV
- 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_)| Parameter | Type | Description |
|---|---|---|
_bToken | BToken | The bToken collateral |
_user | address | User borrowing |
_collateralAmount | uint256 | bTokens to lock as collateral |
_borrowAmount | uint256 | Reserves 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| Parameter | Type | Description |
|---|---|---|
_bToken | BToken | The bToken collateral |
_user | address | User repaying |
_collateralAmount | uint256 | Collateral to unlock |
_repayAmount | uint256 | Debt 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) externalLeverage 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_
)| Parameter | Type | Description |
|---|---|---|
_bToken | BToken | The bToken to leverage |
_user | address | User creating position |
_collateral | uint256 | Initial bToken collateral |
_leverageFactor | uint256 | Target leverage (WAD, e.g., 2e18 = 2x) |
_limitAmount | uint256 | Maximum reserves to spend (slippage) |
Returns:
collateralAdded_: Total collateral after leveragedebtAdded_: Debt createdcollateralIn_: bTokens used as inputreservesIn_: 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_
)| Parameter | Type | Description |
|---|---|---|
_bToken | BToken | The leveraged bToken |
_user | address | User deleveraging |
_collateralToSell | uint256 | Collateral to sell for debt repayment |
_limitAmount | uint256 | Minimum 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 bTokensdebt: 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
| Error | Description |
|---|---|
BCredit_InsufficientCollateral | Not enough collateral for borrow |
BCredit_RepaidMoreThanDebt | Repaying more than owed |
BCredit_Leverage_ZeroCollateral | Leverage with no collateral |
BCredit_Leverage_BorrowAmountTooLow | Borrow doesn't meet minimum |
BCredit_Deleverage_InvalidCollateralToSell | Invalid deleverage amount |
BCredit_Deleverage_Undercollateralized | Would leave position undercollateralized |
Collateral Calculation
Borrowing capacity is calculated against BLV:
Max Borrow = Collateral × BLV × LTVWhere:
Collateral= bTokens lockedBLV= Current floor priceLTV= 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
- Borrowing Guide : How to borrow
- Leverage Guide : How to use leverage
- BLV Mechanics: Why loans are 0% interest