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;
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
}