Storage
The OpenZeppelin documentation clearly distinguishes between tokens and token contracts:Token contracts are smart contracts that manage token balances and operations, while tokens themselves are the digital assets represented by those balances.In contrast to existing standards like ERC-721 or ERC-1155, Object Tokens store structured and extensible data directly within token contracts. Beyond local state, properties related to interactions across objects and across contracts are maintained in a shared coordination layer called the Omni Registry.
| Standard | Token Contract Storage | Omni Registry Storage |
|---|---|---|
| ERC20 | map(owner => balance) | — |
| ERC721 | map(id => owner)map(id => uri) | — |
| ERC1155 | map(owner => id => balance)map(id => uri) | — |
| Objects | map(id => owner)map(id => metadata)map(id => elements) | map(id => position) |
Properties
The table below outlines the key properties tracked by various token types. Object tokens extend this list with composable content, structured metadata, and spatial logic.| Property | Description |
|---|---|
| id | A unique identifier within a set (non-fungible only) |
| owner | The address that currently owns the token |
| balance | Amount held by an address (for fungible or semi-fungible tokens) |
| uri | A metadata URI (used in ERC721 and ERC1155 only) |
| metadata | Structured metadata stored onchain (unique to object tokens) |
| elements | Modular components such as matter, values, uniques, and info |
| position | Logical or spatial location, used for linking and layout |
Operations
We’re already familiar with standard operations likemint, transfer, and burn.
Object tokens introduce additional operations that support mutation, evolution, and interoperation — all native to the protocol.
| Operation | Description | Implemented In | Affected Properties |
|---|---|---|---|
| mint | Create a new object from a set | Token Contract | owner, metadata, elements |
| transfer | Change the ownership of an object | Token Contract | owner |
| burn | Permanently remove an object | Token Contract | owner, metadata |
| update | Modify an object’s metadata or elements | Token Contract | metadata, elements |
| upgrade | Apply kind-defined upgrades to the object | Token Contract | metadata |
| relate | Establish a relation between objects | Omni Registry | position |
| unrelate | Remove a relation between objects | Omni Registry | position |
| move | Change an object’s spatial or logical position | Omni Registry | position |