> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base.org/llms.txt
> Use this file to discover all available pages before exploring further.

# IB20Asset.batchMint

> Mints tokens to multiple recipients in a single all-or-nothing call.

## Signature

```solidity IB20Asset.sol theme={null}
function batchMint(address[] calldata recipients, uint256[] calldata amounts) external;
```

| Field               | Value                            |
| ------------------- | -------------------------------- |
| Selector            | `0x68573107`                     |
| Canonical signature | `batchMint(address[],uint256[])` |

## Description

Mints `amounts[i]` to `recipients[i]` in one call. All-or-nothing: any element revert unwinds the whole transaction. Emits `Transfer(address(0), recipients[i], amounts[i])` per element.

## Parameters

| Name         | Type        | Description                                      |
| ------------ | ----------- | ------------------------------------------------ |
| `recipients` | `address[]` | Accounts receiving the minted tokens.            |
| `amounts`    | `uint256[]` | Per-recipient amounts, parallel to `recipients`. |

## Reverts

| Error                                      | Condition                                                    |
| ------------------------------------------ | ------------------------------------------------------------ |
| `AccessControlUnauthorizedAccount`         | Caller does not hold `MINT_ROLE`.                            |
| `ContractPaused(MINT)`                     | The `MINT` operation is paused.                              |
| `LengthMismatch`                           | `recipients.length != amounts.length`.                       |
| `EmptyBatch`                               | Either array is empty.                                       |
| `InvalidReceiver`                          | Any `recipients[i]` is `address(0)`.                         |
| `PolicyForbids(MINT_RECEIVER_POLICY, ...)` | Any recipient is not authorized by the mint receiver policy. |
| `SupplyCapExceeded`                        | Cumulative mint would exceed the supply cap.                 |

## Access Control

Caller must hold `MINT_ROLE`. Reverts `AccessControlUnauthorizedAccount` otherwise.

## Policy Interaction

Each recipient must pass `MINT_RECEIVER_POLICY`. Reverts `PolicyForbids(MINT_RECEIVER_POLICY, ...)` for any recipient that does not.

## Example

```solidity Usage Example lines wrap expandable highlight={9} theme={null}
address[] memory recipients = new address[](2);
recipients[0] = holderA;
recipients[1] = holderB;

uint256[] memory amounts = new uint256[](2);
amounts[0] = 100e18;
amounts[1] = 200e18;

IB20Asset(asset).batchMint(recipients, amounts);
```

Use `batchMint` inside an `announce` call to disclose a dividend issuance or additional mint in an announcement:

```solidity Announced Batch Mint theme={null}
bytes[] memory calls = new bytes[](1);
calls[0] = abi.encodeCall(IB20Asset.batchMint, (recipients, amounts));
asset.announce(calls, id, description, uri);
```

On success the asset emits `Announcement`, then one `Transfer(address(0), recipients[i], amounts[i])` per recipient, then `EndAnnouncement`.
