@@ -287,6 +287,18 @@ export const createOTokenProcessor = (params: {
287
287
} ,
288
288
}
289
289
290
+ /* Owners which have been pulled or updated in the current context. */
291
+ let ownersChanged = new Map < string , OTokenAddress > ( )
292
+ let getOwner = async ( ctx : Context , address : string , block : Block ) => {
293
+ let owner = owners ! . get ( address )
294
+ if ( ! owner ) {
295
+ owner = await createAddress ( ctx , params . otokenAddress , address , block )
296
+ owners ! . set ( owner . address , owner )
297
+ }
298
+ ownersChanged . set ( owner . address , owner )
299
+ return owner
300
+ }
301
+
290
302
await result . initialize ( )
291
303
292
304
// Prepare data for transfer processing
@@ -348,11 +360,7 @@ export const createOTokenProcessor = (params: {
348
360
. find ( ( { address } ) => address === data . to ) ! . credits
349
361
350
362
const ensureAddress = async ( address : string ) => {
351
- let entity = owners ! . get ( address )
352
- if ( ! entity ) {
353
- entity = await createAddress ( ctx , params . otokenAddress , address , block )
354
- owners ! . set ( entity . address , entity )
355
- }
363
+ let entity = await getOwner ( ctx , address , block )
356
364
entity . blockNumber = block . header . height
357
365
entity . lastUpdated = new Date ( block . header . timestamp )
358
366
return entity
@@ -602,11 +610,7 @@ export const createOTokenProcessor = (params: {
602
610
const timestamp = new Date ( block . header . timestamp )
603
611
const blockNumber = block . header . height
604
612
const otokenObject = await getOTokenObject ( block )
605
- let owner = owners ! . get ( address )
606
- if ( ! owner ) {
607
- owner = await createAddress ( ctx , params . otokenAddress , address , block )
608
- owners ! . set ( address , owner )
609
- }
613
+ let owner = await getOwner ( ctx , address , block )
610
614
const rebaseOption = new OTokenRebaseOption ( {
611
615
id : getUniqueId ( `${ ctx . chain . id } -${ params . otokenAddress } -${ hash } -${ owner . address } ` ) ,
612
616
chainId : ctx . chain . id ,
@@ -646,11 +650,7 @@ export const createOTokenProcessor = (params: {
646
650
const sourceAddress = data . source . toLowerCase ( )
647
651
const targetAddress = data . target . toLowerCase ( )
648
652
// Source
649
- let sourceOwner = owners ! . get ( sourceAddress )
650
- if ( ! sourceOwner ) {
651
- sourceOwner = await createAddress ( ctx , params . otokenAddress , sourceAddress , block )
652
- owners ! . set ( sourceAddress , sourceOwner )
653
- }
653
+ let sourceOwner = await getOwner ( ctx , sourceAddress , block )
654
654
sourceOwner . rebasingOption = RebasingOption . YieldDelegationSource
655
655
sourceOwner . delegatedTo = targetAddress
656
656
result . rebaseOptions . push (
@@ -667,11 +667,7 @@ export const createOTokenProcessor = (params: {
667
667
} ) ,
668
668
)
669
669
// Target
670
- let targetOwner = owners ! . get ( targetAddress )
671
- if ( ! targetOwner ) {
672
- targetOwner = await createAddress ( ctx , params . otokenAddress , targetAddress , block )
673
- owners ! . set ( targetAddress , targetOwner )
674
- }
670
+ let targetOwner = await getOwner ( ctx , targetAddress , block )
675
671
targetOwner . rebasingOption = RebasingOption . YieldDelegationTarget
676
672
targetOwner . delegatedTo = null
677
673
result . rebaseOptions . push (
@@ -697,11 +693,7 @@ export const createOTokenProcessor = (params: {
697
693
const sourceAddress = data . source . toLowerCase ( )
698
694
const targetAddress = data . target . toLowerCase ( )
699
695
// Source
700
- let sourceOwner = owners ! . get ( sourceAddress )
701
- if ( ! sourceOwner ) {
702
- sourceOwner = await createAddress ( ctx , params . otokenAddress , sourceAddress , block )
703
- owners ! . set ( sourceAddress , sourceOwner )
704
- }
696
+ let sourceOwner = await getOwner ( ctx , sourceAddress , block )
705
697
sourceOwner . rebasingOption = RebasingOption . OptOut
706
698
sourceOwner . delegatedTo = null
707
699
result . rebaseOptions . push (
@@ -718,11 +710,7 @@ export const createOTokenProcessor = (params: {
718
710
} ) ,
719
711
)
720
712
// Target
721
- let targetOwner = owners ! . get ( targetAddress )
722
- if ( ! targetOwner ) {
723
- targetOwner = await createAddress ( ctx , params . otokenAddress , targetAddress , block )
724
- owners ! . set ( targetAddress , targetOwner )
725
- }
713
+ let targetOwner = await getOwner ( ctx , targetAddress , block )
726
714
targetOwner . rebasingOption = RebasingOption . OptIn
727
715
targetOwner . delegatedTo = null
728
716
result . rebaseOptions . push (
@@ -1136,7 +1124,8 @@ export const createOTokenProcessor = (params: {
1136
1124
} )
1137
1125
result . erc20 . states . set ( erc20State . id , erc20State )
1138
1126
}
1139
- for ( const owner of owners ?. values ( ) ?? [ ] ) {
1127
+ const ownersToUpdate = [ ...( ownersChanged . values ( ) ?? [ ] ) ]
1128
+ for ( const owner of ownersToUpdate ) {
1140
1129
if ( owner . balance === 0n ) {
1141
1130
result . erc20 . removedHolders . add ( owner . address )
1142
1131
} else {
@@ -1204,9 +1193,7 @@ export const createOTokenProcessor = (params: {
1204
1193
time ( 'erc20 instances' )
1205
1194
1206
1195
// Save to database
1207
- if ( owners ) {
1208
- await ctx . store . upsert ( [ ...owners . values ( ) ] )
1209
- }
1196
+ await ctx . store . upsert ( ownersToUpdate )
1210
1197
await ctx . store . upsert ( result . apies )
1211
1198
await Promise . all ( [
1212
1199
ctx . store . upsert ( result . otokens ) , // TODO: Consider changing otoken ID to block number instead of timestamp.
@@ -1233,6 +1220,30 @@ export const createOTokenProcessor = (params: {
1233
1220
) ,
1234
1221
] )
1235
1222
time ( 'save to database' )
1223
+
1224
+ // Log entity counts
1225
+ ctx . log . info ( `Saved ${ ownersToUpdate . length } OTokenAddress entities` )
1226
+ ctx . log . info ( `Saved entities:
1227
+ APYs: ${ result . apies . length }
1228
+ OTokens: ${ result . otokens . length }
1229
+ WOTokens: ${ result . wotokens . length }
1230
+ Assets: ${ result . assets . length }
1231
+ History: ${ result . history . length }
1232
+ Rebases: ${ result . rebases . length }
1233
+ RebaseOptions: ${ result . rebaseOptions . length }
1234
+ Activity: ${ result . activity . length }
1235
+ Vaults: ${ result . vaults . length }
1236
+ DripperStates: ${ result . dripperStates . length }
1237
+ HarvesterYieldSent: ${ result . harvesterYieldSent . length }
1238
+ DailyStats: ${ result . dailyStats . size }
1239
+ ERC20:
1240
+ - States: ${ result . erc20 . states . size }
1241
+ - StatesByDay: ${ result . erc20 . statesByDay . size }
1242
+ - Holders: ${ result . erc20 . holders . size }
1243
+ - Balances: ${ result . erc20 . balances . size }
1244
+ - Transfers: ${ result . erc20 . transfers . size }
1245
+ - RemovedHolders: ${ result . erc20 . removedHolders . size }
1246
+ ` )
1236
1247
}
1237
1248
1238
1249
return {
0 commit comments