# B Token

*Compound*

> Compound's CToken Contract

Abstract base for CTokens

## Methods

### \_acceptAdmin

```solidity
function _acceptAdmin() external nonpayable returns (uint256)
```

Accepts transfer of admin rights. msg.sender must be pendingAdmin

*Admin function for pending admin to accept role and update admin*

#### Returns

| Name | Type    | Description                                                             |
| ---- | ------- | ----------------------------------------------------------------------- |
| \_0  | uint256 | uint 0=success, otherwise a failure (see ErrorReporter.sol for details) |

### \_reduceReserves

```solidity
function _reduceReserves(uint256 reduceAmount) external nonpayable returns (uint256)
```

Accrues interest and reduces reserves by transferring to admin

#### Parameters

| Name         | Type    | Description                     |
| ------------ | ------- | ------------------------------- |
| reduceAmount | uint256 | Amount of reduction to reserves |

#### Returns

| Name | Type    | Description                                                             |
| ---- | ------- | ----------------------------------------------------------------------- |
| \_0  | uint256 | uint 0=success, otherwise a failure (see ErrorReporter.sol for details) |

### \_setBondtroller

```solidity
function _setBondtroller(contract Bondtroller newBondtroller) external nonpayable returns (uint256)
```

Sets a new bondtroller for the market

*Admin function to set a new bondtroller*

#### Parameters

| Name           | Type                 | Description |
| -------------- | -------------------- | ----------- |
| newBondtroller | contract Bondtroller | undefined   |

#### Returns

| Name | Type    | Description                                                             |
| ---- | ------- | ----------------------------------------------------------------------- |
| \_0  | uint256 | uint 0=success, otherwise a failure (see ErrorReporter.sol for details) |

### \_setInterestRateModel

```solidity
function _setInterestRateModel(contract InterestRateModel newInterestRateModel) external nonpayable returns (uint256)
```

accrues interest and updates the interest rate model using \_setInterestRateModelFresh

*Admin function to accrue interest and update the interest rate model*

#### Parameters

| Name                 | Type                       | Description                        |
| -------------------- | -------------------------- | ---------------------------------- |
| newInterestRateModel | contract InterestRateModel | the new interest rate model to use |

#### Returns

| Name | Type    | Description                                                             |
| ---- | ------- | ----------------------------------------------------------------------- |
| \_0  | uint256 | uint 0=success, otherwise a failure (see ErrorReporter.sol for details) |

### \_setPendingAdmin

```solidity
function _setPendingAdmin(address payable newPendingAdmin) external nonpayable returns (uint256)
```

Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.

*Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.*

#### Parameters

| Name            | Type            | Description        |
| --------------- | --------------- | ------------------ |
| newPendingAdmin | address payable | New pending admin. |

#### Returns

| Name | Type    | Description                                                             |
| ---- | ------- | ----------------------------------------------------------------------- |
| \_0  | uint256 | uint 0=success, otherwise a failure (see ErrorReporter.sol for details) |

### \_setReserveFactor

```solidity
function _setReserveFactor(uint256 newReserveFactorMantissa) external nonpayable returns (uint256)
```

accrues interest and sets a new reserve factor for the protocol using \_setReserveFactorFresh

*Admin function to accrue interest and set a new reserve factor*

#### Parameters

| Name                     | Type    | Description |
| ------------------------ | ------- | ----------- |
| newReserveFactorMantissa | uint256 | undefined   |

#### Returns

| Name | Type    | Description                                                             |
| ---- | ------- | ----------------------------------------------------------------------- |
| \_0  | uint256 | uint 0=success, otherwise a failure (see ErrorReporter.sol for details) |

### accountTokens

```solidity
function accountTokens(address) external view returns (uint256)
```

Official record of token balances for each account

#### Parameters

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | address | undefined   |

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### accrualBlockNumber

```solidity
function accrualBlockNumber() external view returns (uint256)
```

Block number that interest was last accrued at

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### accrueInterest

```solidity
function accrueInterest() external nonpayable returns (uint256)
```

Applies accrued interest to total borrows and reserves

*This calculates interest accrued from the last checkpointed block up to the current block and writes new checkpoint to storage.*

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### admin

```solidity
function admin() external view returns (address payable)
```

Administrator for this contract

#### Returns

| Name | Type            | Description |
| ---- | --------------- | ----------- |
| \_0  | address payable | undefined   |

### allowance

```solidity
function allowance(address owner, address spender) external view returns (uint256)
```

Get the current allowance from `owner` for `spender`

#### Parameters

| Name    | Type    | Description                                                  |
| ------- | ------- | ------------------------------------------------------------ |
| owner   | address | The address of the account which owns the tokens to be spent |
| spender | address | The address of the account which may transfer tokens         |

#### Returns

| Name | Type    | Description                                                  |
| ---- | ------- | ------------------------------------------------------------ |
| \_0  | uint256 | The number of tokens allowed to be spent (-1 means infinite) |

### approve

```solidity
function approve(address spender, uint256 amount) external nonpayable returns (bool)
```

Approve `spender` to transfer up to `amount` from `src`

*This will overwrite the approval amount for `spender` and is subject to issues noted* [*here*](https://eips.ethereum.org/EIPS/eip-20#approve)

#### Parameters

| Name    | Type    | Description                                                |
| ------- | ------- | ---------------------------------------------------------- |
| spender | address | The address of the account which may transfer tokens       |
| amount  | uint256 | The number of tokens that are approved (-1 means infinite) |

#### Returns

| Name | Type | Description                           |
| ---- | ---- | ------------------------------------- |
| \_0  | bool | Whether or not the approval succeeded |

### balanceOf

```solidity
function balanceOf(address owner) external view returns (uint256)
```

Get the token balance of the `owner`

#### Parameters

| Name  | Type    | Description                         |
| ----- | ------- | ----------------------------------- |
| owner | address | The address of the account to query |

#### Returns

| Name | Type    | Description                           |
| ---- | ------- | ------------------------------------- |
| \_0  | uint256 | The number of tokens owned by `owner` |

### balanceOfUnderlying

```solidity
function balanceOfUnderlying(address owner) external nonpayable returns (uint256)
```

Get the underlying balance of the `owner`

*This also accrues interest in a transaction*

#### Parameters

| Name  | Type    | Description                         |
| ----- | ------- | ----------------------------------- |
| owner | address | The address of the account to query |

#### Returns

| Name | Type    | Description                               |
| ---- | ------- | ----------------------------------------- |
| \_0  | uint256 | The amount of underlying owned by `owner` |

### balanceOfUnderlyingView

```solidity
function balanceOfUnderlyingView(address owner) external view returns (uint256)
```

#### Parameters

| Name  | Type    | Description |
| ----- | ------- | ----------- |
| owner | address | undefined   |

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### bondtroller

```solidity
function bondtroller() external view returns (contract Bondtroller)
```

Contract which oversees inter-cToken operations

#### Returns

| Name | Type                 | Description |
| ---- | -------------------- | ----------- |
| \_0  | contract Bondtroller | undefined   |

### borrowBalanceCurrent

```solidity
function borrowBalanceCurrent(address account) external nonpayable returns (uint256)
```

Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex

#### Parameters

| Name    | Type    | Description                                                               |
| ------- | ------- | ------------------------------------------------------------------------- |
| account | address | The address whose balance should be calculated after updating borrowIndex |

#### Returns

| Name | Type    | Description            |
| ---- | ------- | ---------------------- |
| \_0  | uint256 | The calculated balance |

### borrowBalanceStored

```solidity
function borrowBalanceStored(address account) external view returns (uint256)
```

Return the borrow balance of account based on stored data

#### Parameters

| Name    | Type    | Description                                    |
| ------- | ------- | ---------------------------------------------- |
| account | address | The address whose balance should be calculated |

#### Returns

| Name | Type    | Description            |
| ---- | ------- | ---------------------- |
| \_0  | uint256 | The calculated balance |

### borrowIndex

```solidity
function borrowIndex() external view returns (uint256)
```

Accumulator of the total earned interest rate since the opening of the market

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### borrowRatePerBlock

```solidity
function borrowRatePerBlock() external view returns (uint256)
```

Returns the current per-block borrow interest rate for this cToken

#### Returns

| Name | Type    | Description                                        |
| ---- | ------- | -------------------------------------------------- |
| \_0  | uint256 | The borrow interest rate per block, scaled by 1e18 |

### decimals

```solidity
function decimals() external view returns (uint8)
```

EIP-20 token decimals for this token

#### Returns

| Name | Type  | Description |
| ---- | ----- | ----------- |
| \_0  | uint8 | undefined   |

### exchangeRateCurrent

```solidity
function exchangeRateCurrent() external nonpayable returns (uint256)
```

Accrue interest then return the up-to-date exchange rate

#### Returns

| Name | Type    | Description                             |
| ---- | ------- | --------------------------------------- |
| \_0  | uint256 | Calculated exchange rate scaled by 1e18 |

### exchangeRateStored

```solidity
function exchangeRateStored() external view returns (uint256)
```

Calculates the exchange rate from the underlying to the CToken

*This function does not accrue interest before calculating the exchange rate*

#### Returns

| Name | Type    | Description                             |
| ---- | ------- | --------------------------------------- |
| \_0  | uint256 | Calculated exchange rate scaled by 1e18 |

### getAccountSnapshot

```solidity
function getAccountSnapshot(address account) external view returns (uint256, uint256, uint256, uint256)
```

Get a snapshot of the account's balances, and the cached exchange rate

*This is used by bondtroller to more efficiently perform liquidity checks.*

#### Parameters

| Name    | Type    | Description                        |
| ------- | ------- | ---------------------------------- |
| account | address | Address of the account to snapshot |

#### Returns

| Name | Type    | Description                                                             |
| ---- | ------- | ----------------------------------------------------------------------- |
| \_0  | uint256 | (possible error, token balance, borrow balance, exchange rate mantissa) |
| \_1  | uint256 | undefined                                                               |
| \_2  | uint256 | undefined                                                               |
| \_3  | uint256 | undefined                                                               |

### getCash

```solidity
function getCash() external view returns (uint256)
```

Get cash balance of this cToken in the underlying asset

#### Returns

| Name | Type    | Description                                             |
| ---- | ------- | ------------------------------------------------------- |
| \_0  | uint256 | The quantity of underlying asset owned by this contract |

### initialize

```solidity
function initialize(contract Bondtroller bondtroller_, contract InterestRateModel interestRateModel_, uint256 initialExchangeRateMantissa_, string name_, string symbol_, uint8 decimals_) external nonpayable
```

Initialize the money market

#### Parameters

| Name                          | Type                       | Description                               |
| ----------------------------- | -------------------------- | ----------------------------------------- |
| bondtroller\_                 | contract Bondtroller       | The address of the Bondtroller            |
| interestRateModel\_           | contract InterestRateModel | The address of the interest rate model    |
| initialExchangeRateMantissa\_ | uint256                    | The initial exchange rate, scaled by 1e18 |
| name\_                        | string                     | EIP-20 name of this token                 |
| symbol\_                      | string                     | EIP-20 symbol of this token               |
| decimals\_                    | uint8                      | EIP-20 decimal precision of this token    |

### interestRateModel

```solidity
function interestRateModel() external view returns (contract InterestRateModel)
```

Model which tells what the current interest rate should be

#### Returns

| Name | Type                       | Description |
| ---- | -------------------------- | ----------- |
| \_0  | contract InterestRateModel | undefined   |

### isCToken

```solidity
function isCToken() external view returns (bool)
```

Indicator that this is a CToken contract (for inspection)

#### Returns

| Name | Type | Description |
| ---- | ---- | ----------- |
| \_0  | bool | undefined   |

### name

```solidity
function name() external view returns (string)
```

EIP-20 token name for this token

#### Returns

| Name | Type   | Description |
| ---- | ------ | ----------- |
| \_0  | string | undefined   |

### pendingAdmin

```solidity
function pendingAdmin() external view returns (address payable)
```

Pending administrator for this contract

#### Returns

| Name | Type            | Description |
| ---- | --------------- | ----------- |
| \_0  | address payable | undefined   |

### protocolSeizeShareMantissa

```solidity
function protocolSeizeShareMantissa() external view returns (uint256)
```

Share of seized collateral that is added to reserves

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### reserveFactorMantissa

```solidity
function reserveFactorMantissa() external view returns (uint256)
```

Fraction of interest currently set aside for reserves

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### supplyRatePerBlock

```solidity
function supplyRatePerBlock() external view returns (uint256)
```

Returns the current per-block supply interest rate for this cToken

#### Returns

| Name | Type    | Description                                        |
| ---- | ------- | -------------------------------------------------- |
| \_0  | uint256 | The supply interest rate per block, scaled by 1e18 |

### symbol

```solidity
function symbol() external view returns (string)
```

EIP-20 token symbol for this token

#### Returns

| Name | Type   | Description |
| ---- | ------ | ----------- |
| \_0  | string | undefined   |

### totalBorrows

```solidity
function totalBorrows() external view returns (uint256)
```

Total amount of outstanding borrows of the underlying in this market

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### totalBorrowsCurrent

```solidity
function totalBorrowsCurrent() external nonpayable returns (uint256)
```

Returns the current total borrows plus accrued interest

#### Returns

| Name | Type    | Description                     |
| ---- | ------- | ------------------------------- |
| \_0  | uint256 | The total borrows with interest |

### totalReserves

```solidity
function totalReserves() external view returns (uint256)
```

Total amount of reserves of the underlying held in this market

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### totalSupply

```solidity
function totalSupply() external view returns (uint256)
```

Total number of tokens in circulation

#### Returns

| Name | Type    | Description |
| ---- | ------- | ----------- |
| \_0  | uint256 | undefined   |

### transfer

```solidity
function transfer(address dst, uint256 amount) external nonpayable returns (bool)
```

Transfer `amount` tokens from `msg.sender` to `dst`

#### Parameters

| Name   | Type    | Description                            |
| ------ | ------- | -------------------------------------- |
| dst    | address | The address of the destination account |
| amount | uint256 | The number of tokens to transfer       |

#### Returns

| Name | Type | Description                           |
| ---- | ---- | ------------------------------------- |
| \_0  | bool | Whether or not the transfer succeeded |

### transferFrom

```solidity
function transferFrom(address src, address dst, uint256 amount) external nonpayable returns (bool)
```

Transfer `amount` tokens from `src` to `dst`

#### Parameters

| Name   | Type    | Description                            |
| ------ | ------- | -------------------------------------- |
| src    | address | The address of the source account      |
| dst    | address | The address of the destination account |
| amount | uint256 | The number of tokens to transfer       |

#### Returns

| Name | Type | Description                           |
| ---- | ---- | ------------------------------------- |
| \_0  | bool | Whether or not the transfer succeeded |

## Events

### AccrueInterest

```solidity
event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows)
```

Event emitted when interest is accrued

#### Parameters

| Name                | Type    | Description |
| ------------------- | ------- | ----------- |
| cashPrior           | uint256 | undefined   |
| interestAccumulated | uint256 | undefined   |
| borrowIndex         | uint256 | undefined   |
| totalBorrows        | uint256 | undefined   |

### Approval

```solidity
event Approval(address indexed owner, address indexed spender, uint256 amount)
```

EIP20 Approval event

#### Parameters

| Name              | Type    | Description |
| ----------------- | ------- | ----------- |
| owner `indexed`   | address | undefined   |
| spender `indexed` | address | undefined   |
| amount            | uint256 | undefined   |

### Borrow

```solidity
event Borrow(address borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows)
```

Event emitted when underlying is borrowed

#### Parameters

| Name           | Type    | Description |
| -------------- | ------- | ----------- |
| borrower       | address | undefined   |
| borrowAmount   | uint256 | undefined   |
| accountBorrows | uint256 | undefined   |
| totalBorrows   | uint256 | undefined   |

### Failure

```solidity
event Failure(uint256 error, uint256 info, uint256 detail)
```

#### Parameters

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| error  | uint256 | undefined   |
| info   | uint256 | undefined   |
| detail | uint256 | undefined   |

### LiquidateBorrow

```solidity
event LiquidateBorrow(address liquidator, address borrower, uint256 repayAmount, address cTokenCollateral, uint256 seizeTokens)
```

Event emitted when a borrow is liquidated

#### Parameters

| Name             | Type    | Description |
| ---------------- | ------- | ----------- |
| liquidator       | address | undefined   |
| borrower         | address | undefined   |
| repayAmount      | uint256 | undefined   |
| cTokenCollateral | address | undefined   |
| seizeTokens      | uint256 | undefined   |

### Mint

```solidity
event Mint(address minter, uint256 mintAmount, uint256 mintTokens)
```

Event emitted when tokens are minted

#### Parameters

| Name       | Type    | Description |
| ---------- | ------- | ----------- |
| minter     | address | undefined   |
| mintAmount | uint256 | undefined   |
| mintTokens | uint256 | undefined   |

### NewAdmin

```solidity
event NewAdmin(address oldAdmin, address newAdmin)
```

Event emitted when pendingAdmin is accepted, which means admin is updated

#### Parameters

| Name     | Type    | Description |
| -------- | ------- | ----------- |
| oldAdmin | address | undefined   |
| newAdmin | address | undefined   |

### NewBondtroller

```solidity
event NewBondtroller(contract Bondtroller oldBondtroller, contract Bondtroller newBondtroller)
```

Event emitted when bondtroller is changed

#### Parameters

| Name           | Type                 | Description |
| -------------- | -------------------- | ----------- |
| oldBondtroller | contract Bondtroller | undefined   |
| newBondtroller | contract Bondtroller | undefined   |

### NewMarketInterestRateModel

```solidity
event NewMarketInterestRateModel(contract InterestRateModel oldInterestRateModel, contract InterestRateModel newInterestRateModel)
```

Event emitted when interestRateModel is changed

#### Parameters

| Name                 | Type                       | Description |
| -------------------- | -------------------------- | ----------- |
| oldInterestRateModel | contract InterestRateModel | undefined   |
| newInterestRateModel | contract InterestRateModel | undefined   |

### NewPendingAdmin

```solidity
event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin)
```

Event emitted when pendingAdmin is changed

#### Parameters

| Name            | Type    | Description |
| --------------- | ------- | ----------- |
| oldPendingAdmin | address | undefined   |
| newPendingAdmin | address | undefined   |

### NewReserveFactor

```solidity
event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa)
```

Event emitted when the reserve factor is changed

#### Parameters

| Name                     | Type    | Description |
| ------------------------ | ------- | ----------- |
| oldReserveFactorMantissa | uint256 | undefined   |
| newReserveFactorMantissa | uint256 | undefined   |

### Redeem

```solidity
event Redeem(address redeemer, uint256 redeemAmount, uint256 redeemTokens)
```

Event emitted when tokens are redeemed

#### Parameters

| Name         | Type    | Description |
| ------------ | ------- | ----------- |
| redeemer     | address | undefined   |
| redeemAmount | uint256 | undefined   |
| redeemTokens | uint256 | undefined   |

### RepayBorrow

```solidity
event RepayBorrow(address payer, address borrower, uint256 repayAmount, uint256 accountBorrows, uint256 totalBorrows)
```

Event emitted when a borrow is repaid

#### Parameters

| Name           | Type    | Description |
| -------------- | ------- | ----------- |
| payer          | address | undefined   |
| borrower       | address | undefined   |
| repayAmount    | uint256 | undefined   |
| accountBorrows | uint256 | undefined   |
| totalBorrows   | uint256 | undefined   |

### ReservesAdded

```solidity
event ReservesAdded(address benefactor, uint256 addAmount, uint256 newTotalReserves)
```

Event emitted when the reserves are added

#### Parameters

| Name             | Type    | Description |
| ---------------- | ------- | ----------- |
| benefactor       | address | undefined   |
| addAmount        | uint256 | undefined   |
| newTotalReserves | uint256 | undefined   |

### ReservesReduced

```solidity
event ReservesReduced(address admin, uint256 reduceAmount, uint256 newTotalReserves)
```

Event emitted when the reserves are reduced

#### Parameters

| Name             | Type    | Description |
| ---------------- | ------- | ----------- |
| admin            | address | undefined   |
| reduceAmount     | uint256 | undefined   |
| newTotalReserves | uint256 | undefined   |

### Transfer

```solidity
event Transfer(address indexed from, address indexed to, uint256 amount)
```

EIP20 Transfer event

#### Parameters

| Name           | Type    | Description |
| -------------- | ------- | ----------- |
| from `indexed` | address | undefined   |
| to `indexed`   | address | undefined   |
| amount         | uint256 | undefined   |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fringe.fi/smart-contract-documentation/b-token/btoken.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
