ObjectInteraction

Git Source

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

NameTypeDescription
tailuint256Encoded tail node
reluint64Relation ID
headuint256Encoded head node

unrelate

Unlinks a tail object from a head object

function unrelate(uint256 tail, uint64 rel, uint256 head) external override;

Parameters

NameTypeDescription
tailuint256Encoded tail node
reluint64Relation ID
headuint256Encoded 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;
    uint48 effKind;
    uint48 rel;
    uint112 head;
    uint8 holdingState;
    address holdingExtra;
    uint24 padding;
    uint64 relData;
}

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 {
    mapping(uint128 => RichArc) outArcs;
    mapping(uint256 => uint256) inDegs;
}

Enums

HoldingState

enum HoldingState {
    None,
    TailOwner,
    HeadOwner,
    Caller,
    Preset,
    Burned,
    Resolved,
    Pending
}