# CCIP v1.5.1 BurnMintTokenPool Contract API Reference
Source: https://docs.chain.link/ccip/api-reference/evm/v1.5.1/burn-mint-token-pool

> For the complete documentation index, see [llms.txt](/llms.txt).

> **NOTE: Integrate Chainlink CCIP v1.5.1 into your project**

## BurnMintTokenPool

A specialized token pool implementation that handles the minting and burning of third-party tokens using the standard `burn(amount)` function.

[Git Source](https://github.com/smartcontractkit/ccip/blob/0df0625eea603ba8572d5382d72979a7f2b12bfb/contracts/src/v0.8/ccip/pools/BurnMintTokenPool.sol)

**Inherits:**

- [BurnMintTokenPoolAbstract](/ccip/api-reference/evm/v1.5.1/burn-mint-token-pool-abstract)
- [ITypeAndVersion](/ccip/api-reference/evm/v1.5.1/i-type-and-version)

> **NOTE**
>
> Key characteristics of this token pool:
>
> - Manages minting and burning operations for third-party tokens
> - Implements configurable whitelisting for transaction originators:
>   - Can accept transactions from any address
>   - Can restrict to only whitelisted addresses
> - Whitelisting configuration is permanent after deployment
> - Requires adjustable burner/minter roles in the token contract if pool redeployment is anticipated
> - Uses the standard `burn(amount)` function for token burning operations

## State Variables

### typeAndVersion

```solidity
string public constant override typeAndVersion = "BurnMintTokenPool 1.5.1";
```

> **NOTE**
>
> A constant identifier that specifies the contract type and version number for interface detection and version
> management.

**Returns**

| Type     | Description                                       |
| -------- | ------------------------------------------------- |
| `string` | The contract identifier "BurnMintTokenPool 1.5.1" |

## Functions

### \_burn

Internal function that executes the token burning operation using the standard burn interface.

```solidity
function _burn(uint256 amount) internal virtual override;
```

> **NOTE**
>
> Implements the abstract burn function from BurnMintTokenPoolAbstract:
>
> - Calls the token's `burn(amount)` function directly
> - Requires the pool to have sufficient burning permissions

**Parameters**

| Name     | Type      | Description                  |
| -------- | --------- | ---------------------------- |
| `amount` | `uint256` | The number of tokens to burn |

### constructor

```solidity
constructor(
  IBurnMintERC20 token,
  uint8 localTokenDecimals,
  address[] memory allowlist,
  address rmnProxy,
  address router
) TokenPool(token, localTokenDecimals, allowlist, rmnProxy, router);
```

> **NOTE**
>
> Initializes the token pool with its configuration parameters:
>
> - Sets up the token contract reference
> - Configures decimal precision for local tokens
> - Establishes the initial whitelist of authorized addresses
> - Links to the RMN proxy and router contracts

**Parameters**

| Name                 | Type             | Description                                          |
| -------------------- | ---------------- | ---------------------------------------------------- |
| `token`              | `IBurnMintERC20` | The third-party token contract to manage             |
| `localTokenDecimals` | `uint8`          | The decimal precision for the local token            |
| `allowlist`          | `address[]`      | Initial list of addresses authorized to use the pool |
| `rmnProxy`           | `address`        | Address of the RMN proxy contract                    |
| `router`             | `address`        | Address of the router contract                       |