SpendPermissionManager.sol
smart contract
The open-source contracts repository is here.
Structs
SpendPermission
Defines the complete parameters of a spend permission.
Field | Type | Description |
---|---|---|
account | address | Smart account this spend permission is valid for. |
spender | address | Entity that can spend account 's tokens. |
token | address | Token address (ERC-7528 native token address or ERC-20 contract). |
allowance | uint160 | Maximum allowed value to spend within each period . |
period | uint48 | Time duration for resetting used allowance on a recurring basis (seconds). |
start | uint48 | Timestamp this spend permission is valid after (unix seconds). |
end | uint48 | Timestamp this spend permission is valid until (unix seconds). |
salt | uint256 | An arbitrary salt to differentiate unique spend permissions with otherwise identical data. |
extraData | bytes | Arbitrary data to include in the signature. |
PeriodSpend
Describes the cumulative spend for the current active period.
Field | Type | Description |
---|---|---|
start | uint48 | Start time of the period (unix seconds). |
end | uint48 | End time of the period (unix seconds). |
spend | uint160 | Accumulated spend amount for period. |
Contract functions
approve
Approve a spend permission via a direct call from the account
. Only callable by the account
specified in the spend permission.
function approve(SpendPermission calldata spendPermission) external;
approveWithSignature
Approve a spend permission via a signature from the account
owner. Compatible with ERC-6492 signatures for automatic account creation if needed.
function approveWithSignature(SpendPermission calldata spendPermission, bytes calldata signature) external;
spend
Spend tokens using a spend permission, transferring them from the account
to the spender
. Only callable by the spender
specified in the permission.
function spend(SpendPermission memory spendPermission, uint160 value) external requireSender(spendPermission.spender);
revoke
Revoke a spend permission, permanently disabling its use. Only callable by the account
owner specified in the spend permission.
function revoke(SpendPermission calldata spendPermission) external requireSender(spendPermission.account);
getHash
Generate a hash of a SpendPermission
struct for signing, in accordance with EIP-712.
function getHash(SpendPermission memory spendPermission) public view returns (bytes32);
isApproved
Check if a spend permission is approved and not revoked.
function isApproved(SpendPermission memory spendPermission) public view returns (bool);
getCurrentPeriod
Retrieve the start
, end
, and accumulated spend
for the current period of a spend permission.
function getCurrentPeriod(SpendPermission memory spendPermission) public view returns (PeriodSpend memory);