@@ -48,6 +48,7 @@ const getAccountBalancesTable = () => getTableInstance(accountBalancesTableSchem
48
48
const getCommissionsTable = ( ) => getTableInstance ( commissionsTableSchema , MYSQL_ENDPOINT ) ;
49
49
50
50
let intervalTimeout ;
51
+ const genesisAccountBalances = [ ] ;
51
52
52
53
const getGenesisAssetIntervalTimeout = ( ) => intervalTimeout ;
53
54
@@ -67,14 +68,13 @@ const indexTokenModuleAssets = async dbTrx => {
67
68
const userSubStoreInfos = tokenModuleData [ MODULE_SUB_STORE . TOKEN . USER ] ;
68
69
const tokenIDLockedAmountChangeMap = { } ;
69
70
70
- const accountBalancesTable = await getAccountBalancesTable ( ) ;
71
71
// eslint-disable-next-line no-restricted-syntax
72
72
for ( const userInfo of userSubStoreInfos ) {
73
73
const { address, availableBalance : balance , tokenID } = userInfo ;
74
74
75
- // Index account balance
75
+ // Add entry to index the genesis account's balance
76
76
const accountBalanceEntry = { address, tokenID, balance } ;
77
- await accountBalancesTable . upsert ( accountBalanceEntry , dbTrx ) ;
77
+ genesisAccountBalances . push ( accountBalanceEntry ) ;
78
78
79
79
// eslint-disable-next-line no-restricted-syntax
80
80
for ( const lockedBalance of userInfo . lockedBalances ) {
@@ -210,6 +210,43 @@ const indexGenesisBlockAssets = async dbTrx => {
210
210
logger . info ( 'Finished indexing all the genesis assets.' ) ;
211
211
} ;
212
212
213
+ let indexedGenesisAccountBalances ;
214
+ const interval = setInterval ( async ( ) => {
215
+ try {
216
+ if ( genesisAccountBalances . length ) {
217
+ if ( indexedGenesisAccountBalances === false ) return ;
218
+ } else {
219
+ if ( indexedGenesisAccountBalances === true ) clearInterval ( interval ) ;
220
+ return ;
221
+ }
222
+ indexedGenesisAccountBalances = false ;
223
+
224
+ logger . info ( 'Started indexing genesis account balances.' ) ;
225
+ let numEntries = 0 ;
226
+ const accountBalancesTable = await getAccountBalancesTable ( ) ;
227
+ while ( genesisAccountBalances . length ) {
228
+ const accountBalanceEntry = genesisAccountBalances . shift ( ) ;
229
+ await accountBalancesTable
230
+ . upsert ( accountBalanceEntry )
231
+ . then ( ( ) => {
232
+ numEntries ++ ;
233
+ } )
234
+ . catch ( err => {
235
+ numEntries -- ;
236
+ genesisAccountBalances . push ( accountBalanceEntry ) ;
237
+ logger . warn (
238
+ `Updating account balance for ${ accountBalanceEntry . address } failed. Will retry.\nError: ${ err . message } ` ,
239
+ ) ;
240
+ } ) ;
241
+ }
242
+
243
+ indexedGenesisAccountBalances = true ;
244
+ logger . info ( `Finished indexing genesis account balances. Added ${ numEntries } entries.` ) ;
245
+ } catch ( _ ) {
246
+ // No actions required
247
+ }
248
+ } , 5 * 60 * 1000 ) ;
249
+
213
250
module . exports = {
214
251
getGenesisAssetIntervalTimeout,
215
252
indexGenesisBlockAssets,
0 commit comments