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 toto
.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 toto
.claimRewardsOnBehalf(assets[], amount, user, to, reward) → uint256 Claims rewards on behalf of
user
for a specific token and transfers toto
.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?