1
1
import * as curvePoolBoosterAbi from '@abi/otoken-curve-pool-booster'
2
- import { PoolBoosterCampaign , PoolBoosterFeeCollected } from '@model'
2
+ import { PoolBoosterCampaign , PoolBoosterFeeCollected , PoolBoosterTokensRescued } from '@model'
3
3
import { Context , blockFrequencyUpdater , defineProcessor , logFilter } from '@originprotocol/squid-utils'
4
4
import { EvmBatchProcessor } from '@subsquid/evm-processor'
5
5
6
6
export const createCurvePoolBoosterProcessor = ( params : { otokenAddress : string ; from : number } ) => {
7
7
const frequencyUpdate = blockFrequencyUpdater ( { from : params . from } )
8
8
9
- const bribeCreatedFilter = logFilter ( {
9
+ const feeCollectedFilter = logFilter ( {
10
10
topic0 : [ curvePoolBoosterAbi . events . FeeCollected . topic ] ,
11
11
range : { from : params . from } ,
12
12
} )
@@ -22,18 +22,28 @@ export const createCurvePoolBoosterProcessor = (params: { otokenAddress: string;
22
22
topic0 : [ curvePoolBoosterAbi . events . CampaignClosed . topic ] ,
23
23
range : { from : params . from } ,
24
24
} )
25
+ const tokensRescuedFilter = logFilter ( {
26
+ topic0 : [ curvePoolBoosterAbi . events . TokensRescued . topic ] ,
27
+ range : { from : params . from } ,
28
+ } )
25
29
26
30
return defineProcessor ( {
27
31
name : `curve-pool-booster` ,
28
32
setup : ( processor : EvmBatchProcessor ) => {
29
- processor . addLog ( bribeCreatedFilter . value )
33
+ processor . addLog ( campaignCreatedFilter . value )
34
+ processor . addLog ( campaignIdUpdatedFilter . value )
35
+ processor . addLog ( campaignClosedFilter . value )
36
+ processor . addLog ( feeCollectedFilter . value )
37
+ processor . addLog ( tokensRescuedFilter . value )
30
38
} ,
31
39
process : async ( ctx : Context ) => {
32
40
const campaigns = new Map < string , PoolBoosterCampaign > ( )
33
41
const feesCollected = new Map < string , PoolBoosterFeeCollected > ( )
42
+ const tokensRescued = new Map < string , PoolBoosterTokensRescued > ( )
34
43
35
44
for ( const block of ctx . blocksWithContent ) {
36
45
for ( const log of block . logs ) {
46
+ // TODO: Validate campaign feeCollector is in our whitelist.
37
47
if ( campaignCreatedFilter . matches ( log ) ) {
38
48
const data = curvePoolBoosterAbi . events . CampaignCreated . decode ( log )
39
49
const id = `${ ctx . chain . id } -${ log . address } `
@@ -47,23 +57,20 @@ export const createCurvePoolBoosterProcessor = (params: { otokenAddress: string;
47
57
totalRewardAmount : data . totalRewardAmount ,
48
58
} )
49
59
campaigns . set ( id , campaign )
50
- }
51
- if ( campaignIdUpdatedFilter . matches ( log ) ) {
60
+ } else if ( campaignIdUpdatedFilter . matches ( log ) ) {
52
61
const data = curvePoolBoosterAbi . events . CampaignIdUpdated . decode ( log )
53
62
const id = `${ ctx . chain . id } -${ log . address } `
54
63
let campaign = campaigns . get ( id ) || ( await ctx . store . get ( PoolBoosterCampaign , id ) )
55
64
if ( campaign ) {
56
65
campaign . campaignId = data . newId
57
66
}
58
- }
59
- if ( campaignClosedFilter . matches ( log ) ) {
67
+ } else if ( campaignClosedFilter . matches ( log ) ) {
60
68
const id = `${ ctx . chain . id } -${ log . address } `
61
69
let campaign = campaigns . get ( id ) || ( await ctx . store . get ( PoolBoosterCampaign , id ) )
62
70
if ( campaign ) {
63
71
campaign . closed = true
64
72
}
65
- }
66
- if ( bribeCreatedFilter . matches ( log ) ) {
73
+ } else if ( feeCollectedFilter . matches ( log ) ) {
67
74
const data = curvePoolBoosterAbi . events . FeeCollected . decode ( log )
68
75
const feeCollected = new PoolBoosterFeeCollected ( {
69
76
id : `${ ctx . chain . id } -${ log . id } ` ,
@@ -76,11 +83,26 @@ export const createCurvePoolBoosterProcessor = (params: { otokenAddress: string;
76
83
txHash : log . transactionHash ,
77
84
} )
78
85
feesCollected . set ( feeCollected . id , feeCollected )
86
+ } else if ( tokensRescuedFilter . matches ( log ) ) {
87
+ const data = curvePoolBoosterAbi . events . TokensRescued . decode ( log )
88
+ const tokensRescuedEvent = new PoolBoosterTokensRescued ( {
89
+ id : `${ ctx . chain . id } -${ log . id } ` ,
90
+ chainId : ctx . chain . id ,
91
+ address : log . address ,
92
+ token : data . token ,
93
+ amount : data . amount ,
94
+ receiver : data . receiver ,
95
+ timestamp : new Date ( block . header . timestamp ) ,
96
+ blockNumber : block . header . height ,
97
+ txHash : log . transactionHash ,
98
+ } )
99
+ tokensRescued . set ( tokensRescuedEvent . id , tokensRescuedEvent )
79
100
}
80
101
}
81
102
}
82
- await ctx . store . insert ( [ ...campaigns . values ( ) ] )
103
+ await ctx . store . upsert ( [ ...campaigns . values ( ) ] )
83
104
await ctx . store . insert ( [ ...feesCollected . values ( ) ] )
105
+ await ctx . store . insert ( [ ...tokensRescued . values ( ) ] )
84
106
} ,
85
107
} )
86
108
}
0 commit comments