Skip to content

Commit

Permalink
fix: updatedQuota events can be less than the number of calls
Browse files Browse the repository at this point in the history
  • Loading branch information
5lliot committed Dec 6, 2023
1 parent 717c5c4 commit 6ef7323
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 28 deletions.
19 changes: 9 additions & 10 deletions ds/account_quota.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
type AccountQuotaMgr struct {
mu sync.Mutex
// so that credit manager can create latest quota update event
// account+ txHash
events map[string][]*updateQuotaEvent
contract *poolQuotaKeeperv3.PoolQuotaKeeperv3
}
Expand All @@ -40,17 +41,14 @@ func NewAccountQuotaMgr(client core.ClientI) *AccountQuotaMgr {
}
}

func (mdl *AccountQuotaMgr) GetUpdateQuotaEventForAccount(account string) *updateQuotaEvent {
func (mdl *AccountQuotaMgr) GetUpdateQuotaEventForAccount(txHash common.Hash, account string) []*updateQuotaEvent {
mdl.mu.Lock()
defer mdl.mu.Unlock()
l := len(mdl.events[account])
if l == 0 {
return nil
} else {
front := mdl.events[account][0]
mdl.events[account] = mdl.events[account][1:]
return front
}
key := account + txHash.Hex()
//
ans := mdl.events[key]
delete(mdl.events, key)
return ans
}

func (mdl *AccountQuotaMgr) getUpdateQuotaEvent(txLog types.Log) *updateQuotaEvent {
Expand All @@ -72,7 +70,8 @@ func (mdl *AccountQuotaMgr) AddAccountQuota(blockNum int64,
//
updateQuota := mdl.getUpdateQuotaEvent(txLog)
account := updateQuota.CreditAccount.Hex()
mdl.events[account] = append(mdl.events[account], updateQuota)
key := account + txLog.TxHash.Hex()
mdl.events[key] = append(mdl.events[key], updateQuota)
}

// utils
Expand Down
43 changes: 25 additions & 18 deletions models/credit_manager/cm_common/facade_actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,28 +61,35 @@ func (mdl *CommonCMAdapter) fixFacadeActionStructureViaTenderlyCalls(mainCalls [
return
}

func (mdl CommonCMAdapter) updateQuotasWithSessionId(sessionId string, mainCall *ds.FacadeCallNameWithMulticall) {
func (mdl CommonCMAdapter) updateQuotasWithSessionId(sessionId string, txHash common.Hash, mainCall *ds.FacadeCallNameWithMulticall) {
quotaEvents := mdl.Repo.GetAccountQuotaMgr().GetUpdateQuotaEventForAccount(txHash, strings.Split(sessionId, "_")[0])
//
updateQuotaCount := 0
for _, multicall := range mainCall.GetMulticalls() {
sig := hex.EncodeToString(multicall.CallData[:4])
if sig == "712c10ad" { // updateQuota on v3
quotaEvent := mdl.Repo.GetAccountQuotaMgr().GetUpdateQuotaEventForAccount(strings.Split(sessionId, "_")[0])
//
//
mdl.Repo.AddAccountOperation(&schemas.AccountOperation{
TxHash: quotaEvent.TxHash,
BlockNumber: quotaEvent.BlockNumber,
LogId: quotaEvent.Index,
// Borrower: session.Borrower,
SessionId: sessionId,
Dapp: mdl.GetCreditFacadeAddr(),
Action: "UpdateQuota",
Args: &core.Json{"token": quotaEvent.Token, "change": quotaEvent.QuotaChange},
AdapterCall: false,
// Transfers: &core.Transfers{tx.Token: amount},
})
mdl.SetSessionIsUpdated(sessionId)
updateQuotaCount++
}
}
// add quota events to db
if len(quotaEvents) < updateQuotaCount {
log.Infof("Some of the updateQuota events not emitted maybe due to 0 quotaChange. txhash: %s. events:%d, calls:%d ", txHash.Hex(), len(quotaEvents), updateQuotaCount)
}
for _, quotaEvent := range quotaEvents {
mdl.Repo.AddAccountOperation(&schemas.AccountOperation{
TxHash: quotaEvent.TxHash,
BlockNumber: quotaEvent.BlockNumber,
LogId: quotaEvent.Index,
// Borrower: session.Borrower,
SessionId: sessionId,
Dapp: mdl.GetCreditFacadeAddr(),
Action: "UpdateQuota",
Args: &core.Json{"token": quotaEvent.Token, "change": quotaEvent.QuotaChange},
AdapterCall: false,
// Transfers: &core.Transfers{tx.Token: amount},
})
mdl.SetSessionIsUpdated(sessionId)
}
}

// check name
Expand Down Expand Up @@ -113,7 +120,7 @@ func (mdl *CommonCMAdapter) validateAndSaveFacadeActions(version core.VersionTyp
utils.ToJson(eventMulticalls), mainCall.String(), mainEvent.TxHash)
}
// update quota with session based on calls from tenderly and also mark sesssion as updated
mdl.updateQuotasWithSessionId(mainEvent.SessionId, mainCall)
mdl.updateQuotasWithSessionId(mainEvent.SessionId, common.HexToHash(txHash), mainCall)
//
account := strings.Split(mainEvent.SessionId, "_")[0]
for _, event := range eventMulticalls {
Expand Down

0 comments on commit 6ef7323

Please sign in to comment.