Subscription Pool

Constructor

  • constructor(_pool, _soulboundToken, _incentivesController) Sets the Aave IPool, the ISoulboundToken contract, 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 BatchBalanceSynced and/or BalanceSynced per item.

  • createVirtualRewardTrackingToken(asset) → address (nonpayable) Deploys or initializes an IVirtualRewardTrackingToken for a specific asset and returns its address. Emits VirtualRewardTrackingTokenCreated on 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 to grantRole(DEFAULT_ADMIN_ROLE, newAdmin)).

  • grantOperator(newOperator) (nonpayable) Convenience method to grant operator privileges to newOperator (like grantRole(OPERATOR_ROLE, newOperator)).

  • grantRole(role, account) (nonpayable) Grants role to account. Emits RoleGranted. Access-controlled by the role’s admin.

  • hasRole(role, account) → bool (view) Checks whether account holds role.

  • incentivesController() → address (view) Returns the IAaveIncentivesController address currently configured.

  • isAdmin(admin) → bool (view) True if admin has administrative privileges.

  • isOperator(guardian) → bool (view) True if guardian has 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; emits BalanceOverridden.

  • pool() → address (view) Returns the IPool (Aave pool) address used by this contract.

  • renounceRole(role, callerConfirmation) (nonpayable) Caller gives up role, with an extra callerConfirmation address parameter (safety confirmation). Emits RoleRevoked.

  • revokeRole(role, account) (nonpayable) Revokes role from account. Emits RoleRevoked. Only callable by the role’s admin.

  • setIncentivesController(controller) (nonpayable) Updates the incentives controller address. Emits IncentivesControllerUpdated.

  • setSoulboundToken(newToken) (nonpayable) Updates the ISoulboundToken contract reference. Emits SoulboundTokenUpdated.

  • setSubscriptionAllowed(asset, allowed) (nonpayable) Toggles whether asset is allowed for subscription/supply tracking. Emits SubscriptionAllowedUpdated.

  • setTrackingTokenImpl(_trackingTokenImpl) (nonpayable) Sets the implementation address used when creating virtual reward tracking tokens.

  • soulboundToken() → address (view) Returns the current ISoulboundToken address.

  • supply(asset, amount, onBehalfOf, referralCode) (nonpayable) Supplies amount of asset into the underlying pool (likely Aave), crediting onBehalfOf. May integrate with incentives and tracking; emits Supply.

  • 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 asset to match the underlying state. Emits BalanceSynced.

  • 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?