Skip to content

Commit 7049f2c

Browse files
authored
Filter to locked accounts for holder balance calculations (#175)
1 parent ac3d64c commit 7049f2c

1 file changed

Lines changed: 26 additions & 2 deletions

File tree

ocp/worker/currency/holder/runtime.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,36 @@ func (p *holderRuntime) countHoldersForMint(ctx context.Context, mint string, cu
138138
return 0, nil
139139
}
140140

141-
tokenAccounts := make([]*common.Account, len(accountRecords))
141+
vaultAddresses := make([]string, len(accountRecords))
142142
for i, record := range accountRecords {
143-
tokenAccounts[i], err = common.NewAccountFromPublicKeyString(record.TokenAccount)
143+
vaultAddresses[i] = record.TokenAccount
144+
}
145+
146+
timelockRecordsByVault, err := p.data.GetTimelockByVaultBatch(ctx, vaultAddresses...)
147+
if err != nil {
148+
return 0, errors.Wrap(err, "error getting timelock records")
149+
}
150+
151+
tokenAccounts := make([]*common.Account, 0)
152+
for _, record := range accountRecords {
153+
timelockRecord, ok := timelockRecordsByVault[record.TokenAccount]
154+
if !ok {
155+
return 0, errors.Errorf("timelock record unexpectedly missing for vault %s", record.TokenAccount)
156+
}
157+
158+
if !timelockRecord.IsLocked() {
159+
continue
160+
}
161+
162+
tokenAccount, err := common.NewAccountFromPublicKeyString(record.TokenAccount)
144163
if err != nil {
145164
return 0, errors.Wrap(err, "invalid token account public key")
146165
}
166+
tokenAccounts = append(tokenAccounts, tokenAccount)
167+
}
168+
169+
if len(tokenAccounts) == 0 {
170+
return 0, nil
147171
}
148172

149173
balances, err := balance.BatchCalculateFromCacheWithTokenAccounts(ctx, p.data, tokenAccounts...)

0 commit comments

Comments
 (0)