IdentityAccessManagerPaymasterFacet
Paymaster integration facet for IdentityAccessManagerFactory diamond
Handles paymaster settings for sponsored access manager creation
State Variables
PAYMASTER_STORAGE_SLOT
bytes32 private constant PAYMASTER_STORAGE_SLOT = keccak256("entity.access.manager.paymaster.storage");
Functions
_getPaymasterStorage
Get the storage struct for this facet
function _getPaymasterStorage() internal pure returns (PaymasterStorage storage ps);
Returns
ps
PaymasterStorage
The storage struct
setPaymaster
Set the paymaster contract address
function setPaymaster(address paymaster) external restricted;
Parameters
paymaster
address
Address of the paymaster contract
setPaymasterEnabled
Enable or disable paymaster functionality
function setPaymasterEnabled(bool enabled) external restricted;
Parameters
enabled
bool
Whether paymaster should be enabled
setEntitySponsorship
Set sponsorship for a specific entity
function setEntitySponsorship(address entity, bool sponsored) external restricted;
Parameters
entity
address
Entity address
sponsored
bool
Whether entity should have sponsored creation
setTierSponsorship
Set sponsorship eligibility for a tier
function setTierSponsorship(uint8 tier, bool enabled) external restricted;
Parameters
tier
uint8
Subscription tier
enabled
bool
Whether tier is eligible for sponsorship
setSponsorshipLimit
Set maximum sponsored creations per period
function setSponsorshipLimit(uint256 maxCreations) external restricted;
Parameters
maxCreations
uint256
Maximum number of sponsored creations
setSponsorshipPeriod
Set sponsorship period duration
function setSponsorshipPeriod(uint256 duration) external restricted;
Parameters
duration
uint256
Duration in seconds (e.g., 30 days)
isEligibleForSponsorship
Check if an entity is eligible for sponsored creation
function isEligibleForSponsorship(address entity) external view returns (bool eligible);
Parameters
entity
address
Entity address
Returns
eligible
bool
Whether entity is eligible for sponsorship
_isEligibleForSponsorshipInternal
Internal logic to check sponsorship eligibility
function _isEligibleForSponsorshipInternal(address entity) internal view returns (bool eligible);
Parameters
entity
address
Entity address
Returns
eligible
bool
Whether entity is eligible for sponsorship
recordSponsoredCreation
Record a sponsored access manager creation
function recordSponsoredCreation(address entity, address accessManager) external restricted;
Parameters
entity
address
Entity address
accessManager
address
Created access manager address
getPaymasterConfig
Get current paymaster configuration
function getPaymasterConfig() external view returns (address paymaster, bool enabled);
Returns
paymaster
address
Current paymaster address
enabled
bool
Whether paymaster is enabled
isEntitySponsored
Check if an entity has sponsorship
function isEntitySponsored(address entity) external view returns (bool sponsored);
Parameters
entity
address
Entity address
Returns
sponsored
bool
Whether entity is sponsored
isTierSponsorshipEnabled
Check if a tier has sponsorship enabled
function isTierSponsorshipEnabled(uint8 tier) external view returns (bool enabled);
Parameters
tier
uint8
Subscription tier
Returns
enabled
bool
Whether tier sponsorship is enabled
getSponsorshipStats
Get sponsorship statistics
function getSponsorshipStats()
external
view
returns (
uint256 maxCreations,
uint256 currentCount,
uint256 periodStart,
uint256 periodDuration,
uint256 timeRemaining
);
Returns
maxCreations
uint256
Maximum sponsored creations per period
currentCount
uint256
Current sponsored count in period
periodStart
uint256
Start of current period
periodDuration
uint256
Duration of sponsorship period
timeRemaining
uint256
Time remaining in current period
getRemainingSponsorship
Get remaining sponsored creations in current period
function getRemainingSponsorship() external view returns (uint256 remaining);
Returns
remaining
uint256
Number of remaining sponsored creations
_checkSponsorshipLimits
Check if sponsorship limits allow creation
function _checkSponsorshipLimits() internal view returns (bool allowed);
Returns
allowed
bool
Whether creation is allowed within limits
_shouldResetPeriod
Check if sponsorship period should be reset
function _shouldResetPeriod() internal view returns (bool shouldReset);
Returns
shouldReset
bool
Whether period should be reset
_resetPeriodIfNeeded
Reset sponsorship period if needed
function _resetPeriodIfNeeded() internal;
setMultipleEntitySponsorship
Set sponsorship for multiple entitys
function setMultipleEntitySponsorship(address[] calldata entitys, bool[] calldata sponsored) external restricted;
Parameters
entitys
address[]
Array of entity addresses
sponsored
bool[]
Array of sponsorship flags
setMultipleTierSponsorship
Set sponsorship for multiple tiers
function setMultipleTierSponsorship(uint8[] calldata tiers, bool[] calldata enabled) external restricted;
Parameters
tiers
uint8[]
Array of tier numbers
enabled
bool[]
Array of enabled flags
restricted
Modifier to check admin permissions
modifier restricted();
Events
PaymasterUpdated
event PaymasterUpdated(address indexed oldPaymaster, address indexed newPaymaster);
PaymasterStatusChanged
event PaymasterStatusChanged(bool enabled);
EntitySponsorshipUpdated
event EntitySponsorshipUpdated(address indexed entity, bool sponsored);
TierSponsorshipUpdated
event TierSponsorshipUpdated(uint8 tier, bool enabled);
SponsoredAccessManagerCreated
event SponsoredAccessManagerCreated(address indexed entity, address indexed accessManager, address paymaster);
SponsorshipLimitUpdated
event SponsorshipLimitUpdated(uint256 oldLimit, uint256 newLimit);
SponsorshipPeriodUpdated
event SponsorshipPeriodUpdated(uint256 duration);
Errors
PaymasterNotSet
error PaymasterNotSet();
PaymasterNotEnabled
error PaymasterNotEnabled();
NotSponsoredEntity
error NotSponsoredEntity(address entity);
SponsorshipLimitExceeded
error SponsorshipLimitExceeded(uint256 current, uint256 max);
InvalidPaymaster
error InvalidPaymaster(address paymaster);
InvalidSponsorshipConfig
error InvalidSponsorshipConfig();
Structs
PaymasterStorage
struct PaymasterStorage {
address paymaster;
bool paymasterEnabled;
mapping(address => bool) sponsoredEntities;
mapping(uint8 => bool) tierSponsorshipEnabled;
uint256 maxSponsoredCreations;
uint256 currentSponsoredCount;
uint256 sponsorshipPeriodStart;
uint256 sponsorshipPeriodDuration;
}
Last updated
Was this helpful?