IdentityAccessManagerDeploymentFacet

Git Source

Facet providing entity access manager deployment functionality for IdentityAccessManagerFactory diamond

Handles the creation and initialization of IdentityAccessManager instances using FactoryBase

State Variables

ENTITY_ACCESS_MANAGER_DEPLOYMENT_STORAGE_SLOT

bytes32 private constant ENTITY_ACCESS_MANAGER_DEPLOYMENT_STORAGE_SLOT =
    keccak256("entity.access.manager.deployment.storage");

Functions

_getIdentityAccessManagerDeploymentStorage

Get the storage struct for this facet

function _getIdentityAccessManagerDeploymentStorage()
    internal
    pure
    returns (IdentityAccessManagerDeploymentStorage storage ds);

Returns

Name
Type
Description

ds

IdentityAccessManagerDeploymentStorage

The storage struct

_checkAccessManagerCreationAllowed

Check if access manager creation is allowed based on config

function _checkAccessManagerCreationAllowed(address entity) internal view;

Parameters

Name
Type
Description

entity

address

Entity creating the access manager

_checkAccessManagerLimits

Check access manager creation limits based on config

function _checkAccessManagerLimits(address entity) internal view;

Parameters

Name
Type
Description

entity

address

Entity creating the access manager

_checkAndCollectFee

Check and collect creation fee if required

function _checkAndCollectFee() internal;

_checkKYCRequirements

Check KYC requirements based on config

function _checkKYCRequirements(address entity) internal view;

Parameters

Name
Type
Description

entity

address

Entity creating the access manager

createAccessManager

Create an entity access manager

The IAM contract address becomes the entity's on-chain identity

function createAccessManager() external payable returns (address accessManagerAddress);

Returns

Name
Type
Description

accessManagerAddress

address

Address of the created access manager (entity identity)

createAccessManagerWithTemplate

Create an access manager using a specific template

function createAccessManagerWithTemplate(string memory templateName)
    external
    payable
    returns (address accessManagerAddress);

Parameters

Name
Type
Description

templateName

string

Name of the template to use

Returns

Name
Type
Description

accessManagerAddress

address

Address of the created access manager

getAccessManager

Get access manager for an entity

function getAccessManager(address entity) external view returns (address accessManager);

Parameters

Name
Type
Description

entity

address

The entity address

Returns

Name
Type
Description

accessManager

address

The access manager address (zero if not exists)

getEntityForAccessManager

Get entity for an access manager

function getEntityForAccessManager(address accessManager) external view returns (address entity);

Parameters

Name
Type
Description

accessManager

address

The access manager address

Returns

Name
Type
Description

entity

address

The entity address (zero if not exists)

isAccessManager

Check if an address is a deployed access manager

function isAccessManager(address accessManager) external view returns (bool isValid);

Parameters

Name
Type
Description

accessManager

address

The address to check

Returns

Name
Type
Description

isValid

bool

True if it's a deployed access manager

getAccessManagerCount

Get access manager count

function getAccessManagerCount() external view returns (uint256 count);

Returns

Name
Type
Description

count

uint256

Total number of deployed access managers

getAccessManagerByIndex

Get access manager info by index

function getAccessManagerByIndex(uint256 index) external view returns (IdentityAccessManagerInfo memory info);

Parameters

Name
Type
Description

index

uint256

The index to query

Returns

Name
Type
Description

info

IdentityAccessManagerInfo

The access manager info

hasAccessManager

Check if entity has an access manager

function hasAccessManager(address entity) external view returns (bool hasManager);

Parameters

Name
Type
Description

entity

address

The entity address

Returns

Name
Type
Description

hasManager

bool

True if entity has an access manager

getAccessManagerAddress

Get predicted address for access manager deployment

function getAccessManagerAddress(address creator) external view returns (address predictedAddress);

Parameters

Name
Type
Description

creator

address

The creator (authorized representative) address

Returns

Name
Type
Description

predictedAddress

address

The predicted deployment address

_validateAccessManagerParams

Validate access manager creation parameters

function _validateAccessManagerParams(address entity) internal pure;

Parameters

Name
Type
Description

entity

address

The entity address

_prepareAccessManagerConstructorArgs

Prepare constructor arguments for access manager deployment

function _prepareAccessManagerConstructorArgs() internal view returns (bytes memory constructorArgs);

Returns

Name
Type
Description

constructorArgs

bytes

ABI-encoded constructor arguments

_recordAccessManagerCreation

Record access manager creation in storage

function _recordAccessManagerCreation(address accessManagerAddress, address) internal;

Parameters

Name
Type
Description

accessManagerAddress

address

The deployed access manager address

<none>

address

createAccessManager

Deploy a new IdentityAccessManager for the caller (self-service)

IAM is deployed nameless - name should be assigned later via attestation

function createAccessManager(bytes32 salt) external returns (address accessManager);

Parameters

Name
Type
Description

salt

bytes32

Optional salt for deterministic deployment (use bytes32(0) for random)

Returns

Name
Type
Description

accessManager

address

The address of the deployed access manager

_getFeeRecipient

Get fee recipient address from factory storage

function _getFeeRecipient() internal view returns (address feeRecipient);

Returns

Name
Type
Description

feeRecipient

address

The fee recipient address

Events

AccessManagerCreated

event AccessManagerCreated(address indexed accessManagerAddress, address indexed entity);

AccessManagerCreationFeeCollected

event AccessManagerCreationFeeCollected(address indexed entity, uint256 fee);

Errors

AccessManagerDeploymentFailed

error AccessManagerDeploymentFailed();

DeploymentFailed

error DeploymentFailed();

AccessManagerAlreadyExists

error AccessManagerAlreadyExists(address entity);

MaxAccessManagersExceeded

error MaxAccessManagersExceeded(uint256 current, uint256 max);

InsufficientFee

error InsufficientFee(uint256 required, uint256 provided);

KYCRequired

error KYCRequired();

TierUpgradeRequired

error TierUpgradeRequired(string feature, uint8 currentTier, uint8 requiredTier);

SubscriptionRequired

error SubscriptionRequired(string feature);

InvalidEntity

error InvalidEntity();

Structs

IdentityAccessManagerDeploymentStorage

struct IdentityAccessManagerDeploymentStorage {
    mapping(uint256 => IdentityAccessManagerInfo) accessManagers;
    uint256 accessManagerCount;
    mapping(address => address) entityToAccessManager;
    mapping(address => address) accessManagerToEntity;
    mapping(address => bool) isAccessManager;
}

IdentityAccessManagerInfo

struct IdentityAccessManagerInfo {
    address accessManagerAddress;
    address entity;
    uint256 createdAt;
    string entityName;
}

Last updated

Was this helpful?