# ERC-2309: ERC-721 Consecutive Transfer Extension

Source: https://www.eipsfordesigners.com/standards/ERC-2309
Agent brief: https://www.eipsfordesigners.com/standards/ERC-2309/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-2309
Last reviewed: 2026-05-25
Last updated: 2026-05-25

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | NFT Capabilities |
| Journey stages | Executing Transactions |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/erc-2309 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-2309 |

## UX Impact

Batch minting/transfer events — efficiently create or move thousands of consecutive tokens in one transaction. Design implications: show batch mint/transfer notifications (e.g., 'Received tokens #1-1000'), handle large collection imports without individual events, efficient indexing of mass distributions. Design decisions: how to display large batch receipts without overwhelming, progress indicators for indexing large transfers, summarizing vs listing individual tokens.

## Summary

Batch minting/transfer events — efficiently create or move thousands of consecutive tokens in one transaction.

## For Designers

- You can collapse consecutive mints into one Received #1–1000 activity row with expand option.
- Your import progress can show Indexing 847 of 1000 tokens during large batch processing.
- You can offer summary-first gallery with expand to id list for power users.

## Applicability

### When to Use

- Mass airdrops or batch mints use consecutive ids.
- Activity feed would choke on individual events.
- Indexer supports range expansion.

### When to Avoid

- Single NFT mints with no batch events.
- Non-consecutive token ids in batch.
- Users need immediate per-id detail without indexing wait.

## Problems It Solves

### Activity feed unusable after airdrop

Impact: high

Old way: 1000 identical transfer lines

New way: Single batch summary row

### Slow gallery after mass mint

Impact: high

Old way: UI freezes loading all items

New way: Progressive indexing with progress UI

### Users miss airdrop happened

Impact: medium

Old way: Buried in noise or invisible

New way: Clear batch receipt notification

## Anti-Patterns

### 1000 separate activity notifications

Severity: critical

UI freeze and notification spam

Instead: Single batch summary with optional expand

### Empty gallery during indexing with no progress

Severity: high

Users think airdrop failed

Instead: Indexing N tokens progress bar

### Rendering full id list on mobile expand

Severity: high

Browser crash

Instead: Paginated expand with search

## Design Decisions

### Summary or list by default?

Recommendation: Summary in feed; full grid in collection view.

Rationale: Feed chokes on thousands of rows.

### How many ids in expand?

Recommendation: Paginate at 50; offer search by id.

Rationale: Rendering 1000 rows crashes mobile.

### Notification for batch?

Recommendation: One push: You received 1000 [Collection] tokens.

Rationale: 1000 pushes would spam.

## States to Design

### Batch received — indexing

Trigger: Event seen, gallery loading.

User need: Know tokens are coming.

Design response: Indexing N tokens progress indicator.

### Batch complete in gallery

Trigger: Indexer finished.

User need: Browse collection.

Design response: Full grid with count badge on collection.

### Activity feed collapsed

Trigger: Default view.

User need: Scan history quickly.

Design response: Single batch row with range.

### Expanded id list

Trigger: User expands batch row.

User need: Find specific id.

Design response: Paginated id list or search within range.

### Partial index failure

Trigger: Indexer timeout.

User need: Recover without panic.

Design response: Retry indexing with support link.

## Vocabulary

- Use "Received 500 tokens" instead of "ConsecutiveTransfer event id 1-500": Outcome not event name.

- Use "Loading your collection" instead of "Indexer expanding range": User-facing wait copy.

- Use "Show token IDs" instead of "Expand batch mint log": Power user optional action.

## What to Prototype First

### Batch receipt notification

First touch after airdrop sets expectations.

Covers: Range summary, Expand ids

- You received #1–1000
- Collection name
- View collection CTA

### Indexing progress

Large batches take time to appear in gallery.

Covers: Indexing, Complete, Partial failure

- Progress bar
- Count label
- Retry indexing

### Activity feed aggregation

Feed readability for whale airdrops.

Covers: Collapsed batch, Expanded id list

- Summary row
- Expand chevron
- Max expand limit

### Collection grid after batch

Gallery must load performantly.

Covers: Virtualized grid, Representative thumbnails

- Lazy load
- Sample preview strip
- View all

## Mental Model

### Consecutive range

Tokens #start–#end moved in one on-chain event.

### Batch event

One log line represents many tokens — UI summarizes.

### Indexer expansion

Backend expands range into individual holdings asynchronously.

### Summary vs detail

Default summary; expand for id list when needed.

### Airdrop receipt

User cares they got the drop, not 1000 duplicate lines.

## Seen in the Wild

- OpenSea: Large collection import and activity aggregation patterns. (https://opensea.io/)

- Blur: Batch bid and airdrop UX for high-volume collections. (https://blur.io/)

- Etherscan: Batch transfer event display on explorer. (https://etherscan.io/)

## On Monad

### Batch mint throughput

Ethereum: Large drops congest indexers

Monad: High TPS enables faster batch indexing

Design implication: Shorter indexing progress on Monad airdrops.

### Activity volume

Ethereum: Feed lag on big batches

Monad: Fast blocks still need UI aggregation

Design implication: Always summarize batches regardless of chain speed.

## UX Patterns

### Batch Activity Summary

Collapsed range row in transaction history.

Components: BatchRow, RangeLabel, ExpandToggle

User flow:

- Airdrop lands
- Feed shows one row
- User expands optional
- Ids paginate

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Collection Index Progress

Progress while indexer expands token range.

Components: ProgressBar, CountLabel, RetryButton

User flow:

- Batch detected
- Progress shown
- Grid populates
- Complete state

Mockup registry key: `concept/tx-status` (React UI on the live standard page).

## Related Standards

- ERC-721: Consecutive transfer extension for ERC-721

- ERC-1155: Batch transfers in multi-token standard

## Technical Notes

ERC-2309 consecutive events require indexer range expansion; never render unbounded id lists.
