IdentityAccessManagerDeploymentFacet
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
ds
IdentityAccessManagerDeploymentStorage
The storage struct
_checkAccessManagerCreationAllowed
Check if access manager creation is allowed based on config
function _checkAccessManagerCreationAllowed(address entity) internal view;
Parameters
entity
address
Entity creating the access manager
_checkAccessManagerLimits
Check access manager creation limits based on config
function _checkAccessManagerLimits(address entity) internal view;
Parameters
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
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
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
templateName
string
Name of the template to use
Returns
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
entity
address
The entity address
Returns
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
accessManager
address
The access manager address
Returns
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
accessManager
address
The address to check
Returns
isValid
bool
True if it's a deployed access manager
getAccessManagerCount
Get access manager count
function getAccessManagerCount() external view returns (uint256 count);
Returns
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
index
uint256
The index to query
Returns
info
IdentityAccessManagerInfo
The access manager info
hasAccessManager
Check if entity has an access manager
function hasAccessManager(address entity) external view returns (bool hasManager);
Parameters
entity
address
The entity address
Returns
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
creator
address
The creator (authorized representative) address
Returns
predictedAddress
address
The predicted deployment address
_validateAccessManagerParams
Validate access manager creation parameters
function _validateAccessManagerParams(address entity) internal pure;
Parameters
entity
address
The entity address
_prepareAccessManagerConstructorArgs
Prepare constructor arguments for access manager deployment
function _prepareAccessManagerConstructorArgs() internal view returns (bytes memory constructorArgs);
Returns
constructorArgs
bytes
ABI-encoded constructor arguments
_recordAccessManagerCreation
Record access manager creation in storage
function _recordAccessManagerCreation(address accessManagerAddress, address) internal;
Parameters
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
salt
bytes32
Optional salt for deterministic deployment (use bytes32(0) for random)
Returns
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
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?