Skip to content
  1. Home
  2. ERC Standards
  3. ERC Standards
  4. ERC-1155 Explained: The Multi-Token Standard for Asset Portfolios, Energy and Carbon
ERC Standards

ERC-1155 Explained: The Multi-Token Standard for Asset Portfolios, Energy and Carbon

ERC-1155 lets one contract manage many fungible and non-fungible tokens with batch transfers. See how it works and why we used it for property, energy and carbon tokenization.

NUVZ Tokenization Team Updated 7 min read Technically reviewed

ERC-1155 is the Multi Token Standard: a single smart contract can manage any number of token types, each identified by an ID, with any supply — one for a unique item, millions for a fungible unit. Transfers can move many token types in one transaction, and a shared metadata URI keeps thousands of assets cheap to describe. That efficiency is why we chose ERC-1155 for a real estate tokenization platform (one token class per property) and an electricity tokenization platform (one token per watt-hour).

Key takeaways

  • One ERC-1155 contract can represent a whole portfolio — each property, vintage, loan pool or product line gets its own ID.
  • Batch transfers and batch balance queries reduce gas and simplify portfolio operations.
  • Receiver hooks prevent tokens from being lost in non-aware contracts, but introduce re-entrancy surface that must be handled.
  • ERC-1155 has no built-in compliance. For securities, enforce identity and transfer rules in the contract or adopt ERC-7943; compare with ERC-3643.

How ERC-1155 works

Function / event Purpose
balanceOf(account, id) Balance of one token type
balanceOfBatch(accounts[], ids[]) Many balances in one call
safeTransferFrom(from, to, id, amount, data) Move one token type
safeBatchTransferFrom(from, to, ids[], amounts[], data) Move several token types at once
setApprovalForAll(operator, approved) Operator approval for all IDs
TransferSingle / TransferBatch Events covering mint, burn and transfer
URI(value, id) Metadata URI updates

Recipients that are contracts must implement onERC1155Received / onERC1155BatchReceived, otherwise the transfer reverts. Metadata uses uri(id), where clients replace {id} with the hex token ID — e.g. ipfs://…/{id}.json.

There is no per-ID allowance; approvals are all-or-nothing per operator. For financial assets, that means operator approvals must be handled carefully in custody and marketplace contracts.

Why ERC-1155 suits many RWA programmes

Property portfolios

Each building becomes token ID n with its own supply, valuation and income stream, while investors, KYC status and the marketplace are shared. Our real estate platform used exactly this, with IPFS-anchored property documents, a private secondary market among eligible investors and automatic rental distributions.

Energy and environmental units

High-frequency units need cheap minting and burning. In our electricity project, ENERGY tokens are minted per signed meter reading to the generator, CONSUMPTION tokens are minted at each consumption point, and both are burned 1:1 at settlement. Carbon credits by vintage or methodology map cleanly to IDs too — see carbon credit tokenization.

Mixed fungible and non-fungible assets

A single contract can hold a unique title NFT (supply 1) alongside fractional shares (supply 10,000) and reward points (fungible). That makes ERC-1155 a natural fit for structured products and loyalty-linked programmes.

Loan pools and tranches

Each pool or tranche can be an ID, making portfolio-level reporting and batch distributions straightforward.

Turn this into a working platformFrom smart contracts and investor onboarding to marketplaces and income distribution, NUVZ builds the full tokenization stack.
Chat with an expert

Adding compliance to ERC-1155

To use ERC-1155 for securities, we typically:

  1. Override the internal update hook to call a compliance check (identity verified, jurisdiction allowed, holding limits) before any balance changes — covering mint, transfer and batch transfer.
  2. Expose eligibility views such as canTransfer(from, to, id, amount) — ideally via the ERC-7943 multi-token interface — so wallets and venues can pre-check.
  3. Add agent functions for freezing (per account and ID), forced transfer and recovery.
  4. Keep KYC pluggable so a regulated provider can be swapped without redeploying tokens — a design we used on the real estate platform.
  5. Record governance actions on-chain and keep contracts publicly verifiable.

Security notes

  • Re-entrancy: receiver hooks call external code. Follow checks-effects-interactions and use re-entrancy guards around distribution and marketplace logic.
  • Batch arrays: validate equal array lengths and bound loop sizes to avoid out-of-gas denial of service.
  • Operator approvals: an approved marketplace can move every ID a user holds — scope approvals in your UX and contracts.
  • Supply tracking: use a supply extension so total supply per ID is queryable for reconciliation.

ERC-1155 vs alternatives

Need ERC-1155 Alternative
Many asset classes in one contract ✔ ERC-6909 (simpler, no callbacks)
Strict regulated securities Needs extension ERC-3643
Single unique asset per contract Possible ERC-721
Value-bearing slots (bonds, vesting) Possible ERC-3525

See ERC-6909 for a leaner multi-token design and ERC-3525 for semi-fungible financial instruments.

Example: a compliance-aware ERC-1155 for a property portfolio

The sketch below illustrates how we enforce eligibility for every mint, transfer and batch transfer by overriding the single internal update function in a modern ERC-1155 implementation.

// Illustrative only — not audited.
contract PropertyShares is ERC1155, AccessControl {
    bytes32 public constant ISSUER_ROLE = keccak256("ISSUER_ROLE");
    IEligibility public eligibility;            // pluggable KYC/AML results
    mapping(uint256 => bool) public listed;      // one ID per property

    function issue(address to, uint256 propertyId, uint256 amount) external onlyRole(ISSUER_ROLE) {
        require(listed[propertyId], "unknown property");
        _mint(to, propertyId, amount, "");
    }

    function _update(address from, address to, uint256[] memory ids, uint256[] memory values)
        internal override
    {
        for (uint256 i; i < ids.length; ++i) {
            if (to != address(0)) require(eligibility.canReceive(to, ids[i]), "receiver not eligible");
            if (from != address(0) && to != address(0)) require(eligibility.canSend(from, ids[i]), "sender restricted");
        }
        super._update(from, to, ids, values);
    }
}

Because eligibility is checked per token ID, different properties can carry different rules — for example one building open to professional investors in the EU, another restricted to a single country.

Token ID strategies

How you allocate IDs determines how easy the platform is to operate:

Strategy Example When to use
Sequential 1, 2, 3 … per property Simple portfolios
Encoded Upper bits = asset class, lower bits = asset number Mixed asset types in one contract
Hash-based keccak256(assetRef) Deterministic IDs from external references
Vintage/series Project × year Carbon credits, energy certificates

Document the scheme; investors, auditors and indexers will rely on it.

Distributions across many IDs

ERC-1155 makes portfolio distributions efficient. A typical monthly run for a property portfolio:

  1. Snapshot balances per ID at the record date (via events or a snapshot extension).
  2. For each property, compute net distributable income after fees and reserves.
  3. Record per-holder entitlements per ID.
  4. Holders claim in one transaction across all their properties.

This is exactly where ERC-1155 outperforms deploying one ERC-20 per asset: one claim, many assets.

Metadata for financial assets

Use the uri(id) template to serve a JSON document per ID with valuation date, location (at an appropriate granularity), legal entity, document hashes and income history. Keep private data out; publish hashes of the data room documents instead — see ERC-1643 document management.

Frequently asked questions

Yes, especially for portfolios: each property is an ID with its own supply and income, while compliance and the marketplace are shared. Add identity-gated transfer logic for securities.

Yes. Any ID can have a supply greater than one, so fractions of an asset are simply units of that ID.

Batch minting, batch transfers and batch balance queries reduce the number of transactions and storage writes compared with deploying many ERC-20 or ERC-721 contracts.

Yes — Hedera’s EVM-compatible smart contract service runs ERC-1155 contracts. Both our real estate and electricity platforms used ERC-1155 on Hedera.

Practically unlimited — IDs are 256-bit numbers. Operational limits come from your metadata, indexing and governance, not the contract.

Yes, if your compliance logic checks rules per ID, as in the example above.

Support is growing but less universal than for ERC-20. Confirm with your chosen custodian early.

Written by the NUVZ Tokenization Team

NUVZ is the RWA and Web3 engineering brand of ESS ENN Associates (est. 1993). Our team has designed and shipped tokenization platforms for real estate, education loans, solar PPAs, energy, carbon credits, bank deposits and trade documents. About us · Case studies

This article is for general information only and is not legal, tax or investment advice. Token standards evolve — always confirm the current status of an ERC at eips.ethereum.org and take advice from qualified counsel in each jurisdiction before issuing tokens.

Keep reading

Related guides

All insights →

Get Expert Advice on Your Token Design

Questions about this standard or your own tokenization use case? Send us a note. A NUVZ engineer will reply within one business day.

Prefer a call? Pick a 30-minute slot with our team.

Book a 30-min expert call
  • Mutual NDA available before you share details
  • Reply within one business day
  • Your data is used only to answer your enquiry

Protected against spam. We never sell or share your data with third parties for marketing.

Chat with our experts