IdentityAccessManagerPaymasterFacet

Git Source

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

Name
Type
Description

ps

PaymasterStorage

The storage struct

setPaymaster

Set the paymaster contract address

function setPaymaster(address paymaster) external restricted;

Parameters

Name
Type
Description

paymaster

address

Address of the paymaster contract

setPaymasterEnabled

Enable or disable paymaster functionality

function setPaymasterEnabled(bool enabled) external restricted;

Parameters

Name
Type
Description

enabled

bool

Whether paymaster should be enabled

setEntitySponsorship

Set sponsorship for a specific entity

function setEntitySponsorship(address entity, bool sponsored) external restricted;

Parameters

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

maxCreations

uint256

Maximum number of sponsored creations

setSponsorshipPeriod

Set sponsorship period duration

function setSponsorshipPeriod(uint256 duration) external restricted;

Parameters

Name
Type
Description

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

Name
Type
Description

entity

address

Entity address

Returns

Name
Type
Description

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

Name
Type
Description

entity

address

Entity address

Returns

Name
Type
Description

eligible

bool

Whether entity is eligible for sponsorship

recordSponsoredCreation

Record a sponsored access manager creation

function recordSponsoredCreation(address entity, address accessManager) external restricted;

Parameters

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

entity

address

Entity address

Returns

Name
Type
Description

sponsored

bool

Whether entity is sponsored

isTierSponsorshipEnabled

Check if a tier has sponsorship enabled

function isTierSponsorshipEnabled(uint8 tier) external view returns (bool enabled);

Parameters

Name
Type
Description

tier

uint8

Subscription tier

Returns

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

remaining

uint256

Number of remaining sponsored creations

_checkSponsorshipLimits

Check if sponsorship limits allow creation

function _checkSponsorshipLimits() internal view returns (bool allowed);

Returns

Name
Type
Description

allowed

bool

Whether creation is allowed within limits

_shouldResetPeriod

Check if sponsorship period should be reset

function _shouldResetPeriod() internal view returns (bool shouldReset);

Returns

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

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?