Every Protocol Core
Every Protocol enables intuitive, collaborative, secure, and rewarding onchain co-creation.
Every Protocol introduces the Object Token (or simply, object) — a next-gen token with structure, semantics, and interoperability. Each object has a kind, is minted from a set, and is composed of elements. Objects can interact with one another through relations defined at the kind level. Every aspect of an object can be created or developed by anyone, unlocking true onchain collaboration.
This repository contains the core contracts that power Every Protocol.
Contracts
- SetRegistry — registers and manages object sets
- KindRegistry — registers and manages kinds
- ElementRegistry — registers object building blocks such as values, uniques, and matters
- OmniRegistry — registers relations and enables object-to-object interactions
- ObjectMinter — optional minting module allowing sets to define pricing, access, and sales logic
The contracts in this repository are in an early stage. We’re releasing the draft code now to build in public — with open feedback, shared exploration, and meaningful community contributions. We expect this to be an evolving, months-long process and welcome all forms of participation.
License
Every Protocol Core is licensed under the Business Source License 1.1 (BUSL-1.1), see BUSL_LICENSE, and the MIT License (MIT), See MIT_LICENSE. Each file declares its applicable license via the SPDX header.
Contents
Constraints
State Variables
MAX_KIND_ELEMENTS
uint256 constant MAX_KIND_ELEMENTS = 16
MAX_KIND_RELATIONS
uint256 constant MAX_KIND_RELATIONS = 16
MAX_RELATION_ADJACENCIES
uint256 constant MAX_RELATION_ADJACENCIES = 16
IdScheme
State Variables
SYSTEM_OBJECT_MAX
0~16 are reserved for system objects
uint64 constant SYSTEM_OBJECT_MAX = 16
PLAIN_OBJECT_UNSPECIFIED
uint64 constant PLAIN_OBJECT_UNSPECIFIED = 0
PLAIN_OBJECT_MIN
uint64 constant PLAIN_OBJECT_MIN = 1
PLAIN_OBJECT_USER_MIN
uint64 constant PLAIN_OBJECT_USER_MIN = 1
PLAIN_OBJECT_MAX
uint64 constant PLAIN_OBJECT_MAX = 0xFFFFFFFF_FFFFFFFE
PLAIN_OBJECT_ANY
uint64 constant PLAIN_OBJECT_ANY = 0xFFFFFFFF_FFFFFFFF
SEMANTIC_OBJECT_MIN
uint64 constant SEMANTIC_OBJECT_MIN = 1
SEMANTIC_OBJECT_SYSTEM_MAX
uint64 constant SEMANTIC_OBJECT_SYSTEM_MAX = 16
SEMANTIC_OBJECT_USER_MIN
uint64 constant SEMANTIC_OBJECT_USER_MIN = 17
SEMANTIC_OBJECT_MAX
uint64 constant SEMANTIC_OBJECT_MAX = 0x0000FFFF_FFFFFFFE
KindIds
State Variables
SET
uint64 constant SET = 1
KIND
uint64 constant KIND = 2
RELATION
uint64 constant RELATION = 3
VALUE
uint64 constant VALUE = 4
UNIQUE
uint64 constant UNIQUE = 5
USER_START
uint64 constant USER_START = 17
SetIds
State Variables
SET
uint64 constant SET = 1
KIND
uint64 constant KIND = 2
RELATION
uint64 constant RELATION = 3
VALUE
uint64 constant VALUE = 4
UNIQUE
uint64 constant UNIQUE = 5
USER_START
uint64 constant USER_START = 17
RelationIds
State Variables
USER_START
uint64 constant USER_START = 17
ValueIds
State Variables
NATIVE
uint64 constant NATIVE = 0
USER_START
uint64 constant USER_START = 17
UniqueIds
State Variables
USER_START
uint64 constant USER_START = 17
Revisions
State Variables
UNSPECIFIED
uint32 constant UNSPECIFIED = 0
LATEST
uint32 constant LATEST = 0
INITIAL
uint32 constant INITIAL = 1
Contents
Contents
ElementRegistryErrors
Errors
TokenNotExist
error TokenNotExist(uint64 token);
UnsupportedTokenStandard
error UnsupportedTokenStandard(uint8 std);
InvalidTokenContract
error InvalidTokenContract(address addr);
InvalidTokenAddress
error InvalidTokenAddress();
InvalidTokenData
error InvalidTokenData();
InvalidTokenRange
error InvalidTokenRange(uint64 begin, uint64 end);
UniqueElements
State Variables
CODE
uint256 constant CODE = 0
DATA
uint256 constant DATA = 1
TOKEN_SPEC
uint256 constant TOKEN_SPEC = 2
COUNT
uint256 constant COUNT = 3
Structs
View
struct View {
MatterHash code;
MatterHash data;
Info tokenSpec;
}
UniqueRegistry
Inherits: IUniqueRegistry, ElementRegistryErrors, Initializable, Soke
State Variables
UNIQUEREGISTRY_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
keccak256(abi.encode(uint256(keccak256("every.storage.UniqueRegistry")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant UNIQUEREGISTRY_STORAGE_LOCATION =
0x04dc4921879709492146fc19ec213a3e22c8a01b900b814a9bdf73ef2a847900
Functions
_getUniqueRegistryStorage
function _getUniqueRegistryStorage() private pure returns (UniqueRegistryStorage storage $);
__UniqueRegistry_init
function __UniqueRegistry_init(uint64 idStart) internal onlyInitializing;
uniqueRegister
Registers a new unique token
function uniqueRegister(address code, bytes32 data, TokenStandard std, uint8 decimals, string memory symbol)
external
override
returns (uint64 id, Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
code | address | Address of the token contract |
data | bytes32 | Hash of the associated matter |
std | TokenStandard | Token standard (e.g. ERC721) |
decimals | uint8 | Number of decimals |
symbol | string | Display symbol (max 30 characters) |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the new unique |
meta | Descriptor | desc Descriptor after registration |
uniqueUpdate
Updates the data hash of a unique
function uniqueUpdate(uint64 id, bytes32 data) external override returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Updated descriptor |
uniqueUpdate
Updates the data hash of a unique
function uniqueUpdate(uint64 id, bytes32 data, string memory symbol)
external
override
returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
data | bytes32 | New data hash |
symbol | string |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Updated descriptor |
uniqueUpgrade
Upgrades the kind and/or set revision of a unique
function uniqueUpgrade(uint64 id, uint32 kindRev0, uint32 setRev0)
external
override
returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
kindRev0 | uint32 | |
setRev0 | uint32 |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Descriptor after upgrade |
uniqueTouch
Bumps the revision of a unique with no content change
function uniqueTouch(uint64 id) external override returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Descriptor after touch |
uniqueTransfer
Transfers ownership of a unique token
function uniqueTransfer(uint64 id, address to) external override returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
to | address | Address of the new owner |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Address of the previous owner |
uniqueRevision
Resolves and validates a revision
function uniqueRevision(uint64 id, uint32 rev0) external view override returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Resolved revision (0 = not found) |
uniqueDescriptor
Returns the descriptor at a given revision
function uniqueDescriptor(uint64 id, uint32 rev0) external view override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the specified revision |
uniqueSnapshot
Returns descriptor and elements at a specific revision
function uniqueSnapshot(uint64 id, uint32 rev0)
external
view
override
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Elements at the revision |
uniqueOwner
Returns the current owner of a unique
function uniqueOwner(uint64 id) external view override returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Address of the current owner |
uniqueSota
Returns the latest descriptor and current owner
function uniqueSota(uint64 id) external view override returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Address of the current owner |
uniqueStatus
function uniqueStatus(uint64[] memory ids) external view override returns (bool active);
_register
function _register(
uint64 id,
address code,
bytes32 data,
TokenStandard std,
uint8 decimals,
bytes30 symbol,
address owner
) private returns (Descriptor memory meta);
_kindOfUniqueRevision
Returns the latest revision of the Kind-of-Value object
function _kindOfUniqueRevision() private view returns (uint32);
_setOfUniqueRevision
Returns the latest revision of the Set-of-Value object
function _setOfUniqueRevision() private view returns (uint32);
Structs
UniqueRegistryStorage
Note: storage-location: erc7201:every.storage.UniqueRegistry
struct UniqueRegistryStorage {
Counter48.Counter counter;
Snapshots.Storage uniques;
}
ValueElements
State Variables
CODE
uint256 constant CODE = 0
DATA
uint256 constant DATA = 1
TOKEN_SPEC
uint256 constant TOKEN_SPEC = 2
COUNT
uint256 constant COUNT = 3
Structs
View
struct View {
MatterHash code;
MatterHash data;
Info tokenSpec;
}
ValueRegistry
Inherits: IValueRegistry, ElementRegistryErrors, Initializable, Soke
State Variables
VALUEREGISTRY_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
keccak256(abi.encode(uint256(keccak256("every.storage.ValueRegistry")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant VALUEREGISTRY_STORAGE_LOCATION =
0x7e2fb0066d5c30a775c561af98650c8a5856bdd87a1fa6e7b509179e09d6c200
Functions
_getValueRegistryStorage
function _getValueRegistryStorage() private pure returns (ValueRegistryStorage storage $);
__ValueRegistry_init
function __ValueRegistry_init(uint64 idStart, address owner, bytes32 data, uint8 decimals, string memory symbol)
internal
onlyInitializing;
valueRegister
Registers a new value token
function valueRegister(address code, bytes32 data, TokenStandard std, uint8 decimals, string memory symbol)
external
override
returns (uint64 id, Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
code | address | Token contract address |
data | bytes32 | Hash of the underlying matter or metadata |
std | TokenStandard | Token standard (e.g. ERC20) |
decimals | uint8 | Token's decimal precision |
symbol | string | Display symbol (max 30 characters) |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | New value ID |
meta | Descriptor | desc Descriptor after registration |
valueUpdate
Updates the data hash of an existing value
function valueUpdate(uint64 id, bytes32 data) external override returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Updated descriptor (revision bumped) |
valueUpdate
Updates the data hash of an existing value
function valueUpdate(uint64 id, bytes32 data, string memory symbol)
external
override
returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
data | bytes32 | New data hash |
symbol | string |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Updated descriptor (revision bumped) |
valueUpgrade
Upgrades the kind/set revision of a value
function valueUpgrade(uint64 id, uint32 kindRev0, uint32 setRev0)
external
override
returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
kindRev0 | uint32 | New kind revision (0 = no change) |
setRev0 | uint32 | New set revision (0 = no change) |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Descriptor after upgrade |
valueTouch
Touches a value, bumping its revision without changing its content
function valueTouch(uint64 id) external override returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Descriptor after touch |
valueTransfer
Transfers ownership of a value to a new address
function valueTransfer(uint64 id, address to) external override returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
to | address | Address to transfer ownership to |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Address of the previous owner |
valueRevision
Resolves and validates a revision of a value
function valueRevision(uint64 id, uint32 rev0) external view override returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Validated revision (0 = not found) |
valueDescriptor
Returns the descriptor of a value at a specific revision
function valueDescriptor(uint64 id, uint32 rev0) external view override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the given revision |
valueSnapshot
Returns descriptor and elements of a value at a specific revision
function valueSnapshot(uint64 id, uint32 rev0)
external
view
override
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the given revision |
elems | bytes32[] | Element values at the given revision |
valueOwner
Returns the current owner of a value
function valueOwner(uint64 id) external view override returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Current owner's address |
valueSota
Returns the latest descriptor and current owner of a value
function valueSota(uint64 id) external view override returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner's address |
valueStatus
Checks whether all specified values are active (revision > 0)
function valueStatus(uint64[] memory ids) external view override returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | Array of value IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all values exist and are active |
_register
function _register(
uint64 id,
address code,
bytes32 data,
TokenStandard std,
uint8 decimals,
string memory symbol,
address owner
) private returns (Descriptor memory);
_kindOfValueRevision
Returns the latest revision of the Kind-of-Value object
function _kindOfValueRevision() private view returns (uint32);
_setOfValueRevision
Returns the latest revision of the Set-of-Value object
function _setOfValueRevision() private view returns (uint32);
Structs
ValueRegistryStorage
Note: storage-location: erc7201:every.storage.ValueRegistry
struct ValueRegistryStorage {
Counter48.Counter counter;
Snapshots.Storage values;
}
Contents
KindElements
State Variables
CODE
uint256 constant CODE = 0
DATA
uint256 constant DATA = 1
ELEM_SPEC
uint256 constant ELEM_SPEC = 2
RELS0
uint256 constant RELS0 = 3
RELS1
uint256 constant RELS1 = 4
RELS2
uint256 constant RELS2 = 5
RELS3
uint256 constant RELS3 = 6
COUNT
uint256 constant COUNT = 7
Functions
packRelationSpec
function packRelationSpec(uint64[] memory rels) internal pure returns (bytes32, bytes32, bytes32, bytes32);
unpackRelationSpec
function unpackRelationSpec(bytes32 p0, bytes32 p1, bytes32 p2, bytes32 p3)
internal
pure
returns (uint64[] memory);
packElementSpec
function packElementSpec(uint8[] memory elemSpec) internal pure returns (bytes32);
unpackElementSpec
function unpackElementSpec(bytes32 packed) internal pure returns (uint8[] memory);
Structs
View
struct View {
MatterHash code;
MatterHash data;
Info elemSpec;
Info rels0;
Info rels1;
Info rels2;
Info rels3;
}
KindRegistryErrors
Errors
InvalidIntializeArguments
error InvalidIntializeArguments();
InvalidCode
error InvalidCode();
InvalidData
error InvalidData();
TooManyElementTypes
error TooManyElementTypes();
InvalidElementType
error InvalidElementType();
TooManyRelations
error TooManyRelations();
InvalidRelation
error InvalidRelation();
UnauthorizedAccess
error UnauthorizedAccess(uint64 id, address vistor);
Contents
ObjectMinterErrors
Custom error definitions used throughout the ObjectMinter contract
Errors
MintPolicyInvalidIDRange
ID range is invalid (rangeStart >= rangeEnd)
error MintPolicyInvalidIDRange();
MintPolicyInvalidSaleTime
Sale period is invalid (saleStart >= saleEnd)
error MintPolicyInvalidSaleTime();
MintPolicyInvalidRecipient
Creator address (fundsRecipient) cannot be the zero address
error MintPolicyInvalidRecipient();
MintPolicyInvalidPrice
Price must be zero or valid depending on permission type
error MintPolicyInvalidPrice();
MintPolicyInvalidMintLimit
Mint limit must be non-zero (except for AllowTable)
error MintPolicyInvalidMintLimit();
MintPolicyInvalidPermissionType
Invalid permission type (out of enum range)
error MintPolicyInvalidPermissionType();
MintPolicyInvalidPermissionData
Permission data is incompatible with the permission type
error MintPolicyInvalidPermissionData();
MintPolicyInvalidStatus
Invalid or unexpected status value
error MintPolicyInvalidStatus();
MintPolicyUnavailable
No matching policy found for given object ID and constraints
error MintPolicyUnavailable();
MintPolicyNotFound
Specified policy index does not exist
error MintPolicyNotFound();
MintPolicyIndexOverflow
Policy index exceeds uint32 maximum (overflow)
error MintPolicyIndexOverflow();
MintPolicyInvalidContract
error MintPolicyInvalidContract();
MintInvalidProof
Merkle proof verification failed
error MintInvalidProof();
MintIncorrectPayment
Incorrect ETH amount sent for mint
error MintIncorrectPayment();
MintExceedsMintLimit
Caller has exceeded the allowed number of mints
error MintExceedsMintLimit();
MintCallbackFailed
Callback to IObjectMintable.onObjectMint failed
error MintCallbackFailed();
FeeConfigInvalidRate
Fee basis points exceeds 10,000 (100%)
error FeeConfigInvalidRate();
FeeConfigInvalidRecipient
Protocol fee recipient is the zero address
error FeeConfigInvalidRecipient();
Contents
- AdjacencySpecUtils_
- ObjectAuthorization
- ObjectInteraction
- OmniRegistryErrors
- RelationAdjacencies
- RelationElements
- RelationRegistry
AdjacencySpecUtils_
State Variables
MAX_ADJACENCIES
uint256 private constant MAX_ADJACENCIES = 16
Functions
packQuad
function packQuad(Adjacency[] memory adjs, uint256 offset) internal pure returns (bytes32 out);
pack
function pack(Adjacency[] memory adjs)
internal
pure
returns (bytes32 adjs0, bytes32 adjs1, bytes32 adjs2, bytes32 adjs3);
unpackQuad
function unpackQuad(bytes32 packed) internal pure returns (Adjacency[] memory out);
unpack
function unpack(bytes32 adjs0, bytes32 adjs1, bytes32 adjs2, bytes32 adjs3)
internal
pure
returns (Adjacency[] memory adjs);
ObjectAuthorization
Inherits: IObjectAuthorization, OmniRegistryErrors, Initializable
Manages directional authorization rules for object relations. Grants define who can initiate a relation (from or to) based on various criteria, such as ownership, token holding, delegation, or external contract verification.
State Variables
OBJECTAUTHORIZATION_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
bytes32 private constant OBJECTAUTHORIZATION_STORAGE_LOCATION =
0x66533e6d1966c5548931afa2a923bcafa00e1e6794f41ca0f03bbc3ab865ab00
Functions
_getObjectAuthorizationStorage
function _getObjectAuthorizationStorage() private pure returns (ObjectAuthorizationStorage storage $);
__ObjectAuthorization_init
function __ObjectAuthorization_init() internal onlyInitializing;
grantFrom
Issues a grant to allow initiating relations from a tail object
function grantFrom(uint128 tail, RelationGrant memory grant) external;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint128 | Tail object ID |
grant | RelationGrant | Grant details |
revokeFrom
Revokes a previously issued from grant
function revokeFrom(uint128 tail, uint32 grantId) external;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint128 | Tail object ID |
grantId | uint32 | Grant ID to revoke |
grantTo
Issues a grant to allow accepting relations to a head object
function grantTo(uint128 head, RelationGrant memory grant) external;
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Head object ID |
grant | RelationGrant | Grant details |
revokeTo
Revokes a previously issued to grant
function revokeTo(uint128 head, uint32 grantId) external;
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Head object ID |
grantId | uint32 | Grant ID to revoke |
allowFrom
Checks whether a sender is authorized to initiate a relation from a tail object
function allowFrom(uint32 grantId, address sender, uint128 tail, uint64 rel, uint64 headKind, uint64 headSet)
external
view
returns (bool allow);
Parameters
| Name | Type | Description |
|---|---|---|
grantId | uint32 | Grant ID to check |
sender | address | Address attempting the action |
tail | uint128 | Tail object ID |
rel | uint64 | Relation ID |
headKind | uint64 | Kind ID of the target (head) object |
headSet | uint64 | Set ID of the target (head) object |
Returns
| Name | Type | Description |
|---|---|---|
allow | bool | allowed True if authorized |
allowTo
Checks whether a sender is authorized to accept a relation to a head object
function allowTo(uint32 grantId, address sender, uint128 head, uint64 rel, uint64 tailKind, uint64 tailSet)
external
view
returns (bool);
Parameters
| Name | Type | Description |
|---|---|---|
grantId | uint32 | Grant ID to check |
sender | address | Address attempting the action |
head | uint128 | Head object ID |
rel | uint64 | Relation ID |
tailKind | uint64 | Kind ID of the source (tail) object |
tailSet | uint64 | Set ID of the source (tail) object |
Returns
| Name | Type | Description |
|---|---|---|
<none> | bool | allowed True if authorized |
_objectInfo
function _objectInfo(uint64 set, uint64 id)
internal
view
virtual
returns (Descriptor memory meta, address setContract, address owner);
_objectInfo
function _objectInfo(uint128 sid)
private
view
returns (uint64 id, Descriptor memory meta, address setContract, address owner);
_validateHolder
function _validateHolder(address holder, bytes32 holding) internal view virtual returns (bool);
_validateGrantSpec
function _validateGrantSpec(RelationGrant memory grant) private view;
_validateGrant
function _validateGrant(
RelationGrant memory grant,
address sender,
uint128 sid,
uint64 rel,
uint64 kind,
uint64 set
) private view returns (bool);
_grantKey
function _grantKey(uint8 direction, uint128 sid, uint32 grantId) private pure returns (uint256);
_pointerKey
function _pointerKey(uint8 direction, uint128 sid) private pure returns (uint256);
Structs
GrantPointer
struct GrantPointer {
uint32 lastId;
uint32 minValidId;
}
ObjectAuthorizationStorage
Note: storage-location: erc7201:every.storage.ObjectAuthorization
struct ObjectAuthorizationStorage {
mapping(uint256 => GrantPointer) pointers; // dir_sid_00 => pointer
mapping(uint256 => RelationGrant) grants; // dir_sid_id => grant
}
Enums
Direction
enum Direction {
None,
From,
To
}
GrantStatus
enum GrantStatus {
None,
Granted,
Revoked
}
ObjectInteraction
Inherits: IObjectInteraction, OmniRegistryErrors, Soke
Tracks directed arcs between objects
State Variables
OBJECTDIGRAPH_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
keccak256(abi.encode(uint256(keccak256("every.storage.ObjectDigraph")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant OBJECTDIGRAPH_STORAGE_LOCATION =
0x3df9584b527247f4900a5c6b7a8400cffee00eb89e1f2f5ad0861af4fb4c0500
Functions
_getObjectDigraphStorage
function _getObjectDigraphStorage() private pure returns (ObjectDigraphStorage storage $);
__ObjectInteraction_init
function __ObjectInteraction_init() internal onlyInitializing;
relate
Links a tail object to a head object through a relation
function relate(uint256 tail, uint64 rel, uint256 head) external override;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint256 | Encoded tail node |
rel | uint64 | Relation ID |
head | uint256 | Encoded head node |
unrelate
Unlinks a tail object from a head object
function unrelate(uint256 tail, uint64 rel, uint256 head) external override;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint256 | Encoded tail node |
rel | uint64 | Relation ID |
head | uint256 | Encoded head node |
_kindAdmit
function _kindAdmit(uint64 kind, uint32 rev, uint64 rel) internal view virtual returns (bool admit, uint32 relRev);
_relationAdmit
function _relationAdmit(uint64 rel, uint32 rev, uint64 kind)
internal
view
virtual
returns (bool admit, uint48 effKind, uint16 effDegs, uint48 totalKind, uint16 totalDegs);
_relationRule
function _relationRule(uint64 rel) internal view virtual returns (RelationRule memory rule);
_objectInfo
function _objectInfo(uint64 set, uint64 id)
internal
view
virtual
returns (Descriptor memory meta, address setContract, address owner);
_allowFrom
function _allowFrom(uint32 grant, address sender, uint128 tail, uint64 rel, uint64 headKind, uint64 headSet)
internal
view
virtual
returns (bool allow);
_allowTo
function _allowTo(uint32 grant, address sender, uint128 head, uint64 rel, uint64 tailKind, uint64 tailSet)
internal
view
virtual
returns (bool allow);
_transferTailObjectOnRelate
function _transferTailObjectOnRelate(
RelationRule memory rule,
ObjectInfo memory tail,
ObjectInfo memory head,
address caller
) private returns (HoldingState holdingState, address holdingExtra);
_transferTailObjectOnUnrelate
function _transferTailObjectOnUnrelate(
RichArc memory arc,
RelationRule memory rule,
ObjectInfo memory tail,
ObjectInfo memory head,
address caller
) private;
_executeHeadHookOnRelate
function _executeHeadHookOnRelate(ObjectInfo memory head, uint64 rel, uint64 tailData, ObjectInfo memory tail)
private
returns (Descriptor memory meta);
_executeHeadHookOnUnrelate
function _executeHeadHookOnUnrelate(ObjectInfo memory head, uint64 rel, uint64 tailData, ObjectInfo memory tail)
private
returns (Descriptor memory meta);
_requireKindAdmitRelation
function _requireKindAdmitRelation(uint64 headKind, uint32 kindRev, uint64 rel) private view returns (uint32);
_requireRelationAdmitKind
function _requireRelationAdmitKind(uint64 rel, uint32 relRev, uint64 tailKind)
private
view
returns (DegreeBounds memory bounds, RelationRule memory rule);
_requireNoOutgoingArc
function _requireNoOutgoingArc(uint128 tail) private view;
_requireArcExists
function _requireArcExists(uint128 tail, uint128 head, uint64 rel) private view returns (RichArc memory arc);
_requirePostDegreeInRange
function _requirePostDegreeInRange(uint128 headSid, uint64 rel, int256 delta, DegreeBounds memory bounds)
private
view
returns (uint256 effkindKey, uint256 totalKey);
_requireObjectExists
function _requireObjectExists(uint128 sid) private view returns (ObjectInfo memory);
_requireRelateAllowed
function _requireRelateAllowed(
uint64 rel,
ObjectInfo memory tail,
ObjectInfo memory head,
address caller,
uint32 tailGrant,
uint32 headGrant
) private view;
_requireUnrelateAllowed
function _requireUnrelateAllowed(
RichArc memory arc,
RelationRule memory rule,
ObjectInfo memory tail,
ObjectInfo memory head,
address caller
) private view;
_requireDegreeInRange
function _requireDegreeInRange(uint256 deg, uint48 kind, uint16 degs) private pure;
_calcNewOwner
function _calcNewOwner(address tailOwner, address headOwner, address caller, address extra, HoldingState s)
private
pure
returns (address newOwner);
_makeDegreeKey
function _makeDegreeKey(uint128 sid, uint64 rel, uint48 kind) private pure returns (uint256);
_encodeArc
function _encodeArc(uint64 rel, uint64 data, uint128 sid) private pure returns (uint256 arc);
_decodeVertex
function _decodeVertex(uint256 vtx) private pure returns (uint64 data, uint32 grant, uint128 sid);
Structs
RichArc
struct RichArc {
uint48 time; // timestamp in seconds that the link established
uint48 effKind; // Kind ID (0 = others, 1..2^48-2 = specific kind)
uint48 rel; // the realtion id
uint112 head; // head object sid(set(u48), id(u64)), since set id < ypte(uint48).max
uint8 holdingState; // HoldFor
address holdingExtra; // address if HoldForFixed, 0 ohterwise
uint24 padding;
uint64 relData; // relation data
}
RelationOwnerShiftPlan
struct RelationOwnerShiftPlan {
bool transfer;
HoldingState holdingState;
address from;
address to;
address holdingExtra;
}
ObjectInfo
struct ObjectInfo {
uint64 id;
uint128 sid;
Descriptor meta;
address setContract;
address owner;
}
DegreeBounds
struct DegreeBounds {
uint48 kind;
uint16 kindDegs;
uint48 totalKind;
uint16 totalDegs;
}
ObjectDigraphStorage
Note: storage-location: erc7201:every.storage.ObjectDigraph
struct ObjectDigraphStorage {
/// @dev Tracks outgoing links of each tail object
mapping(uint128 => RichArc) outArcs;
/// @dev Tracks indegrees of each head object per relation and kind((effKind, rel, headSet, headId))
mapping(uint256 => uint256) inDegs;
}
Enums
HoldingState
enum HoldingState {
None,
TailOwner,
HeadOwner,
Caller,
Preset,
Burned,
Resolved,
Pending
}
OmniRegistryErrors
Errors
InvalidCode
error InvalidCode();
InvalidData
error InvalidData();
Unimplemented
error Unimplemented();
RecordNotExist
error RecordNotExist(uint64 id);
AdjacencyUnderflow
error AdjacencyUnderflow();
AdjacencyOverflow
error AdjacencyOverflow();
AdjacencyUnordered
error AdjacencyUnordered();
AdjacencyKindNotExist
error AdjacencyKindNotExist();
HeadKindRejectsRelation
error HeadKindRejectsRelation();
RelationRejectsTailKind
error RelationRejectsTailKind();
HeadSetRejectsTailObject
error HeadSetRejectsTailObject();
DegreeOverflow
error DegreeOverflow(uint48 kind);
DegreeUnderflow
error DegreeUnderflow(uint48 kind);
ArcExists
error ArcExists();
ArcNotExist
error ArcNotExist();
ArcMismatch
error ArcMismatch();
InvalidKind
error InvalidKind();
InvalidRelation
error InvalidRelation();
InvalidRelateShift
error InvalidRelateShift();
InvalidUnrelateShift
error InvalidUnrelateShift();
UnsupportedHoldingState
error UnsupportedHoldingState();
UnrelateLocked
error UnrelateLocked();
GrantNotFound
error GrantNotFound();
GrantRevoked
error GrantRevoked();
GrantFilterRelationInvalid
error GrantFilterRelationInvalid();
GrantFilterKindInvalid
error GrantFilterKindInvalid();
GrantFilterSetInvalid
error GrantFilterSetInvalid();
GrantInitiatorAnyoneExtraNotAllowed
error GrantInitiatorAnyoneExtraNotAllowed();
GrantInitiatorOwnerExtraNotAllowed
error GrantInitiatorOwnerExtraNotAllowed();
GrantInitiatorDelegateAddressInvalid
error GrantInitiatorDelegateAddressInvalid();
GrantInitiatorEligibleAddressInvalid
error GrantInitiatorEligibleAddressInvalid();
GrantInitiatorEligibleNotContract
error GrantInitiatorEligibleNotContract();
GrantInitiatorHolderValueParamsInvalid
error GrantInitiatorHolderValueParamsInvalid();
GrantInitiatorHolderUniqueParamsInvalid
error GrantInitiatorHolderUniqueParamsInvalid();
GrantInitiatorHolderObjectParamsInvalid
error GrantInitiatorHolderObjectParamsInvalid();
GrantInitiatorHolderTokenTypeUnknown
error GrantInitiatorHolderTokenTypeUnknown();
GrantInitiatorTypeUnknown
error GrantInitiatorTypeUnknown();
UnauthorizedAccess
error UnauthorizedAccess(uint64 id, address vistor);
Unauthorized
error Unauthorized();
RelationAdjacencies
Inherits: OmniRegistryErrors, Initializable
Stores and verifies relation adjacency specs
State Variables
RELATIONADJACENCIES_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
keccak256(abi.encode(uint256(keccak256("every.storage.RelationAdjacencies")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant RELATIONADJACENCIES_STORAGE_LOCATION =
0x8f9f6b9dd32d65efadc33d5cec42974db93f3ef45f03c2694c960af8740c1c00
Functions
_getRelationAdjacenciesStorage
function _getRelationAdjacenciesStorage() private pure returns (RelationAdjacenciesStorage storage $);
__RelationAdjacencies_init
function __RelationAdjacencies_init() internal onlyInitializing;
_insert
function _insert(Adjacency[] memory adjs) internal returns (bytes32 specId);
_admit
function _admit(bytes32 specId, uint48 kind)
internal
view
returns (bool admit, uint48 effKind, uint16 effDegs, uint48 totalKind, uint16 totalDegs);
_validate
function _validate(Adjacency[] memory adjs) internal pure returns (SpecIndex memory result);
_hash
function _hash(Adjacency[] memory adjs) private pure returns (bytes32 specId);
_hash
function _hash(bytes32 a0, bytes32 a1, bytes32 a2, bytes32 a3) private pure returns (bytes32 specId);
Structs
KindIndex
struct KindIndex {
uint16 kindDegs;
uint16 totalDegs; // duplicated to faciliate queries
bool status;
bool totalSpecified;
}
SpecIndex
struct SpecIndex {
uint16 othersDegs;
uint16 totalDegs; // duplicated to faciliate queries
bool status;
bool totalSpecified;
bool othersSpecified;
uint8 kindsSpecified;
}
RelationAdjacenciesStorage
Note: storage-location: erc7201:every.storage.RelationAdjacencies
struct RelationAdjacenciesStorage {
mapping(bytes32 => mapping(uint48 => KindIndex)) kindIndices;
mapping(bytes32 => SpecIndex) specIndices;
}
RelationElements
State Variables
CODE
uint256 constant CODE = 0
DATA
uint256 constant DATA = 1
RULE
uint256 constant RULE = 2
ADJS0
uint256 constant ADJS0 = 3
ADJS1
uint256 constant ADJS1 = 4
ADJS2
uint256 constant ADJS2 = 5
ADJS3
uint256 constant ADJS3 = 6
INDICES
uint256 constant INDICES = 7
COUNT
uint256 constant COUNT = 8
Structs
View
struct View {
MatterHash code; // Logic for processing the relation
MatterHash data; // Metadata about the relation
Info rule; // Relation rule
Info adjs0; // Adjacency slot 0
Info adjs1; // Adjacency slot 1
Info adjs2; // Adjacency slot 2
Info adjs3; // Adjacency slot 3
Info indices; // Adjacency indices
}
RelationRegistry
Inherits: IRelationRegistry, OmniRegistryErrors, Soke, RelationAdjacencies
Relation registration and management
State Variables
RELATIONREGISTRY_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
keccak256(abi.encode(uint256(keccak256("every.storage.RelationRegistry")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant RELATIONREGISTRY_STORAGE_LOCATION =
0xb889e63ac5a7d4985910c5a264fb181e381a8a3f46d10618004be5e9438ffc00
Functions
_getRelationRegistryStorage
function _getRelationRegistryStorage() private pure returns (RelationRegistryStorage storage $);
__RelationRegistry_init
function __RelationRegistry_init() internal onlyInitializing;
relationRegister
Registers a new relation
function relationRegister(address code, bytes32 data, RelationRule memory rule, Adjacency[] memory adjs)
external
override
returns (uint64 id, Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
code | address | Optional logic contract address |
data | bytes32 | Hash of the relation’s associated data |
rule | RelationRule | Rule defining the behavior and constraints of the relation |
adjs | Adjacency[] | Array of tail kind admissibility and degree limits |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | New relation ID |
meta | Descriptor | desc Descriptor after registration |
relationUpdate
Updates the data hash of a relation
function relationUpdate(uint64 id, bytes32 data) external override returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Updated descriptor |
relationUpdate
Updates the data hash of a relation
function relationUpdate(uint64 id, bytes32 data, Adjacency[] memory adjs)
external
override
returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
data | bytes32 | New data hash |
adjs | Adjacency[] |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Updated descriptor |
relationUpgrade
Upgrades the kind or set revision of a relation
function relationUpgrade(uint64 id, uint32 kindRev, uint32 setRev)
external
override
returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
kindRev | uint32 | New kind revision (0 = no change) |
setRev | uint32 | New set revision (0 = no change) |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Descriptor after upgrade |
relationTouch
Touches a relation (bumps revision without modifying content)
function relationTouch(uint64 id) external override returns (Descriptor memory meta);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
meta | Descriptor | desc Descriptor after touch |
relationTransfer
Transfers ownership of a relation to a new address
function relationTransfer(uint64 id, address to) external override returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
to | address | New owner address |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Previous owner address |
relationRevision
Resolves and validates a revision number
function relationRevision(uint64 id, uint32 rev0) external view override returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Validated revision (0 if not found) |
relationDescriptor
Returns descriptor of a relation at a specific revision
function relationDescriptor(uint64 id, uint32 rev0) external view override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the specified revision |
relationSnapshot
Returns descriptor and packed elements at a specific revision
function relationSnapshot(uint64 id, uint32 rev0)
external
view
override
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Elements at the revision |
relationOwner
Gets the current owner of a relation
function relationOwner(uint64 id) external view override returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Address of the current owner |
relationSota
Returns the latest descriptor and current owner of a relation
function relationSota(uint64 id) external view override returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner |
relationStatus
Checks whether all specified relations are active (rev > 0)
function relationStatus(uint64[] memory ids) external view override returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | Array of relation IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all are valid and active |
relationRule
Returns the rule definition for a relation
function relationRule(uint64 id) external view override returns (RelationRule memory rule);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
rule | RelationRule | Possession and linkage rule for the relation |
relationAdmit
Checks if a relation admits a specific kind as tail
function relationAdmit(uint64 id, uint32 rev, uint64 kind)
external
view
override
returns (bool admit, uint48 effKind, uint16 effDegs, uint48 totalKind, uint16 totalDegs);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev | uint32 | Revision to check |
kind | uint64 | Tail kind ID to evaluate |
Returns
| Name | Type | Description |
|---|---|---|
admit | bool | Whether the kind is admitted |
effKind | uint48 | Matched kind (0 = wildcard match) |
effDegs | uint16 | Degree bounds for the matched kind |
totalKind | uint48 | Special marker for total-kind (2^48-1 if defined) |
totalDegs | uint16 | Degree bounds for the total-kind |
_relationAdmit
function _relationAdmit(uint64 id, uint32 rev, uint64 kind)
internal
view
virtual
returns (bool admit, uint48 effKind, uint16 effDegs, uint48 totalKind, uint16 totalDegs);
_relationRule
function _relationRule(uint64 id) internal view virtual returns (RelationRule memory rule);
_kindOfRelationRevision
Returns the latest revision of the Kind-of-Value object
function _kindOfRelationRevision() private view returns (uint32);
_setOfRelationRevision
Returns the latest revision of the Set-of-Value object
function _setOfRelationRevision() private view returns (uint32);
Structs
RelationRegistryStorage
Note: storage-location: erc7201:every.storage.RelationRegistry
struct RelationRegistryStorage {
Counter48.Counter counter;
Snapshots.Storage relations;
}
Contents
SetElements
State Variables
CODE
uint256 constant CODE = 0
DATA
uint256 constant DATA = 1
COUNT
uint256 constant COUNT = 2
Structs
View
struct View {
MatterHash code;
MatterHash data;
}
SetRegistryErrors
Errors
InvalidIntializeArguments
error InvalidIntializeArguments();
InvalidCode
error InvalidCode();
InvalidData
error InvalidData();
SetContractNoCode
error SetContractNoCode();
SetContractNotIObjectInteractionHook
error SetContractNotIObjectInteractionHook();
SetContractNotISet
error SetContractNotISet();
SetContractAlreadyRegistered
error SetContractAlreadyRegistered();
SetContractNotRegistered
error SetContractNotRegistered();
OnSetRegisterRejected
error OnSetRegisterRejected();
OnSetRegisterReverted
error OnSetRegisterReverted();
OnSetUpdateRejected
error OnSetUpdateRejected();
OnSetUpdateReverted
error OnSetUpdateReverted();
OnSetUpgradeRejected
error OnSetUpgradeRejected();
OnSetUpgradeReverted
error OnSetUpgradeReverted();
OnSetTouchRejected
error OnSetTouchRejected();
OnSetTouchReverted
error OnSetTouchReverted();
NoRevisionSpecified
error NoRevisionSpecified();
UnauthorizedAccess
error UnauthorizedAccess(uint64 id, address vistor);
Soke
Inherits: Initializable
State Variables
SOKE_STORAGE_LOCATION
bytes32 private constant SOKE_STORAGE_LOCATION = 0x389a4784c2c3e8284bc1418c5b9cf4b556f52088a652459a6e23aae4f7902700
Functions
_getSokeStorage
function _getSokeStorage() private pure returns (SokeStorage storage $);
__Soke_init
function __Soke_init(address setr, address omnir, address kindr, address elemr) internal onlyInitializing;
setRegistry
function setRegistry() public view returns (address);
omniRegistry
function omniRegistry() public view returns (address);
kindRegistry
function kindRegistry() public view returns (address);
elementRegistry
function elementRegistry() public view returns (address);
Structs
SokeStorage
Note: storage-location: erc7201:every.storage.Soke
struct SokeStorage {
address setRegistry;
address omniRegistry;
address kindRegistry;
address elementRegistry;
}
Contents
Contents
- IElementRegistry
- IKindRegistry
- IObjectAuthorization
- IObjectInteraction
- IObjectMinter
- IOmniRegistry
- IRelationRegistry
- ISetRegistry
- IUniqueRegistry
- IValueRegistry
IElementRegistry
Inherits: IValueRegistry, IUniqueRegistry
Element registration and management
IKindRegistry
Interface for managing and registering object kinds
Functions
kindRegister
Registers a new kind
function kindRegister(bytes32 code, bytes32 data, uint8[] memory elemSpec, uint64[] memory rels)
external
returns (uint64 id, Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
code | bytes32 | Code hash of the kind |
data | bytes32 | Data hash of the kind |
elemSpec | uint8[] | Element type layout for objects of this kind |
rels | uint64[] | Supported relation IDs |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | New kind ID |
desc | Descriptor | Descriptor after registration |
kindUpdate
Updates code and/or data of an existing kind
function kindUpdate(uint64 id, bytes32 code, bytes32 data) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
code | bytes32 | New code hash (0 = skip) |
data | bytes32 | New data hash (0 = skip) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
kindUpdate
Updates supported relations of an existing kind
function kindUpdate(uint64 id, uint64[] memory rels) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rels | uint64[] | Updated relation list |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
kindUpdate
Updates code, data, and relations of an existing kind
function kindUpdate(uint64 id, bytes32 code, bytes32 data, uint64[] memory rels)
external
returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
code | bytes32 | New code hash (0 = skip) |
data | bytes32 | New data hash (0 = skip) |
rels | uint64[] | Updated relation list |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
kindUpgrade
Upgrades kind/set revision of an existing kind
function kindUpgrade(uint64 id, uint32 kindRev, uint32 setRev) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
kindRev | uint32 | New kind revision (0 = skip) |
setRev | uint32 | New set revision (0 = skip) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after upgrade |
kindTouch
Touches a kind (bumps revision with no content changes)
function kindTouch(uint64 id) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after touch |
kindTransfer
Transfers ownership of a kind
function kindTransfer(uint64 id, address to) external returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
to | address | New owner address |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Previous owner address |
kindRevision
Resolves and validates a specific revision
function kindRevision(uint64 id, uint32 rev0) external view returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rev0 | uint32 | Revision to check (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Valid revision number (0 if not found) |
kindDescriptor
Returns the descriptor at a given revision
function kindDescriptor(uint64 id, uint32 rev0) external view returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at that revision |
kindSnapshot
Returns descriptor and elements at a specific revision
function kindSnapshot(uint64 id, uint32 rev0) external view returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Element hashes of the kind at the revision |
kindOwner
Returns the current owner of a kind
function kindOwner(uint64 id) external view returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Owner address |
kindSota
Returns the latest descriptor and current owner of a kind
function kindSota(uint64 id) external view returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner address |
kindStatus
Checks whether all specified kinds are active (rev > 0)
function kindStatus(uint64[] memory ids) external view returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | List of kind IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all specified kinds exist and are active |
kindAdmit
Checks whether a kind at a given revision admits a specific relation
function kindAdmit(uint64 kind, uint32 rev, uint64 rel) external view returns (bool admit, uint32 relRev);
Parameters
| Name | Type | Description |
|---|---|---|
kind | uint64 | Kind ID |
rev | uint32 | Kind revision (0 = latest) |
rel | uint64 | Relation ID to check |
Returns
| Name | Type | Description |
|---|---|---|
admit | bool | Whether the relation is admitted |
relRev | uint32 | Specific relation revision admitted (0 = latest) |
Events
KindRegistered
Emitted when a new kind is registered
event KindRegistered(
uint64 id, Descriptor desc, bytes32 code, bytes32 data, uint8[] elemSpec, uint64[] rels, address owner
);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
desc | Descriptor | Descriptor after registration |
code | bytes32 | Code hash associated with the kind |
data | bytes32 | Data hash associated with the kind |
elemSpec | uint8[] | Element type layout for objects of this kind |
rels | uint64[] | Supported relation IDs |
owner | address | Owner address of the kind |
KindUpdated
Emitted when a kind is updated
event KindUpdated(uint64 id, Descriptor desc, bytes32 code, bytes32 data, uint64[] rels);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
desc | Descriptor | Updated descriptor |
code | bytes32 | Updated code hash |
data | bytes32 | Updated data hash |
rels | uint64[] | Updated supported relations |
KindUpgraded
Emitted when a kind is upgraded
event KindUpgraded(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
desc | Descriptor | Descriptor after upgrade |
KindTouched
Emitted when a kind is touched (revision bump only)
event KindTouched(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
desc | Descriptor | Descriptor after touch |
KindTransferred
Emitted when kind ownership is transferred
event KindTransferred(uint64 id, Descriptor desc, address from, address to);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
desc | Descriptor | Descriptor after the transfer |
from | address | Previous owner |
to | address | New owner |
IObjectAuthorization
Handles fine-grained authorization for object relations.
Grants control who can initiate (from) or accept (to) object-to-object relations,
scoped by direction, relation ID, kind, and set.
Functions
grantFrom
Issues a grant to allow initiating relations from a tail object
function grantFrom(uint128 tail, RelationGrant memory grant) external;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint128 | Tail object ID |
grant | RelationGrant | Grant details |
revokeFrom
Revokes a previously issued from grant
function revokeFrom(uint128 tail, uint32 grantId) external;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint128 | Tail object ID |
grantId | uint32 | Grant ID to revoke |
grantTo
Issues a grant to allow accepting relations to a head object
function grantTo(uint128 head, RelationGrant memory grant) external;
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Head object ID |
grant | RelationGrant | Grant details |
revokeTo
Revokes a previously issued to grant
function revokeTo(uint128 head, uint32 grantId) external;
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Head object ID |
grantId | uint32 | Grant ID to revoke |
allowFrom
Checks whether a sender is authorized to initiate a relation from a tail object
function allowFrom(uint32 grantId, address sender, uint128 tail, uint64 rel, uint64 headKind, uint64 headSet)
external
view
returns (bool allowed);
Parameters
| Name | Type | Description |
|---|---|---|
grantId | uint32 | Grant ID to check |
sender | address | Address attempting the action |
tail | uint128 | Tail object ID |
rel | uint64 | Relation ID |
headKind | uint64 | Kind ID of the target (head) object |
headSet | uint64 | Set ID of the target (head) object |
Returns
| Name | Type | Description |
|---|---|---|
allowed | bool | True if authorized |
allowTo
Checks whether a sender is authorized to accept a relation to a head object
function allowTo(uint32 grantId, address sender, uint128 head, uint64 rel, uint64 tailKind, uint64 tailSet)
external
view
returns (bool allowed);
Parameters
| Name | Type | Description |
|---|---|---|
grantId | uint32 | Grant ID to check |
sender | address | Address attempting the action |
head | uint128 | Head object ID |
rel | uint64 | Relation ID |
tailKind | uint64 | Kind ID of the source (tail) object |
tailSet | uint64 | Set ID of the source (tail) object |
Returns
| Name | Type | Description |
|---|---|---|
allowed | bool | True if authorized |
Events
GrantFrom
Emitted when a grant is issued to authorize initiating a relation from a tail object
event GrantFrom(uint128 tail, RelationGrant grant);
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint128 | Tail object ID (initiator) |
grant | RelationGrant | Grant definition |
RevokeFrom
Emitted when a grant from a tail object is revoked
event RevokeFrom(uint128 tail, uint32 grantId);
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint128 | Tail object ID (initiator) |
grantId | uint32 | ID of the revoked grant |
GrantTo
Emitted when a grant is issued to authorize accepting a relation to a head object
event GrantTo(uint128 head, RelationGrant grant);
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Head object ID (receiver) |
grant | RelationGrant | Grant definition |
RevokeTo
Emitted when a grant to a head object is revoked
event RevokeTo(uint128 head, uint32 grantId);
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Head object ID (receiver) |
grantId | uint32 | ID of the revoked grant |
IObjectInteraction
Handles object interactions via directed relations (arcs).
Encodings:
- SID : {uint64 set | uint64 id} → uint128
- Node : {uint64 data | uint32 _ | uint32 grant | uint64 set | uint64 id} → uint256
- Arc : {uint64 data | uint64 rel | uint64 set | uint64 id} → uint256
Functions
relate
Links a tail object to a head object through a relation
function relate(uint256 tail, uint64 rel, uint256 head) external;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint256 | Encoded tail node |
rel | uint64 | Relation ID |
head | uint256 | Encoded head node |
unrelate
Unlinks a tail object from a head object
function unrelate(uint256 tail, uint64 rel, uint256 head) external;
Parameters
| Name | Type | Description |
|---|---|---|
tail | uint256 | Encoded tail node |
rel | uint64 | Relation ID |
head | uint256 | Encoded head node |
Events
Related
Emitted when a tail is linked to a head through a relation
event Related(uint128 head, Descriptor desc, uint256 arc);
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Encoded SID of the head object |
desc | Descriptor | Descriptor of the head after the relation |
arc | uint256 | Encoded incoming arc |
Related
Emitted when multiple tails are linked to a head
event Related(uint128 head, Descriptor desc, uint256[] arcs);
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Encoded SID of the head object |
desc | Descriptor | Descriptor of the head after the relations |
arcs | uint256[] | Array of encoded incoming arcs |
Unrelated
Emitted when a tail is unlinked from a head
event Unrelated(uint128 head, Descriptor desc, uint256 arc);
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Encoded SID of the head object |
desc | Descriptor | Descriptor of the head after unlinking |
arc | uint256 | Encoded incoming arc |
Unrelated
Emitted when multiple tails are unlinked from a head
event Unrelated(uint128 head, Descriptor desc, uint256[] arcs);
Parameters
| Name | Type | Description |
|---|---|---|
head | uint128 | Encoded SID of the head object |
desc | Descriptor | Descriptor of the head after unlinking |
arcs | uint256[] | Array of encoded incoming arcs |
IObjectMinter
Interface for minting objects with configurable policies
Functions
mint
Mint an object (public permission)
function mint(address to, address set, uint64 id) external payable;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
mint
Mint an object with additional data
function mint(address to, address set, uint64 id, bytes memory data) external payable;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
data | bytes | Additional mint data |
mint
Mint an object with allowlist proof
function mint(address to, address set, uint64 id, bytes memory auth, uint32 policy) external payable;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
auth | bytes | ABI-encoded authorization data (see IMintAuthArgument) |
policy | uint32 | The policy index being used |
mint
Mint an object with allowlist proof and additional data
function mint(address to, address set, uint64 id, bytes memory data, bytes memory auth, uint32 policy)
external
payable;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
data | bytes | Additional mint data |
auth | bytes | ABI-encoded authorization data (see IMintAuthArgument) |
policy | uint32 | The policy index being used |
mintPolicyAdd
Add a new mint policy (callable only by set contracts)
function mintPolicyAdd(MintPolicy memory policy) external returns (uint32 index);
Parameters
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The policy details to add |
Returns
| Name | Type | Description |
|---|---|---|
index | uint32 | The assigned policy index |
mintPolicyDisable
Disable a mint policy (callable only by set contracts)
function mintPolicyDisable(uint32 index) external;
Parameters
| Name | Type | Description |
|---|---|---|
index | uint32 | The policy index to disable |
mintPolicyEnable
Enable a mint policy (callable only by set contracts)
function mintPolicyEnable(uint32 index) external;
Parameters
| Name | Type | Description |
|---|---|---|
index | uint32 | The policy index to enable |
mintPolicyCount
Get number of mint policies for a set
function mintPolicyCount(address set) external view returns (uint256 count);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address to query |
Returns
| Name | Type | Description |
|---|---|---|
count | uint256 | Number of policies |
mintPolicyGet
Get mint policy by index
function mintPolicyGet(address set, uint32 index) external view returns (MintPolicy memory policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address |
index | uint32 | Policy index |
Returns
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The mint policy details |
mintPolicySearch
Search for applicable mint policy with permission mask
function mintPolicySearch(address set, uint64 id, uint8 mask) external view returns (MintPolicy memory policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address |
id | uint64 | The object ID to check |
mask | uint8 | Bitmask indicating which MintPermissionType values are included. Each bit corresponds to a permission type (e.g., bit 0 = Public, bit 1 = Allowlist, etc.). |
Returns
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The first matching mint policy |
mintPolicySearch
Search for applicable mint policy with offset and permission mask
function mintPolicySearch(address set, uint64 id, uint8 mask, uint32 offset)
external
view
returns (MintPolicy memory policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address |
id | uint64 | The object ID to check |
mask | uint8 | Bitmask indicating which MintPermissionType values are included. Each bit corresponds to a permission type (e.g., bit 0 = Public, bit 1 = Allowlist, etc.). |
offset | uint32 | Starting policy index to search from |
Returns
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The first matching mint policy |
Events
MintPolicyEnabled
Emitted when a mint policy is enabled
event MintPolicyEnabled(address set, MintPolicy policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address the policy applies to |
policy | MintPolicy | The enabled policy details |
MintPolicyDisabled
Emitted when a mint policy is disabled
event MintPolicyDisabled(address set, MintPolicy policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address the policy applies to |
policy | MintPolicy | The disabled policy details |
ObjectMinted
Emitted when an object is successfully minted
event ObjectMinted(
address set,
uint64 id,
address operator,
address to,
address currency,
uint96 payment,
address fundsRecipient,
uint96 funds,
address feeRecipient,
uint96 fee
);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The address of the set contract the object is minted from |
id | uint64 | The ID of the minted object within the set |
operator | address | The address that initiated the mint (usually msg.sender) |
to | address | The recipient address receiving the minted object |
currency | address | The address of the payment token (native or ERC20) |
payment | uint96 | The total payment (includes both fee and funds) |
fundsRecipient | address | The address receiving the creator or project revenue |
funds | uint96 | The amount sent to the fundsRecipient |
feeRecipient | address | The address receiving the protocol fee |
fee | uint96 | The amount sent to the feeRecipient |
IOmniRegistry
Inherits: IRelationRegistry, IObjectAuthorization, IObjectInteraction
Interface for object interactions
IRelationRegistry
Interface for registering and managing relations
Functions
relationRegister
Registers a new relation
function relationRegister(address code, bytes32 data, RelationRule memory rule, Adjacency[] memory adjs)
external
returns (uint64 id, Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
code | address | Optional logic contract address |
data | bytes32 | Hash of the relation’s associated data |
rule | RelationRule | Rule defining the behavior and constraints of the relation |
adjs | Adjacency[] | Array of tail kind admissibility and degree limits |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | New relation ID |
desc | Descriptor | Descriptor after registration |
relationUpdate
Updates the data hash of a relation
function relationUpdate(uint64 id, bytes32 data) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
relationUpdate
Updates the data hash and adjacency configuration of a relation
function relationUpdate(uint64 id, bytes32 data, Adjacency[] memory adjs) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
data | bytes32 | New data hash |
adjs | Adjacency[] | New array of adjacency rules |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
relationUpgrade
Upgrades the kind or set revision of a relation
function relationUpgrade(uint64 id, uint32 kindRev, uint32 setRev) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
kindRev | uint32 | New kind revision (0 = no change) |
setRev | uint32 | New set revision (0 = no change) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after upgrade |
relationTouch
Touches a relation (bumps revision without modifying content)
function relationTouch(uint64 id) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after touch |
relationTransfer
Transfers ownership of a relation to a new address
function relationTransfer(uint64 id, address to) external returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
to | address | New owner address |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Previous owner address |
relationRevision
Resolves and validates a revision number
function relationRevision(uint64 id, uint32 rev0) external view returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Validated revision (0 if not found) |
relationDescriptor
Returns descriptor of a relation at a specific revision
function relationDescriptor(uint64 id, uint32 rev0) external view returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the specified revision |
relationSnapshot
Returns descriptor and packed elements at a specific revision
function relationSnapshot(uint64 id, uint32 rev0)
external
view
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Elements at the revision |
relationOwner
Gets the current owner of a relation
function relationOwner(uint64 id) external view returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Address of the current owner |
relationSota
Returns the latest descriptor and current owner of a relation
function relationSota(uint64 id) external view returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner |
relationStatus
Checks whether all specified relations are active (rev > 0)
function relationStatus(uint64[] memory ids) external view returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | Array of relation IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all are valid and active |
relationRule
Returns the rule definition for a relation
function relationRule(uint64 id) external view returns (RelationRule memory rule);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
Returns
| Name | Type | Description |
|---|---|---|
rule | RelationRule | Possession and linkage rule for the relation |
relationAdmit
Checks if a relation admits a specific kind as tail
function relationAdmit(uint64 id, uint32 rev, uint64 kind)
external
view
returns (bool admit, uint48 effKind, uint16 effDegs, uint48 totalKind, uint16 totalDegs);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Relation ID |
rev | uint32 | Revision to check |
kind | uint64 | Tail kind ID to evaluate |
Returns
| Name | Type | Description |
|---|---|---|
admit | bool | Whether the kind is admitted |
effKind | uint48 | Matched kind (0 = wildcard match) |
effDegs | uint16 | Degree bounds for the matched kind |
totalKind | uint48 | Special marker for total-kind (2^48-1 if defined) |
totalDegs | uint16 | Degree bounds for the total-kind |
Events
RelationRegistered
Emitted when a new relation is registered
event RelationRegistered(
uint64 id, Descriptor desc, address code, bytes32 data, RelationRule rule, Adjacency[] adjs, address owner
);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the relation |
desc | Descriptor | Descriptor of the relation |
code | address | Optional logic contract address |
data | bytes32 | Hash of the associated metadata or logic |
rule | RelationRule | Relation rule defining interaction logic |
adjs | Adjacency[] | List of admitted tail kinds and degree constraints |
owner | address | Address of the relation's owner |
RelationUpdated
Emitted when a relation is updated
event RelationUpdated(uint64 id, Descriptor desc, bytes32 data);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the relation |
desc | Descriptor | Updated descriptor |
data | bytes32 | New data hash |
RelationUpdated
Emitted when a relation is updated
event RelationUpdated(uint64 id, Descriptor desc, bytes32 data, Adjacency[] adjs);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the relation |
desc | Descriptor | Updated descriptor |
data | bytes32 | New data hash |
adjs | Adjacency[] | List of admitted tail kinds and degree constraints |
RelationUpgraded
Emitted when a relation is upgraded (kind/set revision bumped)
event RelationUpgraded(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the relation |
desc | Descriptor | Descriptor after upgrade |
RelationTouched
Emitted when a relation is touched (revision incremented without content change)
event RelationTouched(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the relation |
desc | Descriptor | Descriptor after touch |
RelationTransferred
Emitted when ownership of a relation is transferred
event RelationTransferred(uint64 id, Descriptor desc, address from, address to);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the relation |
desc | Descriptor | Descriptor after the transfer |
from | address | Previous owner |
to | address | New owner |
ISetRegistry
Interface for registering and managing sets
Functions
setRegister
Registers a new set
function setRegister(bytes32 data) external returns (uint64 id, Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
data | bytes32 | Hash of external content (e.g. metadata or schema) |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the new set |
desc | Descriptor | Descriptor after registration |
setUpdate
Updates the data hash of an existing set
function setUpdate(uint64 id, bytes32 data) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
setUpgrade
Upgrades the kind or set revision
function setUpgrade(uint64 id, uint32 kindRev, uint32 setRev) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
kindRev | uint32 | New kind revision (0 to skip) |
setRev | uint32 | New set revision (0 to skip) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after upgrade |
setTouch
Touches a set (increments revision without any changes)
function setTouch(uint64 id) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after touch |
setURI
Returns the URI template for objects in the given set
The returned template includes {id} and {rev} placeholders,
which clients should replace with the object ID and revision number
to construct the full object URI off-chain.
function setURI(uint64 id) external view returns (string memory uri);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
uri | string | Template URI string for objects in the specified set |
setURI
Returns the fully resolved URI for a specific object in a set
Substitutes {id} and {rev} in the set’s URI template using the
provided object ID and revision.
function setURI(uint64 id, uint64 objId, uint32 objRev) external view returns (string memory uri);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
objId | uint64 | Object ID (within the set) |
objRev | uint32 | Object revision number |
Returns
| Name | Type | Description |
|---|---|---|
uri | string | Fully resolved URI string for the specified object revision |
setRevision
Resolves and validates a specific revision
function setRevision(uint64 id, uint32 rev0) external view returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Validated revision (0 if not found) |
setDescriptor
Returns the descriptor at a given revision
function setDescriptor(uint64 id, uint32 rev0) external view returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor of the set at the specified revision |
setSnapshot
Returns descriptor and elements of a set at a specific revision
function setSnapshot(uint64 id, uint32 rev0) external view returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Packed element list |
setOwner
Returns the current owner of a set
function setOwner(uint64 id) external view returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Owner address |
setSota
Returns the latest descriptor and current owner
function setSota(uint64 id) external view returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner |
setStatus
Checks whether all provided set IDs are active
function setStatus(uint64[] memory ids) external view returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | List of set IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all sets have a revision > 0 |
setContract
Returns the contract address associated with a set
function setContract(uint64 id) external view returns (address code);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
code | address | Address of the deployed contract |
Events
SetRegistered
Emitted when a new set is registered
event SetRegistered(uint64 id, Descriptor desc, address code, bytes32 data, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the new set |
desc | Descriptor | Set descriptor after registration |
code | address | Address of the associated set contract |
data | bytes32 | Hash of the associated matter (external content) |
owner | address | Owner address of the set |
SetUpdated
Emitted when a set is updated
event SetUpdated(uint64 id, Descriptor desc, bytes32 data);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
desc | Descriptor | Updated descriptor |
data | bytes32 | New data hash |
SetUpgraded
Emitted when a set is upgraded
event SetUpgraded(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
desc | Descriptor | Descriptor after upgrade |
SetTouched
Emitted when a set is touched (revision bumped without content change)
event SetTouched(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
desc | Descriptor | Descriptor after touch |
IUniqueRegistry
Interface for registering and managing uniques
Functions
uniqueRegister
Registers a new unique token
function uniqueRegister(address code, bytes32 data, TokenStandard std, uint8 decimals, string memory symbol)
external
returns (uint64 id, Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
code | address | Address of the token contract |
data | bytes32 | Hash of the associated matter |
std | TokenStandard | Token standard (e.g. ERC721) |
decimals | uint8 | Number of decimals |
symbol | string | Display symbol (max 30 characters) |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the new unique |
desc | Descriptor | Descriptor after registration |
uniqueUpdate
Updates the data hash of a unique
function uniqueUpdate(uint64 id, bytes32 data) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
uniqueUpdate
Updates the data hash and symbol of a unique
function uniqueUpdate(uint64 id, bytes32 data, string memory symbol) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
data | bytes32 | New data hash |
symbol | string | New display symbol (max 30 characters) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
uniqueUpgrade
Upgrades the kind and/or set revision of a unique
function uniqueUpgrade(uint64 id, uint32 kindRev, uint32 setRev) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
kindRev | uint32 | New kind revision (0 = no change) |
setRev | uint32 | New set revision (0 = no change) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after upgrade |
uniqueTouch
Bumps the revision of a unique with no content change
function uniqueTouch(uint64 id) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after touch |
uniqueTransfer
Transfers ownership of a unique token
function uniqueTransfer(uint64 id, address to) external returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
to | address | Address of the new owner |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Address of the previous owner |
uniqueRevision
Resolves and validates a revision
function uniqueRevision(uint64 id, uint32 rev0) external view returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Resolved revision (0 = not found) |
uniqueDescriptor
Returns the descriptor at a given revision
function uniqueDescriptor(uint64 id, uint32 rev0) external view returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the specified revision |
uniqueSnapshot
Returns descriptor and elements at a specific revision
function uniqueSnapshot(uint64 id, uint32 rev0)
external
view
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Elements at the revision |
uniqueOwner
Returns the current owner of a unique
function uniqueOwner(uint64 id) external view returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Address of the current owner |
uniqueSota
Returns the latest descriptor and current owner
function uniqueSota(uint64 id) external view returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Address of the current owner |
uniqueStatus
Checks whether all given uniques are active (revision > 0)
function uniqueStatus(uint64[] memory ids) external view returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | List of unique IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all exist and are active |
Events
UniqueRegistered
Emitted when a new unique is registered
event UniqueRegistered(uint64 id, Descriptor desc, address code, bytes32 data, TokenSpec spec, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
desc | Descriptor | Descriptor of the unique |
code | address | Token contract address |
data | bytes32 | Hash of the underlying asset (e.g., image, model, metadata) |
spec | TokenSpec | Token specification (standard, decimals, and symbol) |
owner | address | Address of the initial owner |
UniqueUpdated
Emitted when a unique is updated
event UniqueUpdated(uint64 id, Descriptor desc, bytes32 data, TokenSpec spec);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
desc | Descriptor | Updated descriptor (same ID, new revision) |
data | bytes32 | New data hash representing the updated asset |
spec | TokenSpec | Updated or unchanged token specification |
UniqueUpgraded
Emitted when a unique is upgraded to a new revision
event UniqueUpgraded(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
desc | Descriptor | Descriptor after the upgrade (revised kind/set refs) |
UniqueTouched
Emitted when a unique is touched (revision bumped with no content change)
event UniqueTouched(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
desc | Descriptor | Descriptor after touch (updated revision only) |
UniqueTransferred
Emitted when ownership of a unique is transferred
event UniqueTransferred(uint64 id, Descriptor desc, address from, address to);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Unique ID |
desc | Descriptor | Descriptor after the transfer |
from | address | Previous owner's address |
to | address | New owner's address |
IValueRegistry
Interface for registering and managing values
Functions
valueRegister
Registers a new value token
function valueRegister(address code, bytes32 data, TokenStandard std, uint8 decimals, string memory symbol)
external
returns (uint64 id, Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
code | address | Token contract address |
data | bytes32 | Hash of the underlying matter or metadata |
std | TokenStandard | Token standard (e.g. ERC20) |
decimals | uint8 | Token's decimal precision |
symbol | string | Display symbol (max 30 characters) |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | New value ID |
desc | Descriptor | Descriptor after registration |
valueUpdate
Updates the data hash of an existing value
function valueUpdate(uint64 id, bytes32 data) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor (revision bumped) |
valueUpdate
Updates the data hash and symbol of an existing value
function valueUpdate(uint64 id, bytes32 data, string memory symbol) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
data | bytes32 | New data hash |
symbol | string | New display symbol |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
valueUpgrade
Upgrades the kind/set revision of a value
function valueUpgrade(uint64 id, uint32 kindRev0, uint32 setRev0) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
kindRev0 | uint32 | New kind revision (0 = no change) |
setRev0 | uint32 | New set revision (0 = no change) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after upgrade |
valueTouch
Touches a value, bumping its revision without changing its content
function valueTouch(uint64 id) external returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after touch |
valueTransfer
Transfers ownership of a value to a new address
function valueTransfer(uint64 id, address to) external returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
to | address | Address to transfer ownership to |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Address of the previous owner |
valueRevision
Resolves and validates a revision of a value
function valueRevision(uint64 id, uint32 rev0) external view returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Validated revision (0 = not found) |
valueDescriptor
Returns the descriptor of a value at a specific revision
function valueDescriptor(uint64 id, uint32 rev0) external view returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the given revision |
valueSnapshot
Returns descriptor and elements of a value at a specific revision
function valueSnapshot(uint64 id, uint32 rev0)
external
view
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the given revision |
elems | bytes32[] | Element values at the given revision |
valueOwner
Returns the current owner of a value
function valueOwner(uint64 id) external view returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Current owner's address |
valueSota
Returns the latest descriptor and current owner of a value
function valueSota(uint64 id) external view returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Value ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner's address |
valueStatus
Checks whether all specified values are active (revision > 0)
function valueStatus(uint64[] memory ids) external view returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | Array of value IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all values exist and are active |
Events
ValueRegistered
Emitted when a new value is registered
event ValueRegistered(uint64 id, Descriptor desc, address code, bytes32 data, TokenSpec spec, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the newly registered value |
desc | Descriptor | Descriptor of the value |
code | address | Token contract address |
data | bytes32 | Hash of the underlying asset or metadata |
spec | TokenSpec | Token specification (standard, decimals, symbol) |
owner | address | Address of the initial owner |
ValueUpdated
Emitted when a value is updated
event ValueUpdated(uint64 id, Descriptor desc, bytes32 data, TokenSpec spec);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the value |
desc | Descriptor | Updated descriptor (with bumped revision) |
data | bytes32 | New hash of the asset or metadata |
spec | TokenSpec | Updated or unchanged token specification |
ValueUpgraded
Emitted when a value is upgraded (revision of kind/set updated)
event ValueUpgraded(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the value |
desc | Descriptor | Descriptor after upgrade |
ValueTouched
Emitted when a value is touched (revision bump only, no content change)
event ValueTouched(uint64 id, Descriptor desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the value |
desc | Descriptor | Descriptor after touch |
ValueTransferred
Emitted when ownership of a value is transferred
event ValueTransferred(uint64 id, Descriptor desc, address from, address to);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the value |
desc | Descriptor | Descriptor after the transfer |
from | address | Previous owner address |
to | address | New owner address |
Contents
IERC1155
Inherits: IERC165
Required interface of an ERC-1155 compliant contract, as defined in the https://eips.ethereum.org/EIPS/eip-1155[ERC].
Functions
balanceOf
Returns the value of tokens of token type id owned by account.
function balanceOf(address account, uint256 id) external view returns (uint256);
balanceOfBatch
xref:ROOT:erc1155.adoc#batch-operations[Batched] version of balanceOf. Requirements:
accountsandidsmust have the same length.
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
external
view
returns (uint256[] memory);
setApprovalForAll
Grants or revokes permission to operator to transfer the caller's tokens, according to approved,
Emits an ApprovalForAll event.
Requirements:
operatorcannot be the zero address.
function setApprovalForAll(address operator, bool approved) external;
isApprovedForAll
Returns true if operator is approved to transfer account's tokens.
See setApprovalForAll.
function isApprovedForAll(address account, address operator) external view returns (bool);
safeTransferFrom
Transfers a value amount of tokens of type id from from to to.
WARNING: This function can potentially allow a reentrancy attack when transferring tokens
to an untrusted contract, when invoking IERC1155Receiver-onERC1155Received on the receiver.
Ensure to follow the checks-effects-interactions pattern and consider employing
reentrancy guards when interacting with untrusted contracts.
Emits a TransferSingle event.
Requirements:
tocannot be the zero address.- If the caller is not
from, it must have been approved to spendfrom's tokens via setApprovalForAll. frommust have a balance of tokens of typeidof at leastvalueamount.- If
torefers to a smart contract, it must implement IERC1155Receiver-onERC1155Received and return the acceptance magic value.
function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;
safeBatchTransferFrom
xref:ROOT:erc1155.adoc#batch-operations[Batched] version of safeTransferFrom. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking IERC1155Receiver-onERC1155BatchReceived on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a TransferSingle or a TransferBatch event, depending on the length of the array arguments. Requirements:
idsandvaluesmust have the same length.- If
torefers to a smart contract, it must implement IERC1155Receiver-onERC1155BatchReceived and return the acceptance magic value.
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external;
Events
TransferSingle
Emitted when value amount of tokens of type id are transferred from from to to by operator.
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
TransferBatch
Equivalent to multiple TransferSingle events, where operator, from and to are the same for all
transfers.
event TransferBatch(
address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values
);
ApprovalForAll
Emitted when account grants or revokes permission to operator to transfer their tokens, according to
approved.
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
URI
Emitted when the URI for token type id changes to value, if it is a non-programmatic URI.
If an URI event was emitted for id, the standard
https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that value will equal the value
returned by IERC1155MetadataURI-uri.
event URI(string value, uint256 indexed id);
IERC1155MetadataURI
Inherits: IERC1155
Interface of the optional ERC1155MetadataExtension interface, as defined in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[ERC].
Functions
uri
Returns the URI for token type id.
If the \{id\} substring is present in the URI, it must be replaced by
clients with the actual token type ID.
function uri(uint256 id) external view returns (string memory);
IERC165
Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.
Functions
supportsInterface
Returns true if this contract implements the interface defined by
interfaceId. See the corresponding
https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
to learn more about how these ids are created.
This function call must use less than 30 000 gas.
function supportsInterface(bytes4 interfaceId) external view returns (bool);
IERC20
Interface of the ERC-20 standard as defined in the ERC.
Functions
totalSupply
Returns the value of tokens in existence.
function totalSupply() external view returns (uint256);
balanceOf
Returns the value of tokens owned by account.
function balanceOf(address account) external view returns (uint256);
transfer
Moves a value amount of tokens from the caller's account to to.
Returns a boolean value indicating whether the operation succeeded.
Emits a Transfer event.
function transfer(address to, uint256 value) external returns (bool);
allowance
Returns the remaining number of tokens that spender will be
allowed to spend on behalf of owner through transferFrom. This is
zero by default.
This value changes when approve or transferFrom are called.
function allowance(address owner, address spender) external view returns (uint256);
approve
Sets a value amount of tokens as the allowance of spender over the
caller's tokens.
Returns a boolean value indicating whether the operation succeeded.
IMPORTANT: Beware that changing an allowance with this method brings the risk
that someone may use both the old and the new allowance by unfortunate
transaction ordering. One possible solution to mitigate this race
condition is to first reduce the spender's allowance to 0 and set the
desired value afterwards:
https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
Emits an Approval event.
function approve(address spender, uint256 value) external returns (bool);
transferFrom
Moves a value amount of tokens from from to to using the
allowance mechanism. value is then deducted from the caller's
allowance.
Returns a boolean value indicating whether the operation succeeded.
Emits a Transfer event.
function transferFrom(address from, address to, uint256 value) external returns (bool);
Events
Transfer
Emitted when value tokens are moved from one account (from) to
another (to).
Note that value may be zero.
event Transfer(address indexed from, address indexed to, uint256 value);
Approval
Emitted when the allowance of a spender for an owner is set by
a call to approve. value is the new allowance.
event Approval(address indexed owner, address indexed spender, uint256 value);
IERC20Metadata
Inherits: IERC20
Interface for the optional metadata functions from the ERC-20 standard.
Functions
name
Returns the name of the token.
function name() external view returns (string memory);
symbol
Returns the symbol of the token.
function symbol() external view returns (string memory);
decimals
Returns the decimals places of the token.
function decimals() external view returns (uint8);
IERC7572
ERC-7572 standard interface for exposing contract-level metadata via contractURI()
See https://eips.ethereum.org/EIPS/eip-7572
Functions
contractURI
Returns a URI pointing to contract-level metadata
The metadata should conform to a standard like OpenSea's contract-level metadata schema
function contractURI() external view returns (string memory uri_);
Returns
| Name | Type | Description |
|---|---|---|
uri_ | string | The contract metadata URI as a string |
Events
ContractURIUpdated
Emitted when the contract URI is updated
event ContractURIUpdated();
Contents
IObjectInteractionHook
Inherits: IERC165
Interface for set contracts that support object-level interoperability
Enables a set to respond to interactions involving its objects. These hooks are called before the action is finalized. Returning the expected value is required for the operation to proceed.
Functions
onObjectRelate
Hook called before an object from this set is linked to another object
function onObjectRelate(uint64 id, uint64 rel, uint64 data, uint64 tailSet, uint64 tailId, uint64 tailKind)
external
returns (Descriptor memory od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID from this set (acts as the head) |
rel | uint64 | Relation ID |
data | uint64 | Encoded relation-specific data (optional, uint64) |
tailSet | uint64 | Set ID of the tail object |
tailId | uint64 | Object ID of the tail |
tailKind | uint64 | Kind ID of the tail object |
Returns
| Name | Type | Description |
|---|---|---|
od | Descriptor | Updated descriptor of the head object |
onObjectUnrelate
Hook called before an object from this set is unlinked from another object
function onObjectUnrelate(uint64 id, uint64 rel, uint64 data, uint64 tailSet, uint64 tailId, uint64 tailKind)
external
returns (Descriptor memory od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID from this set (acts as the head) |
rel | uint64 | Relation ID |
data | uint64 | Encoded relation-specific data (optional, uint64) |
tailSet | uint64 | Set ID of the tail object |
tailId | uint64 | Object ID of the tail |
tailKind | uint64 | Kind ID of the tail object |
Returns
| Name | Type | Description |
|---|---|---|
od | Descriptor | Updated descriptor of the head object |
onObjectTransfer
Hook called before ownership of an object from this set is transferred as part of a relation or unrelation
function onObjectTransfer(uint64 id, address from, address to) external returns (bytes4 selector);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID being transferred |
from | address | Current owner address |
to | address | New owner address |
Returns
| Name | Type | Description |
|---|---|---|
selector | bytes4 | Must return onObjectTransfer.selector to confirm and proceed |
IObjectMinterHook
Inherits: IERC165
Interface for set contracts that support minting via ObjectMinter
Functions
onObjectMint
Called by ObjectMinter after payment is collected and before minting is finalized
- If
id0is 0, the contract must assign and return a new object ID. - If
id0is non-zero, the contract must validate and return the same ID. The call must returnonObjectMint.selectorto signal success.
function onObjectMint(address operator, address to, uint64 id0, uint256 context, bytes memory data)
external
returns (bytes4 selector, uint64 id);
Parameters
| Name | Type | Description |
|---|---|---|
operator | address | Caller who initiated the mint (typically msg.sender) |
to | address | Recipient of the minted object |
id0 | uint64 | Requested object ID (0 = auto-assign) |
context | uint256 | Packed 256-bit context for custom mint logic (see MintingContext) |
data | bytes | Arbitrary input payload for extensible logic |
Returns
| Name | Type | Description |
|---|---|---|
selector | bytes4 | Must return onObjectMint.selector to proceed |
id | uint64 | Final resolved object ID to be minted |
ISet
Inherits: IERC165
Core interface for set contracts
Functions
upgrade
Upgrade an object to a new kind or set revision
function upgrade(uint64 id, uint32 krev0, uint32 srev0) external returns (Descriptor memory od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
krev0 | uint32 | New kind revision (0 = no change) |
srev0 | uint32 | New set revision (0 = no change) |
Returns
| Name | Type | Description |
|---|---|---|
od | Descriptor | Descriptor after upgrade |
touch
Touch an object to increment revision without content change
function touch(uint64 id) external returns (Descriptor memory od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
Returns
| Name | Type | Description |
|---|---|---|
od | Descriptor | Descriptor after touch |
transfer
Transfer ownership of an object
function transfer(uint64 id, address to) external;
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
to | address | Address of the new owner |
owner
Get current owner of an object
function owner(uint64 id) external view returns (address owner_);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
Returns
| Name | Type | Description |
|---|---|---|
owner_ | address | Current owner address |
descriptor
Get descriptor at a specific revision
function descriptor(uint64 id, uint32 rev0) external view returns (Descriptor memory od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
rev0 | uint32 | Revision number (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
od | Descriptor | Descriptor at that revision |
snapshot
Get descriptor and elements at a specific revision
function snapshot(uint64 id, uint32 rev0) external view returns (Descriptor memory od, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
rev0 | uint32 | Revision number to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
od | Descriptor | Descriptor at the specified revision |
elems | bytes32[] | Elements at the specified revision |
uri
Get URI template for metadata
Client should replace {id} and {rev} placeholders
function uri() external view returns (string memory uri_);
Returns
| Name | Type | Description |
|---|---|---|
uri_ | string | URI template string |
Events
Created
Emitted when a new object is created
event Created(uint64 id, Descriptor od, bytes32[] elems, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
od | Descriptor | Object descriptor |
elems | bytes32[] | Elements of the object |
owner | address | Initial owner |
Updated
Emitted when an object is updated
event Updated(uint64 id, Descriptor od, bytes32[] elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
od | Descriptor | Updated descriptor |
elems | bytes32[] | Updated elements |
Upgraded
Emitted when an object is upgraded
event Upgraded(uint64 id, Descriptor od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
od | Descriptor | Descriptor after upgrade |
Touched
Emitted when an object is touched (bumped without content change)
event Touched(uint64 id, Descriptor od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
od | Descriptor | Latest descriptor |
Destroyed
Emitted when an object is destroyed
event Destroyed(uint64 id, Descriptor od);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
od | Descriptor | Descriptor before destruction |
Transferred
Emitted when ownership is transferred
event Transferred(uint64 id, Descriptor od, address from, address to);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Object ID |
od | Descriptor | Descriptor after the transfer |
from | address | Previous owner |
to | address | New owner |
ISetRegistryHook
Inherits: IERC165
Interface for set contracts that respond to set lifecycle events.
These hooks are invoked by the SetRegistry before the respective action is finalized. The set must return the expected selector for the operation to proceed.
Functions
onSetRegister
Called before a set is registered.
function onSetRegister(uint64 set, Descriptor memory od) external returns (bytes4 selector);
Parameters
| Name | Type | Description |
|---|---|---|
set | uint64 | Set ID being registered. |
od | Descriptor | Initial descriptor of the set. |
Returns
| Name | Type | Description |
|---|---|---|
selector | bytes4 | Must return onSetRegister.selector to confirm the action. |
onSetUpdate
Called before a set is updated.
function onSetUpdate(uint64 set, Descriptor memory od) external returns (bytes4 selector);
Parameters
| Name | Type | Description |
|---|---|---|
set | uint64 | Set ID being updated. |
od | Descriptor | Updated descriptor of the set. |
Returns
| Name | Type | Description |
|---|---|---|
selector | bytes4 | Must return onSetUpdate.selector to confirm the action. |
onSetUpgrade
Called before a set is upgraded.
function onSetUpgrade(uint64 set, Descriptor memory od) external returns (bytes4 selector);
Parameters
| Name | Type | Description |
|---|---|---|
set | uint64 | Set ID being upgraded. |
od | Descriptor | Descriptor of the set after the upgrade. |
Returns
| Name | Type | Description |
|---|---|---|
selector | bytes4 | Must return onSetUpgrade.selector to confirm the action. |
onSetTouch
Called before a set is touched (bumped revision with no content change).
function onSetTouch(uint64 set, Descriptor memory od) external returns (bytes4 selector);
Parameters
| Name | Type | Description |
|---|---|---|
set | uint64 | Set ID being touched. |
od | Descriptor | Descriptor of the set after the touch. |
Returns
| Name | Type | Description |
|---|---|---|
selector | bytes4 | Must return onSetTouch.selector to confirm the action. |
ISoke
Interface for accessing the core registry contracts
Functions
setRegistry
Returns the address of the Set Registry contract
function setRegistry() external view returns (address setr);
Returns
| Name | Type | Description |
|---|---|---|
setr | address | Address of the Set Registry |
omniRegistry
Returns the address of the Omni Registry contract
function omniRegistry() external view returns (address omnir);
Returns
| Name | Type | Description |
|---|---|---|
omnir | address | Address of the Omni Registry |
kindRegistry
Returns the address of the Kind Registry contract
function kindRegistry() external view returns (address kindr);
Returns
| Name | Type | Description |
|---|---|---|
kindr | address | Address of the Kind Registry |
elementRegistry
Returns the address of the Element Registry contract
function elementRegistry() external view returns (address elemr);
Returns
| Name | Type | Description |
|---|---|---|
elemr | address | Address of the Element Registry |
Contents
Counter48
Counter for objects with IDs from 1 to type(uint48).max inclusive
State Variables
MIN_ID
uint48 constant MIN_ID = 1
MAX_ID
uint48 constant MAX_ID = type(uint48).max - 1
Functions
initialize
function initialize(Counter storage counter, uint48 initial) internal;
increase
function increase(Counter storage counter) internal returns (uint48 previous);
decrease
function decrease(Counter storage counter) internal returns (uint48 previous);
current
function current(Counter storage counter) internal view returns (uint48);
Errors
Overflow
error Overflow();
Underflow
error Underflow();
InvalidInitial
error InvalidInitial();
Structs
Counter
struct Counter {
uint48 value;
}
Counter64
Counter for objects with IDs from 1 to type(uint64).max inclusive
State Variables
MIN_ID
uint64 constant MIN_ID = 1
MAX_ID
uint64 constant MAX_ID = type(uint64).max - 1
Functions
initialize
function initialize(Counter storage counter, uint64 initial) internal;
increment
function increment(Counter storage counter) internal returns (uint64 previous);
decrement
function decrement(Counter storage counter) internal returns (uint64 previous);
current
function current(Counter storage counter) internal view returns (uint64);
Errors
Overflow
error Overflow();
Underflow
error Underflow();
InvalidInitial
error InvalidInitial();
Structs
Counter
struct Counter {
uint64 value;
}
Packing
Functions
pack_uint8x16
Packs up to 16 uint8 values into a single bytes32. Unfilled slots are set to 0.
function pack_uint8x16(uint8[] memory array) internal pure returns (bytes32 packed);
unpack_uint8x16
Unpacks a bytes32 into uint8 values, stopping at the first zero
function unpack_uint8x16(bytes32 packed) internal pure returns (uint8[] memory array);
pack_uint64x4
Packs up to 4 uint64 values into a bytes32. Fills missing slots with 0.
function pack_uint64x4(uint64[] memory array) internal pure returns (bytes32 packed);
unpack_uint64x4
Unpacks a bytes32 into up to 4 uint64s, skipping zero values
function unpack_uint64x4(bytes32 packed) internal pure returns (uint64[] memory array);
pack_uint64x16
Packs up to 16 uint64s into 4 bytes32 values. Fills missing slots with 0.
function pack_uint64x16(uint64[] memory array)
internal
pure
returns (bytes32 p0, bytes32 p1, bytes32 p2, bytes32 p3);
unpack_uint64x16
Unpacks 4 bytes32 values into an array of up to 16 uint64s, skipping zero values
function unpack_uint64x16(bytes32 p0, bytes32 p1, bytes32 p2, bytes32 p3)
internal
pure
returns (uint64[] memory array);
_pack4
function _pack4(uint64[] memory a, uint256 offset) private pure returns (bytes32 out);
_unpack4
function _unpack4(bytes32 b, uint64[] memory a, uint256 offset) private pure returns (uint256 newOffset);
Semver
Functions
pack
function pack(uint8 storage_, uint8 major, uint8 minor, uint8 patch) internal pure returns (uint32 semver);
unpack
function unpack(uint32 semver) internal pure returns (uint8 storage_, uint8 major, uint8 minor, uint8 patch);
Snapshots
Library for storing object revisions
Functions
semver
function semver() external pure returns (uint32 version);
create
function create(Storage storage $, uint64 id, Descriptor memory desc, bytes32[] memory elems, address owner)
external;
update
function update(Storage storage $, uint64 id, bytes32[] memory elems) external returns (Descriptor memory);
upgrade
function upgrade(Storage storage $, uint64 id, uint32 kindRev, uint32 setRev, uint256 count)
external
returns (Descriptor memory);
touch
function touch(Storage storage $, uint64 id, uint256 count) external returns (Descriptor memory);
transfer
function transfer(Storage storage $, uint64 id, address to) external returns (address from);
ownerOf
function ownerOf(Storage storage $, uint64 id) external view returns (address);
revisionOf
function revisionOf(Storage storage $, uint64 id) external view returns (uint32);
revisionAt
function revisionAt(Storage storage $, uint64 id, uint32 rev0) external view returns (uint32);
descriptorAt
function descriptorAt(Storage storage $, uint64 id, uint32 rev0) external view returns (Descriptor memory);
elementsAt
function elementsAt(Storage storage $, uint64 id, uint32 rev0, uint256 num)
external
view
returns (bytes32[] memory);
elementAt
function elementAt(Storage storage $, uint64 id, uint32 rev0, uint256 index) external view returns (bytes32);
sotaOf
function sotaOf(Storage storage $, uint64 id) external view returns (Descriptor memory desc, address owner);
snapshotAt
function snapshotAt(Storage storage $, uint64 id, uint32 rev0, uint256 num)
external
view
returns (Descriptor memory, bytes32[] memory);
statusOf
function statusOf(Storage storage $, uint64[] memory ids) external view returns (bool);
_requireStatus
function _requireStatus(Storage storage $, uint64 id) private view returns (Status memory);
_requireRevision
function _requireRevision(Storage storage $, uint64 id, uint32 rev0) private view returns (uint32);
_validateDescriptor
function _validateDescriptor(Descriptor memory desc) private pure;
_makeRevisionKey
function _makeRevisionKey(uint64 id, uint32 rev) private pure returns (uint256);
Errors
InvalidId
error InvalidId();
InvalidOwner
error InvalidOwner();
InvalidKindId
error InvalidKindId();
InvalidSetId
error InvalidSetId();
InvalidRevision
error InvalidRevision();
InvalidKindRevision
error InvalidKindRevision();
InvalidSetRevision
error InvalidSetRevision();
InvalidElements
error InvalidElements();
InvalidFieldIndex
error InvalidFieldIndex();
RecordExists
error RecordExists(uint64 id);
RecordNotExist
error RecordNotExist(uint64 id);
RecordNotActive
error RecordNotActive(uint64 id);
RevisionNotExist
error RevisionNotExist(uint64 id, uint32 rev);
Unauthorized
error Unauthorized(uint64 id, address visitor);
Structs
Status
Object record tracking ownership and latest revision
struct Status {
address owner;
uint32 latest;
}
Revision
Revision record containing descriptor and elements
struct Revision {
Descriptor desc;
bytes32[16] elems;
}
Storage
struct Storage {
mapping(uint256 => Status) sota; // state of the art
mapping(uint256 => Revision) revisions; // revisions
}
Contents
- Descriptor
- Info
- MatterHash
- ValueRef
- ValueRefLib
- UniqueRef
- UniqueRefLib
- ObjectRef
- ObjectRefLib
- MatterSpec
- MatterContent
- MintPolicy
- MintPolicyStatus
- MintPermissionType
- MintPermissionData
- MintPermissionLib
- MintContext
- MintContextLib
- Adjacency
- SID
- Node
- Arc
- RelationInitiator
- RelationGrant
- RelationTerminator
- RelationOwnerShift
- RelationRule
- RelationRuleLib
- AdjacencyLib
- RelationLib
- TokenStandard
- TokenType
- TokenSpec
- TokenSpecLib
Descriptor
struct Descriptor {
uint32 traits;
uint32 rev;
uint32 kindRev;
uint32 setRev;
uint64 kindId;
uint64 setId;
}
Info
type Info is bytes32
MatterHash
type MatterHash is bytes32
ValueRef
struct ValueRef {
uint16 rev;
uint48 tok;
uint64 _reserved;
uint128 amount;
}
ValueRefLib
Functions
pack
function pack(uint48 tok, uint16 rev, uint128 amount) internal pure returns (bytes32);
pack
function pack(ValueRef memory ref) internal pure returns (bytes32);
unpack
function unpack(bytes32 packed) internal pure returns (ValueRef memory ref);
UniqueRef
struct UniqueRef {
uint16 rev;
uint48 tok;
uint64 id;
uint128 amount;
}
UniqueRefLib
Functions
pack
function pack(uint48 tok, uint16 rev, uint64 id, uint128 amount) internal pure returns (bytes32);
pack
function pack(UniqueRef memory ref) internal pure returns (bytes32);
unpack
function unpack(bytes32 packed) internal pure returns (UniqueRef memory ref);
ObjectRef
struct ObjectRef {
uint64 set;
uint64 id;
uint128 _reserved;
}
ObjectRefLib
Functions
pack
function pack(uint64 set, uint64 id) internal pure returns (bytes32);
pack
function pack(ObjectRef memory ref) internal pure returns (bytes32);
unpack
function unpack(bytes32 packed) internal pure returns (ObjectRef memory ref);
MatterSpec
struct MatterSpec {
uint8 form;
bytes31 mime;
}
MatterContent
struct MatterContent {
uint8 form;
bytes31 mime;
bytes blob;
}
MintPolicy
Defines the access and payment rules for minting objects
struct MintPolicy {
// -- Protocol-controlled fields --
uint32 index; // Unique policy index (assigned by system)
MintPolicyStatus status;
// -- User-configured fields --
MintPermissionType perm; // Type of permission required
uint16 limit; // Max mints per address
uint32 tag; // Arbitrary user tag passed back during callbacks
address recipient; // Where funds are sent (e.g., creator)
address currency; // Payment token (zero = native)
uint96 price; // Price per mint
uint64 idStart; // Start object ID (inclusive)
uint64 idEnd; // End object ID (exclusive)
uint64 saleStart; // Mint start timestamp
uint64 saleEnd; // Mint end timestamp (exclusive)
bytes32 data; // Permission data (e.g. Merkle root)
}
MintPolicyStatus
Indicates the current status of a mint policy
enum MintPolicyStatus {
None, // Uninitialized
Enabled, // Active
Disabled // Exists but cannot be used
}
MintPermissionType
Access modes used to restrict who can mint
enum MintPermissionType {
Public, // Open to all, no proof required
Allowlist, // Merkle proof of address required
AllowTable // Merkle proof of (address, price, limit) required
}
MintPermissionData
Encoded permission data tied to a policy
For Public: must be bytes32(0)
For Allowlist / AllowTable: must be a Merkle root
type MintPermissionData is bytes32
MintPermissionLib
Encodes, decodes, and verifies mint auth data for each permission type.
Functions
allowList_Encode
function allowList_Encode(bytes32[] memory proof) internal pure returns (bytes memory auth);
allowList_Decode
function allowList_Decode(bytes memory auth) internal pure returns (bytes32[] memory proof);
allowList_Leaf
function allowList_Leaf(address user) internal pure returns (bytes32);
allowTable_Encode
function allowTable_Encode(uint96 price, uint16 limit, bytes32[] memory proof)
internal
pure
returns (bytes memory auth);
allowTable_Decode
function allowTable_Decode(bytes memory auth)
internal
pure
returns (uint96 price, uint16 limit, bytes32[] memory proof);
allowTable_Leaf
function allowTable_Leaf(address user, uint96 price, uint16 limit) internal pure returns (bytes32);
MintContext
Struct representing packed minting context
Layout (MSB → LSB): [uint64 _reserved | uint64 idStart | uint64 idEnd | uint32 policy | uint32 tag]
struct MintContext {
uint64 _reserved; // bits 192–255 (reserved for future use)
uint64 idStart; // bits 128–191 (inclusive object ID start)
uint64 idEnd; // bits 64–127 (exclusive object ID end)
uint32 policy; // bits 32–63 (policy index)
uint32 tag; // bits 0–31 (user-defined tag for callback)
}
MintContextLib
Utility library for packing/unpacking MintContext into a uint256 word
Functions
pack
Packs a MintContext struct into a single uint256
function pack(MintContext memory ctx) internal pure returns (uint256 packed);
Parameters
| Name | Type | Description |
|---|---|---|
ctx | MintContext | The MintContext struct |
Returns
| Name | Type | Description |
|---|---|---|
packed | uint256 | The packed uint256 representation |
pack
Packs individual context fields into a uint256 (with _reserved = 0)
function pack(uint32 policy, uint32 tag, uint64 idStart, uint64 idEnd) internal pure returns (uint256 packed);
Parameters
| Name | Type | Description |
|---|---|---|
policy | uint32 | Policy index |
tag | uint32 | Custom user tag |
idStart | uint64 | Inclusive object ID start |
idEnd | uint64 | Exclusive object ID end |
Returns
| Name | Type | Description |
|---|---|---|
packed | uint256 | The packed uint256 representation |
unpack
Unpacks a packed uint256 into a MintContext struct
function unpack(uint256 packed) internal pure returns (MintContext memory ctx);
Parameters
| Name | Type | Description |
|---|---|---|
packed | uint256 | The packed uint256 |
Returns
| Name | Type | Description |
|---|---|---|
ctx | MintContext | The unpacked MintContext struct |
Adjacency
Represents a constraint on the acceptable number of objects by kind in a relation. A maximum of 16 adjacencies can be specified per relation.
Adjacencies are typically specified in a row, with kinds ordered in ascending order.
struct Adjacency {
uint16 degs;
uint48 kind;
}
Properties
| Name | Type | Description |
|---|---|---|
degs | uint16 | Encodes minimum and maximum degree constraints. minDeg = (degs & 0x8000) >> 15, maxDeg = degs & 0x7FFF |
kind | uint48 | Kind ID of the related object. 0 = any other kind, 0xFFFFFFFFFFFF = total, [1, 2^48 - 2] = specific kind ID |
SID
struct SID {
uint64 set;
uint64 id;
}
Node
struct Node {
uint64 data;
uint32 _reserved;
uint32 grant;
uint64 set;
uint64 id;
}
Arc
struct Arc {
uint64 data;
uint64 rel;
uint64 set;
uint64 id;
}
RelationInitiator
Defines who is authorized to initiate a relation
enum RelationInitiator {
Owner, // The owner of the object
Holder, // A holder of a specific token (Value, Unique, or Object)
Preset, // A specified address
Eligible, // An address that passes a verifiction
Anyone // Any address
}
RelationGrant
Describes a granted permission to initiate a relation
struct RelationGrant {
uint32 id; // grant id
uint8 status; // 0 = not exist, 1 = active, 2 = revoked
RelationInitiator initiator; // The type of authorization
uint16 reserved; // Reserved for alignment and future use
uint64 rel; // Optional filter: applies to relatios with a specific relation id (0 = no restriction)
uint64 kind; // Optional filter: applies to peers with a specific kind id (0 = no restriction)
uint64 set; // Optional filter: applies to peers with a specific set id (0 = no restriction)
bytes32 extra; // Encoded RelationInitiatorData, see variants below
}
RelationTerminator
Defines who is allowed to call unrelate()
enum RelationTerminator {
TailOwner, // Only the current tail owner
HeadOwner, // Only the current head owner
Either, // Either tail or head owner
Neither, // Anyone except tail and head owner
Anyone, // Absolutely anyone
Nobody // No one (permanent link)
}
RelationOwnerShift
Defines how ownership of the tail object changes during relate/unrelate
enum RelationOwnerShift {
// No change
Retain,
// Immediate transfers (used during relate or unrelate from HoldPending)
TransferToTailOwner,
TransferToHeadOwner,
TransferToCaller,
TransferToPreset,
TransferToBurned,
TransferToResolved,
TransferToIntended,
// Temporary custody by protocol (used during relate)
HoldForTailOwner,
HoldForHeadOwner,
HoldForCaller,
HoldForPreset,
HoldForBurned,
HoldForResolved,
HoldPending
}
RelationRule
Defines relation lifecycle rules: who can relate/unrelate and how ownership shifts
struct RelationRule {
uint8 version; // Version of the rule format
RelationOwnerShift relateShift; // Ownership change after relate
RelationTerminator terminator; // Defines who is allowed to unrelate
RelationOwnerShift unrelateShift; // Ownership change after unrelate
uint64 unrelateDelay; // delay before unrelate is allowed (0 = immediate)
bytes20 extra; // Optional: preset address or contract address to resolve beneficiaries
}
RelationRuleLib
Functions
pack
function pack(RelationRule memory r) internal pure returns (bytes32);
unpack
function unpack(bytes32 b) internal pure returns (RelationRule memory r);
AdjacencyLib
Functions
encode
Pack one Adjacency into 64 bits: [degs:16 | kind:48]
function encode(Adjacency memory a) private pure returns (uint64);
packQuad
Packs up to 4 adjacencies (starting at offset) into a bytes32.
Missing slots are treated as zero.
function packQuad(Adjacency[] memory adjs, uint256 offset) internal pure returns (bytes32 out);
RelationLib
Structs
RelationInitiatorDataPreset
Data for Delegate-based authorization
struct RelationInitiatorDataPreset {
uint96 padding;
address delegateAddr; // Authorized address allowed to initiate the relation
}
RelationInitiatorDataEligible
Data for Verified-based authorization
struct RelationInitiatorDataEligible {
uint96 padding;
address contractAddr; // Address of the rule-verifying contract
}
RelationInitiatorDataHolder
Data for Holder-based authorization
struct RelationInitiatorDataHolder {
TokenType tokenType; // Value, Unique, or Object
uint8 padding;
uint48 tokenSet; // The set ID of the token
uint64 tokenId; // The token ID of uniques or objects, 0 for values
uint128 tokenAmount; // The requried amount of values, 1 for uniques or objects
}
TokenStandard
enum TokenStandard {
None,
Native,
ERC20,
ERC721,
ERC1155
}
TokenType
enum TokenType {
None,
Fungible,
Opaque,
Object
}
TokenSpec
struct TokenSpec {
TokenStandard std;
uint8 decimals;
bytes30 symbol; // left-padded
}
TokenSpecLib
Functions
pack
function pack(TokenStandard std, uint8 decimals, bytes30 symbol) internal pure returns (bytes32);
unpack
function unpack(bytes32 t) internal pure returns (TokenSpec memory);
toBytes30
function toBytes30(string memory s) internal pure returns (bytes30 out);
toString
function toString(bytes30 symbol) internal pure returns (string memory);
ElementRegistry
Inherits: IElementRegistry, ElementRegistryErrors, OwnableUpgradeable, UUPSUpgradeable, Soke, ValueRegistry, UniqueRegistry
Functions
_authorizeUpgrade
function _authorizeUpgrade(address newImplementation) internal virtual override onlyOwner;
semver
function semver() external pure returns (uint32 version);
initialize
function initialize(
address owner,
address setr,
address omnir,
address kindr,
bytes32 data,
uint8 decimals,
string memory symbol
) public initializer;
KindRegistry
Inherits: IKindRegistry, KindRegistryErrors, OwnableUpgradeable, UUPSUpgradeable, Soke
Kind registration and management
State Variables
KINDREGISTRY_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
keccak256(abi.encode(uint256(keccak256("every.storage.KindRegistry")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant KINDREGISTRY_STORAGE_LOCATION =
0xb8c55f98767a73472af02b22c010d8184657966d48d072fe22562cfc13903400
Functions
_getKindRegistryStorage
function _getKindRegistryStorage() private pure returns (KindRegistryStorage storage $);
_authorizeUpgrade
function _authorizeUpgrade(address newImplementation) internal virtual override onlyOwner;
semver
function semver() external pure returns (uint32 version);
initialize
function initialize(address owner, address setr, address omnir, address elemr, bytes32[] memory elems)
public
initializer;
kindRegister
Registers a new kind
function kindRegister(bytes32 code, bytes32 data, uint8[] memory elemSpec, uint64[] memory rels)
external
override
returns (uint64 id, Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
code | bytes32 | Code hash of the kind |
data | bytes32 | Data hash of the kind |
elemSpec | uint8[] | Element type layout for objects of this kind |
rels | uint64[] | Supported relation IDs |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | New kind ID |
desc | Descriptor | Descriptor after registration |
kindUpdate
Updates code and/or data of an existing kind
function kindUpdate(uint64 id, bytes32 code, bytes32 data) external override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
code | bytes32 | New code hash (0 = skip) |
data | bytes32 | New data hash (0 = skip) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
kindUpdate
Updates code and/or data of an existing kind
function kindUpdate(uint64 id, uint64[] memory rels) external override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rels | uint64[] |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
kindUpdate
Updates code and/or data of an existing kind
function kindUpdate(uint64 id, bytes32 code, bytes32 data, uint64[] memory rels)
external
override
returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
code | bytes32 | New code hash (0 = skip) |
data | bytes32 | New data hash (0 = skip) |
rels | uint64[] |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
kindUpgrade
Upgrades kind/set revision of an existing kind
function kindUpgrade(uint64 id, uint32 kindRev, uint32 setRev) external override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
kindRev | uint32 | New kind revision (0 = skip) |
setRev | uint32 | New set revision (0 = skip) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after upgrade |
kindTouch
Touches a kind (bumps revision with no content changes)
function kindTouch(uint64 id) external override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after touch |
kindTransfer
Transfers ownership of a kind
function kindTransfer(uint64 id, address to) external override returns (address from);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
to | address | New owner address |
Returns
| Name | Type | Description |
|---|---|---|
from | address | Previous owner address |
kindRevision
Resolves and validates a specific revision
function kindRevision(uint64 id, uint32 rev0) external view override returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rev0 | uint32 | Revision to check (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Valid revision number (0 if not found) |
kindDescriptor
Returns the descriptor at a given revision
function kindDescriptor(uint64 id, uint32 rev0) external view override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at that revision |
kindSnapshot
Returns descriptor and elements at a specific revision
function kindSnapshot(uint64 id, uint32 rev0)
external
view
override
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Element hashes of the kind at the revision |
kindOwner
Returns the current owner of a kind
function kindOwner(uint64 id) external view override returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Owner address |
kindSota
Returns the latest descriptor and current owner of a kind
function kindSota(uint64 id) external view override returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Kind ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner address |
kindStatus
Checks whether all specified kinds are active (rev > 0)
function kindStatus(uint64[] memory ids) external view override returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | List of kind IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all specified kinds exist and are active |
kindAdmit
Checks whether a kind at a given revision admits a specific relation
function kindAdmit(uint64 id, uint32 rev, uint64 rel) public view override returns (bool admit, uint32 relRev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | |
rev | uint32 | Kind revision (0 = latest) |
rel | uint64 | Relation ID to check |
Returns
| Name | Type | Description |
|---|---|---|
admit | bool | Whether the relation is admitted |
relRev | uint32 | Specific relation revision admitted (0 = latest) |
_validateHolder
Reverts if msg.sender is not the current owner of the given kind
function _validateHolder(uint64 id) private view;
_validateRelations
Validates the given relations are active
function _validateRelations(uint64[] memory rels) private view;
_validateElementTypes
function _validateElementTypes(uint8[] memory elemSpec) private pure;
_kindOfKindRevision
Returns the latest revision of the Kind-of-Kind object
function _kindOfKindRevision() private view returns (uint32);
_setOfKindRevision
Returns the latest revision of the Set-of-Kind object
function _setOfKindRevision() private view returns (uint32);
_registerKind
function _registerKind(
uint64 id,
uint32 kindRev,
uint32 setRev,
bytes32 code,
bytes32 data,
uint8[] memory elemSpec,
uint64[] memory rels,
address owner
) private returns (Descriptor memory desc);
_unpack
function _unpack(uint64 revid) private pure returns (uint16 rev, uint48 id);
Structs
KindRegistryStorage
Note: storage-location: erc7201:every.storage.KindRegistry
struct KindRegistryStorage {
Counter48.Counter counter;
Snapshots.Storage kinds;
}
ObjectMinter
Inherits: IObjectMinter, ObjectMinterErrors, ReentrancyGuard, OwnableUpgradeable, UUPSUpgradeable
State Variables
OBJECTMINTER_STORAGE_LOCATION
keccak256(abi.encode(uint256(keccak256("every.storage.ObjectMinter")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant OBJECTMINTER_STORAGE_LOCATION =
0x9579d02970471cd8d5ac819714a969ec86c15010903f2a1dfec179aa98f14b00
Functions
_getObjectMinterStorage
function _getObjectMinterStorage() private pure returns (ObjectMinterStorage storage $);
_authorizeUpgrade
function _authorizeUpgrade(address newImplementation) internal virtual override onlyOwner;
semver
function semver() external pure returns (uint32 version);
initialize
function initialize(address owner, address feeRecipient, uint16 feeBps) public initializer;
setFeeConfig
function setFeeConfig(address set, address feeRecipient, uint16 feeBps) external onlyOwner;
mint
Mint an object (public permission)
function mint(address to, address set, uint64 id) external payable override nonReentrant;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
mint
Mint an object (public permission)
function mint(address to, address set, uint64 id, bytes memory data) external payable override nonReentrant;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
data | bytes |
mint
Mint an object (public permission)
function mint(address to, address set, uint64 id, bytes memory auth, uint32 policy)
external
payable
override
nonReentrant;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
auth | bytes | |
policy | uint32 |
mint
Mint an object (public permission)
function mint(address to, address set, uint64 id, bytes memory data, bytes memory auth, uint32 policy)
external
payable
override
nonReentrant;
Parameters
| Name | Type | Description |
|---|---|---|
to | address | The recipient address |
set | address | The set address |
id | uint64 | The object ID to mint |
data | bytes | |
auth | bytes | |
policy | uint32 |
mintPolicyAdd
Add a new mint policy (callable only by set contracts)
function mintPolicyAdd(MintPolicy memory policy) external override returns (uint32 index);
Parameters
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The policy details to add |
Returns
| Name | Type | Description |
|---|---|---|
index | uint32 | The assigned policy index |
mintPolicyEnable
Enable a mint policy (callable only by set contracts)
function mintPolicyEnable(uint32 index) external override;
Parameters
| Name | Type | Description |
|---|---|---|
index | uint32 | The policy index to enable |
mintPolicyDisable
Disable a mint policy (callable only by set contracts)
function mintPolicyDisable(uint32 index) external override;
Parameters
| Name | Type | Description |
|---|---|---|
index | uint32 | The policy index to disable |
mintPolicyCount
Get number of mint policies for a set
function mintPolicyCount(address set) external view override returns (uint256 count);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address to query |
Returns
| Name | Type | Description |
|---|---|---|
count | uint256 | Number of policies |
mintPolicyGet
Get mint policy by index
function mintPolicyGet(address set, uint32 index) external view override returns (MintPolicy memory policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address |
index | uint32 | Policy index |
Returns
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The mint policy details |
mintPolicySearch
Search for applicable mint policy with permission mask
function mintPolicySearch(address set, uint64 id, uint8 mask)
external
view
override
returns (MintPolicy memory policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address |
id | uint64 | The object ID to check |
mask | uint8 | Bitmask indicating which MintPermissionType values are included. Each bit corresponds to a permission type (e.g., bit 0 = Public, bit 1 = Allowlist, etc.). |
Returns
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The first matching mint policy |
mintPolicySearch
Search for applicable mint policy with permission mask
function mintPolicySearch(address set, uint64 id, uint8 mask, uint32 offset)
external
view
override
returns (MintPolicy memory policy);
Parameters
| Name | Type | Description |
|---|---|---|
set | address | The set address |
id | uint64 | The object ID to check |
mask | uint8 | Bitmask indicating which MintPermissionType values are included. Each bit corresponds to a permission type (e.g., bit 0 = Public, bit 1 = Allowlist, etc.). |
offset | uint32 |
Returns
| Name | Type | Description |
|---|---|---|
policy | MintPolicy | The first matching mint policy |
_validateMintableContract
function _validateMintableContract(address contractAddr) private view;
_validatePolicy
function _validatePolicy(MintPolicy memory p) private pure;
_searchMintPolicy
function _searchMintPolicy(address set, uint64 id, uint32 offset, uint8 mask)
private
view
returns (MintPolicy memory);
_mint
function _mint(address to, address set, uint64 id, bytes memory data, bytes memory auth, uint32 policy) private;
_checkPolicy
function _checkPolicy(address set, uint64 id, uint32 index) private view returns (MintPolicy memory policy);
_authorize
function _authorize(MintPolicy memory policy, address user, bytes memory auth)
private
pure
returns (MintPolicy memory);
_preMint
function _preMint(MintPolicy memory policy, address user, address set) private;
_callMint
function _callMint(
MintPolicy memory policy,
address operator,
address to,
address set,
uint64 id,
bytes memory data
) private returns (uint64);
_postMint
function _postMint(MintPolicy memory policy, address operator, address to, address set, uint64 id) private;
_computeSplit
function _computeSplit(address set, uint96 totalAmount)
private
view
returns (uint96 creatorAmount, uint96 protocolAmount, address protocolRecipient);
_collectPayment
function _collectPayment(address currency, address from, uint96 amount) private;
_disbursePayment
function _disbursePayment(address currency, address to, uint96 amount) private;
Structs
FeeConfig
Protocol fee configuration for a specific set or the default fallback
struct FeeConfig {
uint16 status; // Non-zero indicates the config exists (used as a flag)
uint16 bps; // Protocol fee in basis points (1 bp = 0.01%, max = 10,000 = 100%)
address recipient; // Address that receives the protocol fee
}
ObjectMinterStorage
Note: storage-location: erc7201:every.storage.ObjectMinter
struct ObjectMinterStorage {
FeeConfig defaultFeeConfig;
mapping(address => FeeConfig) feeConfigs;
mapping(address => MintPolicy[]) policies;
mapping(address => mapping(address => uint256)) minted;
}
OmniRegistry
Inherits: IOmniRegistry, OmniRegistryErrors, OwnableUpgradeable, UUPSUpgradeable, Soke, RelationRegistry, ObjectAuthorization, ObjectInteraction
Functions
_authorizeUpgrade
function _authorizeUpgrade(address newImplementation) internal virtual override onlyOwner;
semver
function semver() external pure returns (uint32 version);
initialize
function initialize(address owner, address setr, address kindr, address elemr) public initializer;
_relationAdmit
function _relationAdmit(uint64 rel, uint32 rev, uint64 kind)
internal
view
virtual
override(RelationRegistry, ObjectInteraction)
returns (bool admit, uint48 effKind, uint16 effDegs, uint48 totalKind, uint16 totalDegs);
_kindAdmit
function _kindAdmit(uint64 kind, uint32 rev, uint64 rel)
internal
view
virtual
override(ObjectInteraction)
returns (bool admit, uint32 relRev);
_relationRule
function _relationRule(uint64 rel)
internal
view
virtual
override(RelationRegistry, ObjectInteraction)
returns (RelationRule memory rule);
_objectInfo
function _objectInfo(uint64 set, uint64 id)
internal
view
override(ObjectAuthorization, ObjectInteraction)
returns (Descriptor memory desc, address setContract, address owner);
_allowFrom
function _allowFrom(uint32 grantId, address sender, uint128 tail, uint64 rel, uint64 headKind, uint64 headSet)
internal
view
override
returns (bool allow);
_allowTo
function _allowTo(uint32 grantId, address sender, uint128 head, uint64 rel, uint64 tailKind, uint64 tailSet)
internal
view
override
returns (bool allow);
SetRegistry
Inherits: ISetRegistry, SetRegistryErrors, OwnableUpgradeable, UUPSUpgradeable, Soke
Set registration and management
State Variables
SETREGISTRY_STORAGE_LOCATION
Deterministic storage slot per ERC-7201
keccak256(abi.encode(uint256(keccak256("every.storage.SetRegistry")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant SETREGISTRY_STORAGE_LOCATION =
0xb8684b9e6721af0d1bdda1cb8f0f025a168f1333cb4134fd73b30bed06876100
Functions
_getSetRegistryStorage
function _getSetRegistryStorage() private pure returns (SetRegistryStorage storage $);
_authorizeUpgrade
function _authorizeUpgrade(address newImplementation) internal virtual override onlyOwner;
semver
function semver() external pure returns (uint32 version);
initialize
function initialize(
address owner,
address omnir,
address kindr,
address elemr,
bytes32[] memory elems,
string memory baseURI
) public initializer;
modifyBaseURI
function modifyBaseURI(string memory baseURI) external onlyOwner;
setRegister
Registers a new set
function setRegister(bytes32 data) external override returns (uint64 id, Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
data | bytes32 | Hash of external content (e.g. metadata or schema) |
Returns
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the new set |
desc | Descriptor | Descriptor after registration |
setUpdate
Updates the data hash of an existing set
function setUpdate(uint64 id, bytes32 data) external override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
data | bytes32 | New data hash |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Updated descriptor |
setUpgrade
Upgrades the kind or set revision
function setUpgrade(uint64 id, uint32 kindRev, uint32 setRev) external override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
kindRev | uint32 | New kind revision (0 to skip) |
setRev | uint32 | New set revision (0 to skip) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after upgrade |
setTouch
Touches a set (increments revision without any changes)
function setTouch(uint64 id) external override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | ID of the set |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor after touch |
setURI
Returns the URI template for objects in the given set
The returned template includes {id} and {rev} placeholders,
which clients should replace with the object ID and revision number
to construct the full object URI off-chain.
function setURI(uint64 id) external view override returns (string memory uri);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
uri | string | Template URI string for objects in the specified set |
setURI
Returns the URI template for objects in the given set
The returned template includes {id} and {rev} placeholders,
which clients should replace with the object ID and revision number
to construct the full object URI off-chain.
function setURI(uint64 id, uint64 objId, uint32 objRev) external view override returns (string memory uri);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
objId | uint64 | |
objRev | uint32 |
Returns
| Name | Type | Description |
|---|---|---|
uri | string | Template URI string for objects in the specified set |
setRevision
Resolves and validates a specific revision
function setRevision(uint64 id, uint32 rev0) external view override returns (uint32 rev);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
rev0 | uint32 | Requested revision (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
rev | uint32 | Validated revision (0 if not found) |
setDescriptor
Returns the descriptor at a given revision
function setDescriptor(uint64 id, uint32 rev0) external view override returns (Descriptor memory desc);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
rev0 | uint32 | Revision to query (0 = latest) |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor of the set at the specified revision |
setSnapshot
Returns descriptor and elements of a set at a specific revision
function setSnapshot(uint64 id, uint32 rev)
external
view
override
returns (Descriptor memory desc, bytes32[] memory elems);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
rev | uint32 |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Descriptor at the revision |
elems | bytes32[] | Packed element list |
setOwner
Returns the current owner of a set
function setOwner(uint64 id) external view override returns (address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
owner | address | Owner address |
setSota
Returns the latest descriptor and current owner
function setSota(uint64 id) external view override returns (Descriptor memory desc, address owner);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
desc | Descriptor | Latest descriptor |
owner | address | Current owner |
setStatus
Checks whether all provided set IDs are active
function setStatus(uint64[] memory ids) external view override returns (bool active);
Parameters
| Name | Type | Description |
|---|---|---|
ids | uint64[] | List of set IDs |
Returns
| Name | Type | Description |
|---|---|---|
active | bool | True if all sets have a revision > 0 |
setContract
Returns the contract address associated with a set
function setContract(uint64 id) external view override returns (address code);
Parameters
| Name | Type | Description |
|---|---|---|
id | uint64 | Set ID |
Returns
| Name | Type | Description |
|---|---|---|
code | address | Address of the deployed contract |
_validateHolder
Validates that the caller is the owner of the set
function _validateHolder(uint64 id) private view;
_kindOfSetRevision
Returns the latest revision of the Kind-of-Set object
function _kindOfSetRevision() private view returns (uint32);
_setOfSetRevision
Returns the latest revision of the Set-of-Set object
function _setOfSetRevision() private view returns (uint32);
_regsiterSet
function _regsiterSet(uint64 id, uint32 kindRev, uint32 setRev, address code, bytes32 data, address owner)
private
returns (Descriptor memory desc);
_regsiterSetEmit
function _regsiterSetEmit(uint64 id, uint32 kindRev, uint32 setRev, address code, bytes32 data, address owner)
private
returns (Descriptor memory desc);
_validateSetContract
function _validateSetContract(address c) private view;
Structs
SetRegistryStorage
Note: storage-location: erc7201:every.storage.SetRegistry
struct SetRegistryStorage {
Counter48.Counter counter;
Snapshots.Storage sets;
mapping(address => uint64) contracts;
string baseURI;
}