DocumentationOpen App

Credit Manager

The CreditManagerV3 is the core accounting engine of the Gearbox Protocol. It manages Credit Account lifecycle, tracks debt and collateral, calculates health factors, and enforces risk parameters. All Credit Account state is stored and managed through this contract.

Core Data Structures

CreditAccountInfo

Every Credit Account's state is tracked in a CreditAccountInfo struct:

FieldTypeDescription
debtuint256Principal amount borrowed from the pool
cumulativeIndexLastUpdateuint256Pool's interest index at last debt update
cumulativeQuotaInterestuint128Accrued quota interest not yet added to debt
quotaFeesuint128Quota fees owed
enabledTokensMaskuint256Bitmask of currently enabled collateral tokens
flagsuint16Account state flags (e.g., BOT_PERMISSIONS_SET_FLAG)
lastDebtUpdateuint64Timestamp of last debt change (flash-loan protection)
borroweraddressCurrent account owner

Collateral Calculation Modes

ModeUse Case
DEBT_ONLYCalculate debt + interest without collateral
DEBT_COLLATERALFull TWV + HF calculation
FULL_COLLATERAL_CHECK_LAZYOptimized: stops early when HF exceeds threshold

Write Methods

openCreditAccount

Opens a new Credit Account for a borrower.

Solidity
function openCreditAccount(address onBehalfOf) external returns (address creditAccount);
ParameterTypeDescription
onBehalfOfaddressAddress that will own the Credit Account

Returns: Address of the newly created Credit Account.

Access: CreditFacade only.


closeCreditAccount

Closes a Credit Account and settles all debt.

Solidity
function closeCreditAccount(address creditAccount) external;
ParameterTypeDescription
creditAccountaddressAddress of the Credit Account to close

Access: CreditFacade only. Repays pool debt and returns remaining assets to the borrower.


liquidateCreditAccount

Liquidates an unhealthy Credit Account.

Solidity
function liquidateCreditAccount( address creditAccount, uint256 collateralDebtData, address to ) external;
ParameterTypeDescription
creditAccountaddressAccount to liquidate
collateralDebtDatauint256Pre-computed collateral and debt data
toaddressAddress to receive remaining assets

Access: CreditFacade only. Settles debt with pool, reports profit/loss, and distributes remaining collateral.


manageDebt

Increases or decreases the debt of a Credit Account.

Solidity
function manageDebt( address creditAccount, uint256 amount, uint256 enabledTokensMask, ManageDebtAction action ) external returns (uint256 newDebt, uint256 tokensToEnable, uint256 tokensToDisable);
ParameterTypeDescription
creditAccountaddressTarget Credit Account
amountuint256Amount to increase or decrease
enabledTokensMaskuint256Current enabled tokens mask
actionManageDebtActionINCREASE_DEBT or DECREASE_DEBT

Returns: New debt amount and token mask changes.

Access: CreditFacade only. Flash-loan protection prevents multiple debt changes in the same block.


addCollateral

Adds collateral tokens to a Credit Account.

Solidity
function addCollateral( address payer, address creditAccount, address token, uint256 amount ) external returns (uint256 tokensToEnable);
ParameterTypeDescription
payeraddressAddress providing the tokens
creditAccountaddressReceiving Credit Account
tokenaddressToken to add
amountuint256Amount to transfer

Returns: Token mask to enable.

Access: CreditFacade only.


withdrawCollateral

Withdraws collateral tokens from a Credit Account.

Solidity
function withdrawCollateral( address creditAccount, address token, uint256 amount, address to ) external returns (uint256 tokensToDisable);
ParameterTypeDescription
creditAccountaddressSource Credit Account
tokenaddressToken to withdraw
amountuint256Amount to withdraw
toaddressRecipient address

Returns: Token mask to disable (if balance reaches zero).

Access: CreditFacade only.


setActiveCreditAccount

Sets the active Credit Account for adapter execution during multicalls.

Solidity
function setActiveCreditAccount(address creditAccount) external;
ParameterTypeDescription
creditAccountaddressAccount to set as active

Access: CreditFacade only.


execute

Executes an external call from a Credit Account through a whitelisted adapter.

Solidity
function execute(bytes calldata data) external returns (bytes memory);
ParameterTypeDescription
databytesEncoded function call to execute

Returns: Return data from the adapter call.

Access: Credit Account (via adapter) only.


fullCollateralCheck

Performs a full collateral check on a Credit Account after operations.

Solidity
function fullCollateralCheck( address creditAccount, uint256 enabledTokensMask, uint256[] calldata collateralHints, uint16 minHealthFactor, bool useSafePrices ) external;
ParameterTypeDescription
creditAccountaddressAccount to check
enabledTokensMaskuint256Current enabled tokens mask
collateralHintsuint256[]Hints for optimized collateral iteration
minHealthFactoruint16Minimum acceptable HF (typically 10000)
useSafePricesboolWhether to use safe (conservative) prices

Access: CreditFacade only. Reverts if health factor is below minimum.


View Methods

calcDebtAndCollateral

Calculates debt, interest, and collateral values for a Credit Account.

Solidity
function calcDebtAndCollateral( address creditAccount, CollateralCalcTask task ) external view returns (CollateralDebtData memory);
ParameterTypeDescription
creditAccountaddressAccount to calculate for
taskCollateralCalcTaskCalculation mode (see Collateral Calculation Modes)

Returns: CollateralDebtData struct with debt, accruedInterest, accruedFees, totalDebtUSD, totalValue, twvUSD, enabledTokensMask.


creditAccountInfo

Returns the full state struct for a Credit Account.

Solidity
function creditAccountInfo(address creditAccount) external view returns (CreditAccountInfo memory);

enabledTokensMaskOf

Returns the bitmask of enabled collateral tokens for an account.

Solidity
function enabledTokensMaskOf(address creditAccount) external view returns (uint256);

flagsOf

Returns the flags for a Credit Account.

Solidity
function flagsOf(address creditAccount) external view returns (uint16);

getBorrowerOrRevert

Returns the borrower address of a Credit Account, reverting if not found.

Solidity
function getBorrowerOrRevert(address creditAccount) external view returns (address);

getTokenMaskOrRevert

Returns the bitmask for a given token address, reverting if not registered.

Solidity
function getTokenMaskOrRevert(address token) external view returns (uint256);

getTokenByMask

Returns the token address for a given bitmask.

Solidity
function getTokenByMask(uint256 tokenMask) external view returns (address);

collateralTokenByMask

Returns collateral token data including liquidation threshold parameters.

Solidity
function collateralTokenByMask(uint256 tokenMask) external view returns (address token, uint16 ltInitial, uint16 ltFinal, uint40 timestampRampStart, uint24 rampDuration);

forbiddenTokenMask

Returns the bitmask of forbidden tokens.

Solidity
function forbiddenTokenMask() external view returns (uint256);

contractToAdapter / adapterToContract

Returns the adapter for a target contract, or vice versa.

Solidity
function contractToAdapter(address targetContract) external view returns (address); function adapterToContract(address adapter) external view returns (address);

adapters

Returns all registered adapter addresses.

Solidity
function adapters() external view returns (address[] memory);

creditFacade / creditConfigurator / pool / underlying

Returns addresses of associated contracts.

Solidity
function creditFacade() external view returns (address); function creditConfigurator() external view returns (address); function pool() external view returns (address); function underlying() external view returns (address);

Events

OpenCreditAccount

Solidity
event OpenCreditAccount(address indexed creditAccount, address indexed onBehalfOf);

Emitted when a new Credit Account is opened.

CloseCreditAccount

Solidity
event CloseCreditAccount(address indexed creditAccount, address indexed borrower);

Emitted when a Credit Account is closed.

LiquidateCreditAccount

Solidity
event LiquidateCreditAccount( address indexed creditAccount, address indexed liquidator, address to, uint256 remainingFunds );

Emitted when a Credit Account is liquidated.

ManageDebt

Solidity
event ManageDebt(address indexed creditAccount, uint256 amount, ManageDebtAction action);

Emitted when debt is increased or decreased.

AddCollateral

Solidity
event AddCollateral(address indexed creditAccount, address indexed token, uint256 amount);

Emitted when collateral is added to an account.

WithdrawCollateral

Solidity
event WithdrawCollateral(address indexed creditAccount, address indexed token, uint256 amount, address to);

Emitted when collateral is withdrawn from an account.