> ## Documentation Index
> Fetch the complete documentation index at: https://base-a060aa97-roethke-b20-upgrade-pages.mintlify.site/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`.
