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


<Aside type="note" title="Integrate Chainlink CCIP v1.6.0 into your project">
  <Tabs sharedStore="ccip-v1-5-1-package" client:visible>
    <Fragment slot="tab.1">npm</Fragment>
    <Fragment slot="tab.2">yarn</Fragment>
    <Fragment slot="tab.3">foundry</Fragment>

    <Fragment slot="panel.1">
      If you use [NPM](https://www.npmjs.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip):

      ```shell
      npm install @chainlink/contracts-ccip@1.6.0
      ```
    </Fragment>

    <Fragment slot="panel.2">
      If you use [Yarn](https://yarnpkg.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip):

      ```shell
      yarn add @chainlink/contracts-ccip@1.6.0
      ```
    </Fragment>

    <Fragment slot="panel.3">
      If you use [Foundry](https://book.getfoundry.sh/), install the package:

      ```shell
      forge install smartcontractkit/chainlink-ccip@2114b90f39c82c052e05af7c33d42c1ae98f4180
      ```
    </Fragment>
  </Tabs>
</Aside>

## BurnMintTokenPoolAbstract

An abstract contract that implements core token pool functionality for burning and minting operations in cross-chain token transfers.

[Git Source](https://github.com/smartcontractkit/chainlink-ccip/blob/contracts-ccip-release/1.6.0/chains/evm/contracts/pools/BurnMintTokenPoolAbstract.sol)

**Inherits:**

- [TokenPool](/ccip/api-reference/evm/v1.6.0/token-pool)

## Events

### Burned

```solidity
event Burned(address indexed sender, uint256 amount);
```

<Aside>Emitted when tokens are burned in the pool.</Aside>

**Parameters**

| Name     | Type      | Indexed | Description                               |
| -------- | --------- | ------- | ----------------------------------------- |
| `sender` | `address` | Yes     | The address initiating the burn operation |
| `amount` | `uint256` | No      | The number of tokens burned               |

### Minted

```solidity
event Minted(address indexed sender, address indexed recipient, uint256 amount);
```

<Aside>Emitted when new tokens are minted from the pool.</Aside>

**Parameters**

| Name        | Type      | Indexed | Description                               |
| ----------- | --------- | ------- | ----------------------------------------- |
| `sender`    | `address` | Yes     | The address initiating the mint operation |
| `recipient` | `address` | Yes     | The address receiving the minted tokens   |
| `amount`    | `uint256` | No      | The number of tokens minted               |

## Functions

### \_burn

Internal function that executes the token burning operation.

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

> \*\*NOTE\*\*
>
>
>
> Contains the specific burn call for a pool.
>
> This method can be overridden to create pools with different burn signatures without duplicating the underlying logic.

**Parameters**

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

### lockOrBurn

Burns tokens in the pool during a cross-chain transfer.

```solidity
function lockOrBurn(
  Pool.LockOrBurnInV1 calldata lockOrBurnIn
) external virtual override returns (Pool.LockOrBurnOutV1 memory);
```

> \*\*NOTE\*\*
>
>
>
> Burns tokens in the pool with essential security validation:
>
> - Performs security validation through `_validateLockOrBurn`
> - Burns the specified amount of tokens
> - Emits a `Burned` event
> - Returns destination token information

**Parameters**

| Name           | Type                                                                        | Description                             |
| -------------- | --------------------------------------------------------------------------- | --------------------------------------- |
| `lockOrBurnIn` | [`Pool.LockOrBurnInV1`](/ccip/api-reference/evm/v1.6.0/pool#lockorburninv1) | Input parameters for the burn operation |

**Returns**

| Type                                                                          | Description                                      |
| ----------------------------------------------------------------------------- | ------------------------------------------------ |
| [`Pool.LockOrBurnOutV1`](/ccip/api-reference/evm/v1.6.0/pool#lockorburnoutv1) | Contains destination token address and pool data |

### releaseOrMint

Mints new tokens to a recipient during a cross-chain transfer.

```solidity
function releaseOrMint(
  Pool.ReleaseOrMintInV1 calldata releaseOrMintIn
) external virtual override returns (Pool.ReleaseOrMintOutV1 memory);
```

> \*\*NOTE\*\*
>
>
>
> Mints tokens to a specified recipient with the following steps:
>
> - Performs security validation through `_validateReleaseOrMint`
> - Calculates the correct local token amount using decimal adjustments
> - Mints tokens to the specified receiver
> - Emits a `Minted` event

**Parameters**

| Name              | Type                                                                              | Description                             |
| ----------------- | --------------------------------------------------------------------------------- | --------------------------------------- |
| `releaseOrMintIn` | [`Pool.ReleaseOrMintInV1`](/ccip/api-reference/evm/v1.6.0/pool#releaseormintinv1) | Input parameters for the mint operation |

**Returns**

| Type                                                                                | Description                                      |
| ----------------------------------------------------------------------------------- | ------------------------------------------------ |
| [`Pool.ReleaseOrMintOutV1`](/ccip/api-reference/evm/v1.6.0/pool#releaseormintoutv1) | Contains the final amount minted in local tokens |