@@ -3,7 +3,7 @@ import { PoolBoosterCampaign, PoolBoosterFeeCollected, PoolBoosterTokensRescued
3
3
import { Context , blockFrequencyUpdater , defineProcessor , logFilter } from '@originprotocol/squid-utils'
4
4
import { EvmBatchProcessor } from '@subsquid/evm-processor'
5
5
6
- export const createCurvePoolBoosterProcessor = ( params : { otokenAddress : string ; from : number } ) => {
6
+ export const createCurvePoolBoosterProcessor = ( params : { from : number } ) => {
7
7
const frequencyUpdate = blockFrequencyUpdater ( { from : params . from } )
8
8
9
9
const feeCollectedFilter = logFilter ( {
@@ -26,21 +26,41 @@ export const createCurvePoolBoosterProcessor = (params: { otokenAddress: string;
26
26
topic0 : [ curvePoolBoosterAbi . events . TokensRescued . topic ] ,
27
27
range : { from : params . from } ,
28
28
} )
29
+ const rewardPerVoteUpdatedFilter = logFilter ( {
30
+ topic0 : [ curvePoolBoosterAbi . events . RewardPerVoteUpdated . topic ] ,
31
+ range : { from : params . from } ,
32
+ } )
33
+ const totalRewardAmountUpdatedFilter = logFilter ( {
34
+ topic0 : [ curvePoolBoosterAbi . events . TotalRewardAmountUpdated . topic ] ,
35
+ range : { from : params . from } ,
36
+ } )
29
37
30
38
return defineProcessor ( {
31
39
name : `curve-pool-booster` ,
40
+ from : params . from ,
32
41
setup : ( processor : EvmBatchProcessor ) => {
33
42
processor . addLog ( campaignCreatedFilter . value )
34
43
processor . addLog ( campaignIdUpdatedFilter . value )
35
44
processor . addLog ( campaignClosedFilter . value )
36
45
processor . addLog ( feeCollectedFilter . value )
37
46
processor . addLog ( tokensRescuedFilter . value )
47
+ processor . addLog ( rewardPerVoteUpdatedFilter . value )
48
+ processor . addLog ( totalRewardAmountUpdatedFilter . value )
38
49
} ,
39
50
process : async ( ctx : Context ) => {
40
51
const campaigns = new Map < string , PoolBoosterCampaign > ( )
41
52
const feesCollected = new Map < string , PoolBoosterFeeCollected > ( )
42
53
const tokensRescued = new Map < string , PoolBoosterTokensRescued > ( )
43
54
55
+ const getCampaign = async ( address : string ) : Promise < PoolBoosterCampaign | undefined > => {
56
+ const id = `${ ctx . chain . id } -${ address } `
57
+ let campaign = campaigns . get ( id ) || ( await ctx . store . get ( PoolBoosterCampaign , id ) )
58
+ if ( campaign ) {
59
+ campaigns . set ( id , campaign )
60
+ }
61
+ return campaign
62
+ }
63
+
44
64
for ( const block of ctx . blocksWithContent ) {
45
65
for ( const log of block . logs ) {
46
66
// TODO: Validate campaign feeCollector is in our whitelist.
@@ -55,34 +75,48 @@ export const createCurvePoolBoosterProcessor = (params: { otokenAddress: string;
55
75
rewardToken : data . rewardToken ,
56
76
maxRewardPerVote : data . maxRewardPerVote ,
57
77
totalRewardAmount : data . totalRewardAmount ,
78
+ closed : false ,
58
79
} )
59
80
campaigns . set ( id , campaign )
60
81
} else if ( campaignIdUpdatedFilter . matches ( log ) ) {
61
82
const data = curvePoolBoosterAbi . events . CampaignIdUpdated . decode ( log )
62
- const id = `${ ctx . chain . id } -${ log . address } `
63
- let campaign = campaigns . get ( id ) || ( await ctx . store . get ( PoolBoosterCampaign , id ) )
83
+ const campaign = await getCampaign ( log . address )
64
84
if ( campaign ) {
65
85
campaign . campaignId = data . newId
66
86
}
67
87
} else if ( campaignClosedFilter . matches ( log ) ) {
68
- const id = `${ ctx . chain . id } -${ log . address } `
69
- let campaign = campaigns . get ( id ) || ( await ctx . store . get ( PoolBoosterCampaign , id ) )
88
+ const campaign = await getCampaign ( log . address )
70
89
if ( campaign ) {
71
90
campaign . closed = true
72
91
}
92
+ } else if ( rewardPerVoteUpdatedFilter . matches ( log ) ) {
93
+ const data = curvePoolBoosterAbi . events . RewardPerVoteUpdated . decode ( log )
94
+ const campaign = await getCampaign ( log . address )
95
+ if ( campaign ) {
96
+ campaign . maxRewardPerVote = data . newMaxRewardPerVote
97
+ }
98
+ } else if ( totalRewardAmountUpdatedFilter . matches ( log ) ) {
99
+ const data = curvePoolBoosterAbi . events . TotalRewardAmountUpdated . decode ( log )
100
+ const campaign = await getCampaign ( log . address )
101
+ if ( campaign ) {
102
+ campaign . totalRewardAmount += data . extraTotalRewardAmount
103
+ }
73
104
} else if ( feeCollectedFilter . matches ( log ) ) {
74
- const data = curvePoolBoosterAbi . events . FeeCollected . decode ( log )
75
- const feeCollected = new PoolBoosterFeeCollected ( {
76
- id : `${ ctx . chain . id } -${ log . id } ` ,
77
- chainId : ctx . chain . id ,
78
- address : log . address ,
79
- feeCollector : data . feeCollector ,
80
- feeAmount : data . feeAmount ,
81
- timestamp : new Date ( block . header . timestamp ) ,
82
- blockNumber : block . header . height ,
83
- txHash : log . transactionHash ,
84
- } )
85
- feesCollected . set ( feeCollected . id , feeCollected )
105
+ const campaign = await getCampaign ( log . address )
106
+ if ( campaign ) {
107
+ const data = curvePoolBoosterAbi . events . FeeCollected . decode ( log )
108
+ const feeCollected = new PoolBoosterFeeCollected ( {
109
+ id : `${ ctx . chain . id } -${ log . id } ` ,
110
+ chainId : ctx . chain . id ,
111
+ address : log . address ,
112
+ feeCollector : data . feeCollector ,
113
+ feeAmount : data . feeAmount ,
114
+ timestamp : new Date ( block . header . timestamp ) ,
115
+ blockNumber : block . header . height ,
116
+ txHash : log . transactionHash ,
117
+ } )
118
+ feesCollected . set ( feeCollected . id , feeCollected )
119
+ }
86
120
} else if ( tokensRescuedFilter . matches ( log ) ) {
87
121
const data = curvePoolBoosterAbi . events . TokensRescued . decode ( log )
88
122
const tokensRescuedEvent = new PoolBoosterTokensRescued ( {
0 commit comments