IncentivesV2 Implementation

  • EMISSION_MANAGER() → address Returns the current emission manager’s address.

  • REVISION() → uint256 Returns the contract’s version/revision number.

  • getAllUserRewards(assets[], user) → (rewardsList[], unclaimedAmounts[]) Returns all unclaimed rewards for a user across multiple assets.

  • getAssetDecimals(asset) → uint8 Returns the decimals used by the asset.

  • getAssetIndex(asset, reward) → (uint256, uint256) Returns the global reward index and related data for an asset-reward pair.

  • getClaimer(user) → address Returns the address allowed to claim rewards on behalf of a user.

  • getDistributionEnd(asset, reward) → uint256 Returns the timestamp when emissions stop for an asset-reward pair.

  • getEmissionManager() → address Returns the emission manager address.

  • getPyth() → address Returns the Pyth oracle contract address.

  • getRewardPriceId(reward) → bytes32 Returns the oracle price ID associated with a reward token.

  • getRewardsByAsset(asset) → address[] Lists all reward tokens associated with a specific asset.

  • getRewardsData(asset, reward) → (uint256, uint256, uint256, uint256) Returns detailed emission/reward data for an asset-reward pair.

  • getRewardsList() → address[] Returns the full list of reward tokens managed by this controller.

  • getTransferStrategy(reward) → address Returns the strategy contract address used to distribute a specific reward.getUserAccruedRewards(user, reward) → uint256 Returns how many rewards a user has accrued but not yet claimed.getUserAssetIndex(user, asset, reward) → uint256 Returns the user’s reward index for a specific asset-reward pair.getUserRewards(assets[], user, reward) → uint256 Returns total unclaimed rewards for a user across multiple assets.pyth() → address Returns the current Pyth oracle contract address.


🔹 Claim Rewards

  • claimAllRewards(assets[], to) → (rewardsList[], claimedAmounts[]) Claims all available rewards for the caller and sends them to to.

  • claimAllRewardsOnBehalf(assets[], user, to) → (rewardsList[], claimedAmounts[]) Claims all rewards on behalf of user and transfers them to to.

  • claimAllRewardsToSelf(assets[]) → (rewardsList[], claimedAmounts[]) Claims all rewards for the caller and sends them to their own address.

  • claimRewards(assets[], amount, to, reward) → uint256 Claims up to amount of a specific reward for the caller and sends to to.

  • claimRewardsOnBehalf(assets[], amount, user, to, reward) → uint256 Claims rewards on behalf of user for a specific token and transfers to to.

  • claimRewardsToSelf(assets[], amount, reward) → uint256 Claims up to amount of a specific reward for the caller.


🔹 Admin / Config

  • configureAssets(config[]) Sets up reward emissions for multiple assets and rewards at once.

  • handleAction(user, totalSupply, userBalance) Updates internal accounting when a user interacts with the underlying asset (e.g., deposits/borrows).

  • initialize(address) Initializes the contract (likely called once by the emission manager or proxy).

  • setClaimer(user, caller) Sets a claimer for a specific user.

  • setDistributionEnd(asset, reward, newDistributionEnd) Updates when reward distribution ends for an asset-reward pair.

  • setEmissionPerSecond(asset, rewards[], newEmissionsPerSecond[]) Updates emission rates per second for multiple rewards on one asset.

  • setPyth(_pyth) Updates the Pyth oracle contract.

  • setRewardPriceId(reward, rewardPriceId) Updates the oracle price ID for a reward.

  • setTransferStrategy(reward, transferStrategy) Updates the distribution strategy for a reward token.


Events

  • Accrued(asset, reward, user, assetIndex, userIndex, rewardsAccrued) Triggered when a user accrues rewards for a given asset and reward type.

  • AssetConfigUpdated(asset, reward, oldEmission, newEmission, oldDistributionEnd, newDistributionEnd, assetIndex) Triggered when the emission configuration of an asset is updated.

  • ClaimerSet(user, claimer) Triggered when a claimer is set for a user.

  • PythSet(pyth) Triggered when the Pyth oracle contract is updated.

  • RewardPriceIdUpdated(reward, rewardPriceId) Triggered when the reward price feed ID changes.

  • RewardsClaimed(user, reward, to, claimer, amount) Triggered when rewards are successfully claimed by/for a user.

  • TransferStrategyInstalled(reward, transferStrategy) Triggered when a new transfer strategy for distributing rewards is installed.

[
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "emissionManager",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "userIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rewardsAccrued",
          "type": "uint256"
        }
      ],
      "name": "Accrued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldEmission",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newEmission",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldDistributionEnd",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDistributionEnd",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assetIndex",
          "type": "uint256"
        }
      ],
      "name": "AssetConfigUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimer",
          "type": "address"
        }
      ],
      "name": "ClaimerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pyth",
          "type": "address"
        }
      ],
      "name": "PythSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "rewardPriceId",
          "type": "bytes32"
        }
      ],
      "name": "RewardPriceIdUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "claimer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RewardsClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "transferStrategy",
          "type": "address"
        }
      ],
      "name": "TransferStrategyInstalled",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EMISSION_MANAGER",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REVISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "claimAllRewards",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "rewardsList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "claimedAmounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "claimAllRewardsOnBehalf",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "rewardsList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "claimedAmounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        }
      ],
      "name": "claimAllRewardsToSelf",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "rewardsList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "claimedAmounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "claimRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "claimRewardsOnBehalf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "claimRewardsToSelf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint88",
              "name": "emissionPerSecond",
              "type": "uint88"
            },
            {
              "internalType": "uint256",
              "name": "totalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint32",
              "name": "distributionEnd",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "reward",
              "type": "address"
            },
            {
              "internalType": "contract ITransferStrategyBase",
              "name": "transferStrategy",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "rewardPriceId",
              "type": "bytes32"
            }
          ],
          "internalType": "struct RewardsDataTypes.RewardsConfigInput[]",
          "name": "config",
          "type": "tuple[]"
        }
      ],
      "name": "configureAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getAllUserRewards",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "rewardsList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "unclaimedAmounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getAssetDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getAssetIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getClaimer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getDistributionEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEmissionManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPyth",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getRewardPriceId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getRewardsByAsset",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getRewardsData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRewardsList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getTransferStrategy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getUserAccruedRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getUserAssetIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "assets",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        }
      ],
      "name": "getUserRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "totalSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "userBalance",
          "type": "uint256"
        }
      ],
      "name": "handleAction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pyth",
      "outputs": [
        {
          "internalType": "contract IPyth",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "setClaimer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "newDistributionEnd",
          "type": "uint32"
        }
      ],
      "name": "setDistributionEnd",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "rewards",
          "type": "address[]"
        },
        {
          "internalType": "uint88[]",
          "name": "newEmissionsPerSecond",
          "type": "uint88[]"
        }
      ],
      "name": "setEmissionPerSecond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pyth",
          "type": "address"
        }
      ],
      "name": "setPyth",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "rewardPriceId",
          "type": "bytes32"
        }
      ],
      "name": "setRewardPriceId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "internalType": "contract ITransferStrategyBase",
          "name": "transferStrategy",
          "type": "address"
        }
      ],
      "name": "setTransferStrategy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ]

Last updated

Was this helpful?