ERC-6960: Dual-Layer Token Standard
A single token contract that represents both a main asset and fractional shares of that asset. Two layers, one contract.
Adam's role
Co-author. I designed the dual-layer architecture at Polytrade to solve the fractional ownership problem for real-world assets.
What is it?
ERC-6960 lets a single smart contract manage both parent assets and their fractional shares. Layer one (mainId) is the asset itself. Layer two (subId) is a fraction of that asset. No need for separate contracts or complex bridging.
Simple analogy
Imagine a building worth $10M. The mainId is the building itself. The subIds are 10,000 shares worth $1,000 each. One smart contract manages both.
How it works
Asset Registration
A new mainId is created representing the parent asset. Metadata (valuation, legal docs, asset type) is attached to this ID.
Fraction Creation
SubIds are minted under the mainId. Each subId has its own supply, properties, and transfer rules. A building might have 10,000 subIds each representing 0.01% ownership.
Dual-Layer Transfers
Transfers specify both mainId and subId. You're not just sending 'token 42' but 'share 7 of asset 42.' The contract tracks balances across both dimensions.
Unified Queries
One contract call tells you everything: what assets exist, what fractions each has, who owns what. No need to query dozens of separate contracts.
Key concepts
Main ID (Layer 1)
The parent asset identifier. This represents the whole thing: a building, a fund, a portfolio. It carries the asset's metadata, valuation, and top-level properties.
Sub ID (Layer 2)
A fraction of the parent asset. Each subId represents a specific share class or ownership slice. Multiple subIds can exist under one mainId, each with its own properties.
Single Contract Architecture
Unlike deploying separate ERC-20 contracts for each fraction, ERC-6960 handles everything in one contract. This reduces gas costs, simplifies management, and makes querying ownership trivial.
ERC-1155 Compatibility
ERC-6960 builds on ERC-1155 patterns. If you've worked with multi-token contracts before, the interface will feel familiar. The innovation is the explicit parent-child relationship between IDs.
Use cases
Fractional Real Estate
One contract manages the property and all its ownership shares.
Fractional Real Estate
One contract manages the property and all its ownership shares.
Multi-Class Fund Shares
Different share classes under one fund, all in one contract.
Multi-Class Fund Shares
Different share classes under one fund, all in one contract.
Gaming Items with Sub-Properties
A weapon with detachable enchantments, all managed in one contract.
Gaming Items with Sub-Properties
A weapon with detachable enchantments, all managed in one contract.
Technical specification
The core interface that defines ERC-6960.
// SPDX-License-Identifier: MIT
interface IERC6960 {
// Balance queries — note the dual-layer IDs
function balanceOf(address account, uint256 mainId, uint256 subId) external view returns (uint256);
function balanceOfBatch(
address[] calldata accounts,
uint256[] calldata mainIds,
uint256[] calldata subIds
) external view returns (uint256[] memory);
// Transfers with dual-layer addressing
function safeTransferFrom(
address from, address to,
uint256 mainId, uint256 subId,
uint256 amount, bytes calldata data
) external;
// Approvals
function setApprovalForAll(address operator, bool approved) external;
function isApprovedForAll(address account, address operator) external view returns (bool);
// Events
event TransferSingle(
address indexed operator, address indexed from, address indexed to,
uint256 mainId, uint256 subId, uint256 value
);
}