ERC-6909

  • Name: ERC-6909 (Minimal Multi-Token Interface)
  • URL: https://eips.ethereum.org/EIPS/eip-6909
  • Category: minimal multi-token standard / internal-accounting primitive / gas-minimized token interface
  • Summary: ERC-6909 is best understood as a lower-layer token-accounting primitive, not as a wallet, marketplace, or one specific application token. Its core move is to keep multiple token IDs inside one contract while combining ERC-20-style per-ID allowances with ERC-1155-style shared-contract accounting, then deliberately remove ERC-1155 batching and mandatory receiver callbacks. That makes ERC-6909 analytically useful as a comparison point for systems that want multi-asset balances without inheriting the full callback-heavy, batch-heavy ERC-1155 surface. The mechanism becomes especially legible in Uniswap v4, where ERC-6909 is used as an internal balance primitive alongside flash accounting rather than as a consumer-facing collectible format.
  • What it does:
    • Defines a minimal multi-token interface with balanceOf(owner,id), allowance(owner,spender,id), isOperator(owner,spender), transfer, transferFrom, approve, and setOperator
    • Keeps multiple token IDs under one contract instead of requiring a separate ERC-20 contract for each asset type
    • Uses a hybrid permission model where users can grant per-token-ID allowances or full-account operator rights across all IDs
    • Deliberately removes ERC-1155-required receiver callbacks and standard-level batch operations to reduce interface size, control-flow complexity, and gas overhead
    • Keeps ERC-165 interface detection while leaving metadata, content-URI, and per-ID total-supply features as optional extensions rather than part of the minimal core
    • Allows wrappers or app-specific extensions to reintroduce batching, UX helpers, or compatibility layers where those tradeoffs are actually wanted
  • Key claims:
    • The finalized ERC text explicitly frames ERC-6909 as a simplified alternative to ERC-1155 whose interface has been reduced to the bare minimum needed to manage multiple tokens in one contract, which is the clearest reason to catalog it as a lower-layer token primitive rather than a feature-rich asset framework.
    • The motivation is analytically sharp: ERC-6909 says ERC-1155’s required callbacks and standard-level batching are not always worth their runtime, code-size, and control-flow costs, so it removes them on purpose rather than treating them as harmless defaults.
    • The permission system is the most reusable mechanism insight. ERC-6909 keeps ERC-1155-style global operators but adds ERC-20-like per-token allowances, which makes the standard a clean midpoint between all IDs, full power operator models and one contract per asset fungible-token approvals.
    • The rationale also says batching should move out of the base standard and become implementation-specific, which makes calldata layout and batch semantics an application-layer choice instead of a one-size-fits-all assumption.
    • The removal of required callbacks and the explicit rejection of safeTransfer-style naming are important because the standard is trying to make no external receiver call by default the normal control-flow path, not an opt-in exception.
    • The backwards-compatibility section is useful because it makes the tradeoff explicit: ERC-6909 is not backwards compatible with ERC-1155, but wrappers can bridge to ERC-20, ERC-721, and ERC-1155 where compatibility matters more than minimalism.
    • OpenZeppelin’s implementation docs make the extension surface concrete: decimals, content URI support, and total-supply tracking are treated as optional add-ons rather than core requirements, which reinforces that ERC-6909 is a stripped-down accounting base layer.
    • Uniswap v4’s official developer docs are an especially strong adoption signal because they use ERC-6909 as an internal balance primitive around the PoolManager and flash-accounting flow, showing the standard matters not only for game-item style assets but also for high-frequency internal settlement and delta resolution.
    • ERC-6909 clears the corpus bar because it exposes a distinct lower layer between ERC-20, ERC-1155, and more specialized semi-fungible/tokenization standards: one shared contract, per-ID balances, optional global operators, no mandatory callbacks, no mandated batching, and a clear path toward internal-ledger uses that would be flattened if it were filed as just another token standard.
  • Whitepaper: No standalone ERC-6909 whitepaper surfaced in this pass. The strongest primary materials were the final ERC text, the canonical raw markdown, OpenZeppelin’s implementation docs, Uniswap v4’s ERC-6909 guide, and the reference repository notes collected in ../../whitepapers/erc-6909-primary-sources-2026-05-14.md.
  • Sources:
  • Last reviewed: 2026-05-14 UTC