Object Token is a novel token standard introduced by Every Protocol — often referred to simply as an object.

It is designed to be structured, composable, and interactive, enabling tokens that can evolve, relate, and co-create across creators and chains.

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.

StandardToken Contract StorageOmni Registry Storage
ERC20map(owner => balance)
ERC721map(id => owner)
map(id => uri)
ERC1155map(owner => id => balance)
map(id => uri)
Objectsmap(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.

PropertyDescription
idA unique identifier within a set (non-fungible only)
ownerThe address that currently owns the token
balanceAmount held by an address (for fungible or semi-fungible tokens)
uriA metadata URI (used in ERC721 and ERC1155 only)
metadataStructured metadata stored onchain (unique to object tokens)
elementsModular components such as matter, values, uniques, and info
positionLogical or spatial location, used for linking and layout

todo: add further explanation for metadata, elements, and position

Operations

We’re already familiar with standard operations like mint, transfer, and burn. Object tokens introduce additional operations that support mutation, evolution, and interoperation — all native to the protocol.

OperationDescriptionImplemented InAffected Properties
mintCreate a new object from a setToken Contractowner, metadata, elements
transferChange the ownership of an objectToken Contractowner
burnPermanently remove an objectToken Contractowner, metadata
updateModify an object’s metadata or elementsToken Contractmetadata, elements
upgradeApply kind-defined upgrades to the objectToken Contractmetadata
relateEstablish a relation between objectsOmni Registryposition
unrelateRemove a relation between objectsOmni Registryposition
moveChange an object’s spatial or logical positionOmni Registryposition

Assets

For traditional non-fungible tokens (NFTs), the associated assets are referenced via a uri. These URIs may point to IPFS, Arweave, or even centralized servers — but the assets themselves are not guaranteed to be verifiable or secure.

Object Tokens take a fundamentally different approach.

Instead of pointing to static external files, assets in Every Protocol are dynamically generated using the object’s metadata.rev, kind, set, and an associated Kind Contract. This makes assets not only programmable, but also publicly verifiable.

An object’s assets can be seen as projections of the object from different perspectives, each one computed via a facet function in the kind contract. These computed views are called facet images.