Subscription Pool
Constructor
constructor(_pool, _soulboundToken, _incentivesController) Sets the Aave
IPool, theISoulboundTokencontract, and the incentives controller addresses.
Function
ADMIN_ROLE() → bytes32 (view) Returns the identifier for the admin role.
DEFAULT_ADMIN_ROLE() → bytes32 (view) Returns the identifier for the default admin role (manages other roles).
OPERATOR_ROLE() → bytes32 (view) Returns the identifier for the operator role.
batchSyncUserBalance(ops: {asset, accounts[]}[]) (nonpayable) Bulk syncs user balances for multiple assets and account lists. Likely emits
BatchBalanceSyncedand/orBalanceSyncedper item.createVirtualRewardTrackingToken(asset) → address (nonpayable) Deploys or initializes an
IVirtualRewardTrackingTokenfor a specific asset and returns its address. EmitsVirtualRewardTrackingTokenCreatedon success.getRoleAdmin(role) → bytes32 (view) Returns the admin role that controls
role.grantAdmin(newAdmin) (nonpayable) Convenience method to grant admin privileges to
newAdmin(internally equivalent tograntRole(DEFAULT_ADMIN_ROLE, newAdmin)).grantOperator(newOperator) (nonpayable) Convenience method to grant operator privileges to
newOperator(likegrantRole(OPERATOR_ROLE, newOperator)).grantRole(role, account) (nonpayable) Grants
roletoaccount. EmitsRoleGranted. Access-controlled by the role’s admin.hasRole(role, account) → bool (view) Checks whether
accountholdsrole.incentivesController() → address (view) Returns the
IAaveIncentivesControlleraddress currently configured.isAdmin(admin) → bool (view) True if
adminhas administrative privileges.isOperator(guardian) → bool (view) True if
guardianhas operator privileges.isSubscriptionAllowed(asset) → bool (view) Returns whether actions (e.g., supplying/trackers) are currently allowed for
asset.overrideUserBalance(asset, account, newBalance) (nonpayable) Force-sets a user’s tracked balance for an
asset. Intended for admin/operator maintenance; emitsBalanceOverridden.pool() → address (view) Returns the
IPool(Aave pool) address used by this contract.renounceRole(role, callerConfirmation) (nonpayable) Caller gives up
role, with an extracallerConfirmationaddress parameter (safety confirmation). EmitsRoleRevoked.revokeRole(role, account) (nonpayable) Revokes
rolefromaccount. EmitsRoleRevoked. Only callable by the role’s admin.setIncentivesController(controller) (nonpayable) Updates the incentives controller address. Emits
IncentivesControllerUpdated.setSoulboundToken(newToken) (nonpayable) Updates the
ISoulboundTokencontract reference. EmitsSoulboundTokenUpdated.setSubscriptionAllowed(asset, allowed) (nonpayable) Toggles whether
assetis allowed for subscription/supply tracking. EmitsSubscriptionAllowedUpdated.setTrackingTokenImpl(_trackingTokenImpl) (nonpayable) Sets the implementation address used when creating virtual reward tracking tokens.
soulboundToken() → address (view) Returns the current
ISoulboundTokenaddress.supply(asset, amount, onBehalfOf, referralCode) (nonpayable) Supplies
amountofassetinto the underlying pool (likely Aave), creditingonBehalfOf. May integrate with incentives and tracking; emitsSupply.supportsInterface(interfaceId) → bool (view) ERC-165 support check for interface detection.
syncUserBalance(asset, account) (nonpayable) Syncs/refreshes a single user’s tracked balance for an
assetto match the underlying state. EmitsBalanceSynced.trackingTokenImpl() → address (view) Returns the current tracking-token implementation address used for clones/deployments.
virtualRewardTrackingTokens(asset) → address (view) Returns the tracking token address associated with
asset(if created).
[
{
"inputs": [
{ "name": "_pool", "internalType": "address", "type": "address" },
{ "name": "_soulboundToken", "internalType": "address", "type": "address" },
{ "name": "_incentivesController", "internalType": "address", "type": "address" }
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{ "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" },
{
"inputs": [
{ "name": "account", "internalType": "address", "type": "address" },
{ "name": "neededRole", "internalType": "bytes32", "type": "bytes32" }
],
"name": "AccessControlUnauthorizedAccount",
"type": "error"
},
{ "inputs": [], "name": "FailedDeployment", "type": "error" },
{
"inputs": [
{ "name": "balance", "internalType": "uint256", "type": "uint256" },
{ "name": "needed", "internalType": "uint256", "type": "uint256" }
],
"name": "InsufficientBalance",
"type": "error"
},
{ "inputs": [], "name": "InvalidATokenAddress", "type": "error" },
{ "inputs": [], "name": "InvalidAdminAddress", "type": "error" },
{ "inputs": [], "name": "InvalidOperatorAddress", "type": "error" },
{
"inputs": [{ "name": "token", "internalType": "address", "type": "address" }],
"name": "SafeERC20FailedOperation",
"type": "error"
},
{
"inputs": [
{ "name": "createdTrackingTokenAddr", "internalType": "address", "type": "address" }
],
"name": "TrackingTokenAlreadyCreated",
"type": "error"
},
{
"inputs": [
{ "name": "subscriptionPool", "internalType": "address", "type": "address" },
{ "name": "tokenPool", "internalType": "address", "type": "address" }
],
"name": "TrackingTokenPoolMismatched",
"type": "error"
},
{
"inputs": [
{ "indexed": true, "name": "asset", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "account", "internalType": "address", "type": "address" },
{ "indexed": false, "name": "balance", "internalType": "uint256", "type": "uint256" }
],
"name": "BalanceOverridden",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "asset", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "account", "internalType": "address", "type": "address" },
{ "indexed": false, "name": "balance", "internalType": "uint256", "type": "uint256" }
],
"name": "BalanceSynced",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "asset", "internalType": "address", "type": "address" },
{ "indexed": false, "name": "accounts", "internalType": "address[]", "type": "address[]" },
{ "indexed": false, "name": "balances", "internalType": "uint256[]", "type": "uint256[]" }
],
"name": "BatchBalanceSynced",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "oldController", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "newController", "internalType": "address", "type": "address" }
],
"name": "IncentivesControllerUpdated",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "oldPool", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "newPool", "internalType": "address", "type": "address" }
],
"name": "PoolUpdated",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "role", "internalType": "bytes32", "type": "bytes32" },
{ "indexed": true, "name": "previousAdminRole", "internalType": "bytes32", "type": "bytes32" },
{ "indexed": true, "name": "newAdminRole", "internalType": "bytes32", "type": "bytes32" }
],
"name": "RoleAdminChanged",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "role", "internalType": "bytes32", "type": "bytes32" },
{ "indexed": true, "name": "account", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "sender", "internalType": "address", "type": "address" }
],
"name": "RoleGranted",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "role", "internalType": "bytes32", "type": "bytes32" },
{ "indexed": true, "name": "account", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "sender", "internalType": "address", "type": "address" }
],
"name": "RoleRevoked",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "oldToken", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "newToken", "internalType": "address", "type": "address" }
],
"name": "SoulboundTokenUpdated",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "asset", "internalType": "address", "type": "address" },
{ "indexed": false, "name": "oldAllowed", "internalType": "bool", "type": "bool" },
{ "indexed": false, "name": "newAllowed", "internalType": "bool", "type": "bool" }
],
"name": "SubscriptionAllowedUpdated",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "user", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "asset", "internalType": "address", "type": "address" },
{ "indexed": false, "name": "amount", "internalType": "uint256", "type": "uint256" }
],
"name": "Supply",
"anonymous": false,
"type": "event"
},
{
"inputs": [{ "indexed": true, "name": "token", "internalType": "address", "type": "address" }],
"name": "VirtualRewardTrackingTokenCreated",
"anonymous": false,
"type": "event"
},
{
"inputs": [
{ "indexed": true, "name": "user", "internalType": "address", "type": "address" },
{ "indexed": true, "name": "asset", "internalType": "address", "type": "address" },
{ "indexed": false, "name": "amount", "internalType": "uint256", "type": "uint256" }
],
"name": "Withdraw",
"anonymous": false,
"type": "event"
},
{ "outputs": [{ "name": "", "internalType": "bytes32", "type": "bytes32" }], "inputs": [], "name": "ADMIN_ROLE", "stateMutability": "view", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bytes32", "type": "bytes32" }], "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "stateMutability": "view", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bytes32", "type": "bytes32" }], "inputs": [], "name": "OPERATOR_ROLE", "stateMutability": "view", "type": "function" },
{
"outputs": [],
"inputs": [
{
"components": [
{ "name": "asset", "internalType": "address", "type": "address" },
{ "name": "accounts", "internalType": "address[]", "type": "address[]" }
],
"name": "ops",
"internalType": "struct ISubscriptionPool.SyncBalanceOperation[]",
"type": "tuple[]"
}
],
"name": "batchSyncUserBalance",
"stateMutability": "nonpayable",
"type": "function"
},
{ "outputs": [{ "name": "", "internalType": "contract IVirtualRewardTrackingToken", "type": "address" }], "inputs": [{ "name": "asset", "internalType": "address", "type": "address" }], "name": "createVirtualRewardTrackingToken", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bytes32", "type": "bytes32" }], "inputs": [{ "name": "role", "internalType": "bytes32", "type": "bytes32" }], "name": "getRoleAdmin", "stateMutability": "view", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "newAdmin", "internalType": "address", "type": "address" }], "name": "grantAdmin", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "newOperator", "internalType": "address", "type": "address" }], "name": "grantOperator", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "role", "internalType": "bytes32", "type": "bytes32" }, { "name": "account", "internalType": "address", "type": "address" }], "name": "grantRole", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bool", "type": "bool" }], "inputs": [{ "name": "role", "internalType": "bytes32", "type": "bytes32" }, { "name": "account", "internalType": "address", "type": "address" }], "name": "hasRole", "stateMutability": "view", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "contract IAaveIncentivesController", "type": "address" }], "inputs": [], "name": "incentivesController", "stateMutability": "view", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bool", "type": "bool" }], "inputs": [{ "name": "admin", "internalType": "address", "type": "address" }], "name": "isAdmin", "stateMutability": "view", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bool", "type": "bool" }], "inputs": [{ "name": "guardian", "internalType": "address", "type": "address" }], "name": "isOperator", "stateMutability": "view", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bool", "type": "bool" }], "inputs": [{ "name": "asset", "internalType": "address", "type": "address" }], "name": "isSubscriptionAllowed", "stateMutability": "view", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "asset", "internalType": "address", "type": "address" }, { "name": "account", "internalType": "address", "type": "address" }, { "name": "newBalance", "internalType": "uint256", "type": "uint256" }], "name": "overrideUserBalance", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "contract IPool", "type": "address" }], "inputs": [], "name": "pool", "stateMutability": "view", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "role", "internalType": "bytes32", "type": "bytes32" }, { "name": "callerConfirmation", "internalType": "address", "type": "address" }], "name": "renounceRole", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "role", "internalType": "bytes32", "type": "bytes32" }, { "name": "account", "internalType": "address", "type": "address" }], "name": "revokeRole", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "controller", "internalType": "address", "type": "address" }], "name": "setIncentivesController", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "newToken", "internalType": "address", "type": "address" }], "name": "setSoulboundToken", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "asset", "internalType": "address", "type": "address" }, { "name": "allowed", "internalType": "bool", "type": "bool" }], "name": "setSubscriptionAllowed", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "_trackingTokenImpl", "internalType": "address", "type": "address" }], "name": "setTrackingTokenImpl", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "contract ISoulboundToken", "type": "address" }], "inputs": [], "name": "soulboundToken", "stateMutability": "view", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "asset", "internalType": "address", "type": "address" }, { "name": "amount", "internalType": "uint256", "type": "uint256" }, { "name": "onBehalfOf", "internalType": "address", "type": "address" }, { "name": "referralCode", "internalType": "uint16", "type": "uint16" }], "name": "supply", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "bool", "type": "bool" }], "inputs": [{ "name": "interfaceId", "internalType": "bytes4", "type": "bytes4" }], "name": "supportsInterface", "stateMutability": "view", "type": "function" },
{ "outputs": [], "inputs": [{ "name": "asset", "internalType": "address", "type": "address" }, { "name": "account", "internalType": "address", "type": "address" }], "name": "syncUserBalance", "stateMutability": "nonpayable", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "address", "type": "address" }], "inputs": [], "name": "trackingTokenImpl", "stateMutability": "view", "type": "function" },
{ "outputs": [{ "name": "", "internalType": "address", "type": "address" }], "inputs": [{ "name": "asset", "internalType": "address", "type": "address" }], "name": "virtualRewardTrackingTokens", "stateMutability": "view", "type": "function" }
]
Last updated
Was this helpful?