Skip to content

Commit 0f9d4de

Browse files
authored
Fix/v3 incentives (#65)
* feat: hardcode rewards controller addresses * feat: move rewardscontroller from template to dataSource * remove: rewards initialization from a/v/sTokens * remove: unnecessary logs * feat: add rewardsController init * fix: accrued handler function name * fix: remove plural entity names
1 parent 24e985a commit 0f9d4de

10 files changed

Lines changed: 61 additions & 76 deletions

File tree

config/arbitrum-v3.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
"AaveOracleAddress": "0xb56c2F0B653B2e0b10C9b928C8580Ac5Df02C7C7",
44
"AaveOracleStartBlock": 7740000,
55
"PoolAddressesProviderRegistryAddress": "0x770ef9f4fe897e59daCc474EF11238303F9552b6",
6-
"PoolAddressesProviderRegistryStartBlock": 7736400
6+
"PoolAddressesProviderRegistryStartBlock": 7736400,
7+
"RewardsControllerAddress": "0x929EC64c34a17401F460460D4B9390518E5B473e",
8+
"RewardsControllerStartBlock": 7940843
79
}

config/avalanche-v3.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
"AaveOracleAddress": "0xEBd36016B3eD09D4693Ed4251c67Bd858c3c7C9C",
44
"AaveOracleStartBlock": 11970000,
55
"PoolAddressesProviderRegistryAddress": "0x770ef9f4fe897e59daCc474EF11238303F9552b6",
6-
"PoolAddressesProviderRegistryStartBlock": 11970000
6+
"PoolAddressesProviderRegistryStartBlock": 11970000,
7+
"RewardsControllerAddress": "0x929EC64c34a17401F460460D4B9390518E5B473e",
8+
"RewardsControllerStartBlock": 12143958
79
}

config/fantom-v3.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
"AaveOracleAddress": "0xfd6f3c1845604C8AE6c6E402ad17fb9885160754",
44
"AaveOracleStartBlock": 33140000,
55
"PoolAddressesProviderRegistryAddress": "0x770ef9f4fe897e59daCc474EF11238303F9552b6",
6-
"PoolAddressesProviderRegistryStartBlock": 33130000
6+
"PoolAddressesProviderRegistryStartBlock": 33130000,
7+
"RewardsControllerAddress": "0x929EC64c34a17401F460460D4B9390518E5B473e",
8+
"RewardsControllerStartBlock": 33496948
79
}

config/optimism-v3.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
"AaveOracleAddress": "0xD81eb3728a631871a7eBBaD631b5f424909f0c77",
44
"AaveOracleStartBlock": 4365670,
55
"PoolAddressesProviderRegistryAddress": "0x770ef9f4fe897e59daCc474EF11238303F9552b6",
6-
"PoolAddressesProviderRegistryStartBlock": 4364790
6+
"PoolAddressesProviderRegistryStartBlock": 4364790,
7+
"RewardsControllerAddress": "0x929EC64c34a17401F460460D4B9390518E5B473e",
8+
"RewardsControllerStartBlock": 4468687
79
}

config/polygon-v3.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
"AaveOracleAddress": "0xb023e699F5a33916Ea823A16485e259257cA8Bd1",
44
"AaveOracleStartBlock": 25825990,
55
"PoolAddressesProviderRegistryAddress": "0x770ef9f4fe897e59daCc474EF11238303F9552b6",
6-
"PoolAddressesProviderRegistryStartBlock": 25824300
6+
"PoolAddressesProviderRegistryStartBlock": 25824300,
7+
"RewardsControllerAddress": "0x929EC64c34a17401F460460D4B9390518E5B473e",
8+
"RewardsControllerStartBlock": 25970800
79
}

schemas/v3.schema.graphql

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ type SubToken @entity {
122122
tokenContractImpl: Bytes
123123
underlyingAssetAddress: Bytes!
124124
underlyingAssetDecimals: Int!
125-
rewards: [Rewards!]! @derivedFrom(field: "asset")
125+
rewards: [Reward!]! @derivedFrom(field: "asset")
126126
}
127127

128128
type Referrer @entity {
@@ -419,7 +419,7 @@ type RewardFeedOracle @entity {
419419
updatedAt: Int!
420420
}
421421

422-
type Rewards @entity {
422+
type Reward @entity {
423423
"""
424424
address of ic:asset:reward
425425
"""
@@ -438,14 +438,14 @@ type Rewards @entity {
438438
updatedAt: Int!
439439
}
440440

441-
type UserRewards @entity {
441+
type UserReward @entity {
442442
"""
443443
id: ic:asset:reward:user
444444
"""
445445
id: ID!
446446
user: User!
447447
index: BigInt!
448-
reward: Rewards!
448+
reward: Reward!
449449
createdAt: Int!
450450
updatedAt: Int!
451451
}
@@ -455,7 +455,7 @@ type RewardsController @entity {
455455
address of the incentives controller
456456
"""
457457
id: ID!
458-
rewards: [Rewards!]! @derivedFrom(field: "rewardsController")
458+
rewards: [Reward!]! @derivedFrom(field: "rewardsController")
459459
rewardedActions: [RewardedAction!]! @derivedFrom(field: "rewardsController")
460460
claimIncentives: [ClaimRewardsCall!]! @derivedFrom(field: "rewardsController")
461461
}
@@ -744,7 +744,7 @@ type User @entity {
744744
unclaimedRewards: BigInt!
745745
lifetimeRewards: BigInt!
746746
rewardsLastUpdated: Int!
747-
rewards: [UserRewards!]! @derivedFrom(field: "user")
747+
rewards: [UserReward!]! @derivedFrom(field: "user")
748748

749749
#emode
750750
eModeCategoryId: EModeCategory

src/mapping/incentives-controller/v3.ts

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,28 @@ import {
44
RewardsClaimed,
55
RewardOracleUpdated,
66
RewardsController as RewardsControllerContract,
7-
} from '../../../generated/templates/RewardsController/RewardsController';
7+
EmissionManagerUpdated,
8+
} from '../../../generated/RewardsController/RewardsController';
89
import {
910
ClaimRewardsCall,
1011
RewardedAction,
1112
RewardFeedOracle,
12-
Rewards,
13-
UserRewards,
13+
Reward,
14+
UserReward,
15+
RewardsController as RewardsControllerEntity,
1416
} from '../../../generated/schema';
1517
import { getOrInitUser } from '../../helpers/v3/initializers';
1618
import { getHistoryEntityId } from '../../utils/id-generation';
17-
import { IERC20Detailed } from '../../../generated/templates/RewardsController/IERC20Detailed';
19+
import { IERC20Detailed } from '../../../generated/RewardsController/IERC20Detailed';
20+
21+
export function handleEmissionManagerUpdated(event: EmissionManagerUpdated): void {
22+
const rewardsController = event.address;
23+
let iController = RewardsControllerEntity.load(rewardsController.toHexString());
24+
if (!iController) {
25+
iController = new RewardsControllerEntity(rewardsController.toHexString());
26+
iController.save();
27+
}
28+
}
1829

1930
export function handleAssetConfigUpdated(event: AssetConfigUpdated): void {
2031
let emissionsPerSecond = event.params.newEmission;
@@ -24,13 +35,19 @@ export function handleAssetConfigUpdated(event: AssetConfigUpdated): void {
2435
let distributionEnd = event.params.newDistributionEnd;
2536
let rewardsController = event.address;
2637

38+
let iController = RewardsControllerEntity.load(rewardsController.toHexString());
39+
if (!iController) {
40+
iController = new RewardsControllerEntity(rewardsController.toHexString());
41+
iController.save();
42+
}
43+
2744
// update rewards configurations
2845
let rewardIncentiveId =
2946
rewardsController.toHexString() + ':' + asset.toHexString() + ':' + reward.toHexString();
3047

31-
let rewardIncentive = Rewards.load(rewardIncentiveId);
48+
let rewardIncentive = Reward.load(rewardIncentiveId);
3249
if (!rewardIncentive) {
33-
rewardIncentive = new Rewards(rewardIncentiveId);
50+
rewardIncentive = new Reward(rewardIncentiveId);
3451
rewardIncentive.rewardToken = reward;
3552
rewardIncentive.asset = asset.toHexString();
3653
rewardIncentive.rewardsController = rewardsController.toHexString();
@@ -82,17 +99,17 @@ export function handleAccrued(event: Accrued): void {
8299

83100
let rewardId =
84101
rewardsController.toHexString() + ':' + asset.toHexString() + ':' + reward.toHexString();
85-
let rewardIncentive = Rewards.load(rewardId);
102+
let rewardIncentive = Reward.load(rewardId);
86103
if (rewardIncentive) {
87104
rewardIncentive.index = assetIndex;
88105
rewardIncentive.updatedAt = blockTimestamp;
89106
rewardIncentive.save();
90107
}
91108

92109
let userRewardsId = rewardId + ':' + userAddress.toHexString();
93-
let userReward = UserRewards.load(userRewardsId);
110+
let userReward = UserReward.load(userRewardsId);
94111
if (!userReward) {
95-
userReward = new UserRewards(userRewardsId);
112+
userReward = new UserReward(userRewardsId);
96113
userReward.reward = rewardId;
97114
userReward.createdAt = blockTimestamp;
98115
userReward.user = userAddress.toHexString();
Lines changed: 5 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
import { Initialized as ATokenInitialized } from '../../../generated/templates/AToken/AToken';
22
import { Initialized as VTokenInitialized } from '../../../generated/templates/VariableDebtToken/VariableDebtToken';
33
import { Initialized as STokenInitialized } from '../../../generated/templates/StableDebtToken/StableDebtToken';
4-
import { RewardsController } from '../../../generated/templates';
54

65
import { Address, log } from '@graphprotocol/graph-ts';
7-
import { zeroAddress } from '../../utils/converters';
8-
import {
9-
ContractToPoolMapping,
10-
RewardsController as RewardsControllerEntity,
11-
MapAssetPool,
12-
} from '../../../generated/schema';
6+
import { ContractToPoolMapping, MapAssetPool } from '../../../generated/schema';
137
export {
148
handleATokenBurn,
159
handleATokenMint,
@@ -22,28 +16,7 @@ export {
2216
handleVariableTokenBorrowAllowanceDelegated,
2317
} from './tokenization-v3';
2418

25-
function createIncentivesController(
26-
asset: Address,
27-
incentivesController: Address,
28-
underlyingAsset: Address,
29-
pool: Address
30-
): void {
31-
if (incentivesController == zeroAddress()) {
32-
log.warning('Incentives controller is 0x0 for asset: {} | underlyingasset: {} | pool: {}', [
33-
asset.toHexString(),
34-
underlyingAsset.toHexString(),
35-
pool.toHexString(),
36-
]);
37-
return;
38-
}
39-
40-
let iController = RewardsControllerEntity.load(incentivesController.toHexString());
41-
if (!iController) {
42-
iController = new RewardsControllerEntity(incentivesController.toHexString());
43-
iController.save();
44-
RewardsController.create(incentivesController);
45-
}
46-
19+
function initializeToken(asset: Address, underlyingAsset: Address, pool: Address): void {
4720
let poolAddressProvider = ContractToPoolMapping.load(pool.toHexString());
4821
if (poolAddressProvider != null) {
4922
// save asset pool mapping
@@ -66,28 +39,13 @@ function createIncentivesController(
6639

6740
export function handleATokenInitialized(event: ATokenInitialized): void {
6841
log.error('asset: {}', [event.address.toHexString()]);
69-
createIncentivesController(
70-
event.address,
71-
event.params.incentivesController,
72-
event.params.underlyingAsset,
73-
event.params.pool
74-
);
42+
initializeToken(event.address, event.params.underlyingAsset, event.params.pool);
7543
}
7644

7745
export function handleSTokenInitialized(event: STokenInitialized): void {
78-
createIncentivesController(
79-
event.address,
80-
event.params.incentivesController,
81-
event.params.underlyingAsset,
82-
event.params.pool
83-
);
46+
initializeToken(event.address, event.params.underlyingAsset, event.params.pool);
8447
}
8548

8649
export function handleVTokenInitialized(event: VTokenInitialized): void {
87-
createIncentivesController(
88-
event.address,
89-
event.params.incentivesController,
90-
event.params.underlyingAsset,
91-
event.params.pool
92-
);
50+
initializeToken(event.address, event.params.underlyingAsset, event.params.pool);
9351
}

src/mapping/tokenization/tokenization-v3.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,17 +237,14 @@ function tokenMint(event: ethereum.Event, onBehalf: Address, value: BigInt, inde
237237
}
238238

239239
export function handleATokenBurn(event: ATokenBurn): void {
240-
log.error('Burn ---------------------------------', []);
241240
tokenBurn(event, event.params.from, event.params.value, event.params.index);
242241
}
243242

244243
export function handleATokenMint(event: ATokenMint): void {
245-
log.error('Mint ---------------------------------', []);
246244
tokenMint(event, event.params.onBehalfOf, event.params.value, event.params.index);
247245
}
248246

249247
export function handleBalanceTransfer(event: BalanceTransfer): void {
250-
log.error('Transfer ---------------------------------', []);
251248
tokenBurn(event, event.params.from, event.params.value, event.params.index);
252249
tokenMint(event, event.params.to, event.params.value, event.params.index);
253250

templates/v3.subgraph.template.yaml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,19 +98,16 @@ dataSources:
9898
# - event: OwnershipTransferred(indexed address,indexed address)
9999
# handler: handleOwnershipTransferred
100100
file: src/mapping/address-provider-registry/v3.ts
101-
102-
# --------------------------------------
103-
#
104-
# --------------------------------------
105-
templates:
106101
# --------------------------------------
107102
# REWARDS
108103
# --------------------------------------
109104
- kind: ethereum/contract
110105
name: RewardsController
111106
network: {{network}}
112107
source:
108+
address: '{{RewardsControllerAddress}}'
113109
abi: RewardsController
110+
startBlock: {{RewardsControllerStartBlock}}
114111
mapping:
115112
kind: ethereum/events
116113
apiVersion: 0.0.6
@@ -128,13 +125,19 @@ templates:
128125
- event: AssetConfigUpdated(indexed address,indexed address,uint256,uint256,uint256,uint256,uint256)
129126
handler: handleAssetConfigUpdated
130127
- event: Accrued(indexed address,indexed address,indexed address,uint256,uint256,uint256)
131-
handler: handleRewardsAccrued
128+
handler: handleAccrued
132129
- event: RewardsClaimed(indexed address,indexed address,indexed address,address,uint256)
133130
handler: handleRewardsClaimed
134131
- event: RewardOracleUpdated(indexed address,indexed address)
135132
handler: handleRewardOracleUpdated
133+
- event: EmissionManagerUpdated(indexed address,indexed address)
134+
handler: handleEmissionManagerUpdated
136135
file: src/mapping/incentives-controller/v3.ts
137136
# --------------------------------------
137+
#
138+
# --------------------------------------
139+
templates:
140+
# --------------------------------------
138141
# ORACLES / PRICE PROVIDERS
139142
# --------------------------------------
140143
- kind: ethereum/contract

0 commit comments

Comments
 (0)