Skip to main content

Owner Data Module

@perfect-abstractions/compose/access/Owner/Data/OwnerDataMod.sol

Helper functions for owner storage, reads, and owner check based on ERC-173

Key Features
  • requireOwner() guards by requiring msg.sender is the stored owner.
  • setContractOwner has no access control validation (Trusted initialization only).
  • Emits OwnershipTransferred from setContractOwner with previousOwner == address(0).
Module Usage

You can use modules to wrap around you own project logic while using the default Compose building blocks. Modules provides all the necessary internal helpers for maximum integration.

See Facets & Modules for more information.

Storage

State Variables

PropertyTypeDescription
STORAGE_POSITIONbytes32Owner storage position within the diamond (Value: keccak256("erc173.owner"))

OwnerStorage

Definition
/** storage-location: erc8042:erc173.owner */
struct OwnerStorage {
address owner;
}

Functions

getStorage

Returns a pointer to the OwnerStorage struct.

function getStorage() pure returns (OwnerStorage storage s);

Returns:

PropertyTypeDescription
sOwnerStorage storageThe struct in storage.

owner

Get the address of the owner

function owner() view returns (address);

Returns:

PropertyTypeDescription
-addressThe stored owner, or address(0) if never set or cleared.

requireOwner

Verify if the message sender is the current diamond owner. Useful for gating specify logic inside your own facets.

function requireOwner() view;

Reverts:

PropertyTypeDescription
OwnerUnauthorizedAccounterrorCaller is not the current owner.

setContractOwner

Writes the inital owner address to storage and emits OwnershipTransferred(address(0), _initialOwner).

There is no msg.sender or role check performed. Use only from trusted initialization code, or wrap with your own checks in a facet.

function setContractOwner(address _initialOwner);

Parameters:

PropertyTypeDescription
_initialOwneraddressThe address of the initial owner.

Events

Errors

Best Practices

  • Call setContractOwner only from trusted init paths (constructor, one-off setup). For transfers, use OwnerTransferMod.transferOwnership or an equivalent facet so events record the real previous owner.
  • Guard external entrypoints with requireOwner() or equivalent before state changes restricted to the owner.

Integration Notes

OwnerStorage is located at keccak256("erc173.owner") inside the diamond.

All Compose Owner contracts use that slot, so owner() and transfer logic observe the same address.

Last updated:

Newsletter

Get notified about releases, feature announcements, and technical deep-dives on building smart contracts with Compose.

No spam. Unsubscribe anytime.