Skip to content

Commit cbe0d21

Browse files
committed
fix: borrowed amount and script to backfill
1 parent 04f4af2 commit cbe0d21

File tree

3 files changed

+87
-2
lines changed

3 files changed

+87
-2
lines changed

models/credit_manager/cm_v3/v3.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,16 @@ func (mdl *CMv3) checkLogV3(txLog types.Log) {
9292
Args: &core.Json{},
9393
Action: "StartMultiCall(address,address)",
9494
}, mdl.Address)
95-
case core.Topic("FinishMultiCall()"):
95+
case core.Topic("FinishMultiCall()"): // debts are now always in multicalls
9696
poolv3 := mdl.Repo.GetAdapter(mdl.State.PoolAddress).(*pool_v3.Poolv3)
9797
debts := poolv3.GetDebt(txLog.TxHash, mdl.Address, txLog.Index)
98+
// log.Info(debts)
99+
for _, debt := range debts {
100+
sessionId, borrower := mdl.GetSessionIdAndBorrower(debt.Account)
101+
mdl.PoolBorrow(&txLog, sessionId, borrower, debt.Amount)
102+
// mdl.onIncreaseBorrowedAmountV3(&txLog, debt.Account,
103+
// debt.Amount, "IncreaseDebt")
104+
}
98105
mdl.MulticallMgr.End(txLog.Index, debts, mdl.GetUnderlyingToken(), mdl.Address)
99106
case core.Topic("IncreaseDebt(address,uint256)"): // works for v300 for V3 10: The increased or decreased debt event is not emitted. We can check that using the debt that is emitted from the pool. In the finish_multicall we are emitting that call. So this function is just above you.
100107
increaseBorrowEvent, err := mdl.facadeContractv3.ParseIncreaseDebt(txLog)

models/credit_manager/cm_v3/v3operation.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (mdl *CMv3) onOpenCreditAccountV3(txLog *types.Log, onBehalfOf, account str
4343
Dapp: cfAddr,
4444
}
4545
mdl.MulticallMgr.AddOpenEvent(accountOperation)
46-
mdl.PoolBorrow(txLog, sessionId, onBehalfOf, borrowAmount)
46+
// mdl.PoolBorrow(txLog, sessionId, onBehalfOf, borrowAmount)
4747
// add account
4848
mdl.AddCreditAccount(account, sessionId, onBehalfOf)
4949

scripts/18_fix_borrow/main.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package main
2+
3+
import (
4+
"math/big"
5+
6+
"github.com/Gearbox-protocol/sdk-go/core"
7+
"github.com/Gearbox-protocol/sdk-go/log"
8+
"github.com/Gearbox-protocol/sdk-go/utils"
9+
"github.com/Gearbox-protocol/third-eye/config"
10+
"github.com/Gearbox-protocol/third-eye/repository"
11+
)
12+
13+
type Event struct {
14+
CreditManager string `gorm:"column:credit_manager"`
15+
BlockNum int64 `gorm:"column:block_num"`
16+
Action string `gorm:"column:action"`
17+
Args *core.Json `gorm:"column:args"`
18+
}
19+
20+
type cMStats struct {
21+
CreditManager string `gorm:"column:credit_manager"`
22+
Decimals int8 `gorm:"column:decimals"`
23+
BlockNum int64 `gorm:"column:block_num"`
24+
TotalBorrowed float64 `gorm:"column:total_borrowed"`
25+
TotalBorrowedBi *core.BigInt `gorm:"column:total_borrowed_bi"`
26+
}
27+
28+
func main() {
29+
cfg := config.NewConfig()
30+
// client := ethclient.NewEthClient(cfg)
31+
db := repository.NewDBClient(cfg)
32+
allstats := []*cMStats{}
33+
err := db.Raw(`select cms.credit_manager, cms.block_num, cms.total_borrowed, t.decimals, cms.total_borrowed_bi from credit_manager_stats cms join credit_managers cm on cm.address=cms.credit_manager join tokens t on t.address=cm.underlying_token where cms.credit_manager in ('0xec76E7652E1B94bd2A4E7A9372F8359Dd571eF4C','0x9A0fDF7CdAb4604FC27ebeab4b3D57BD825e8ebe','0x732F28d627f3F5cfb599A539F58Fa7CBA6698297','0x63Ae843b332DE97c55a007e27c5697c2B8B81627','0xfe83807DeC8C6a4f4D93b7DBD6340771753e2Cd8','0x0Fafa30Cd35bc6a48ff2B40694d4A73d4F4BcC92','0x0aF1324369e3fD78325Fab0CB62EeA19F3e4ebf0','0x79C6C1ce5B12abCC3E407ce8C160eE1160250921','0x8c118E8C20CEbbaa2467b735BBB8B13d614e6608','0xAf5A052BA444Ed90F887D40088548285df33A603','0xbCd2fFaC58189E57334Bb63253AcbF34D776DE53','0xb79d6544839d169869476589d2e54014A074317b') order by block_num`).Find(&allstats).Error
34+
log.CheckFatal(err)
35+
log.Info(len(allstats))
36+
37+
query := `select a.args, a.block_num, cs.credit_manager, a.action from (select args, session_id, block_num, action from account_operations where action like 'Increase%' or action like 'Decrease%') a join credit_sessions cs on cs.id=a.session_id where cs.credit_manager in ('0xec76E7652E1B94bd2A4E7A9372F8359Dd571eF4C','0x9A0fDF7CdAb4604FC27ebeab4b3D57BD825e8ebe','0x732F28d627f3F5cfb599A539F58Fa7CBA6698297','0x63Ae843b332DE97c55a007e27c5697c2B8B81627','0xfe83807DeC8C6a4f4D93b7DBD6340771753e2Cd8','0x0Fafa30Cd35bc6a48ff2B40694d4A73d4F4BcC92','0x0aF1324369e3fD78325Fab0CB62EeA19F3e4ebf0','0x79C6C1ce5B12abCC3E407ce8C160eE1160250921','0x8c118E8C20CEbbaa2467b735BBB8B13d614e6608','0xAf5A052BA444Ed90F887D40088548285df33A603','0xbCd2fFaC58189E57334Bb63253AcbF34D776DE53','0xb79d6544839d169869476589d2e54014A074317b') order by block_num ;`
38+
39+
events := []Event{}
40+
err = db.Raw(query).Find(&events).Error
41+
log.CheckFatal(err)
42+
eventsI := 0
43+
borrowed := map[string]*big.Int{}
44+
for _, cmstats := range allstats {
45+
if borrowed[cmstats.CreditManager] == nil {
46+
borrowed[cmstats.CreditManager] = new(big.Int)
47+
}
48+
for eventsI < len(events) && events[eventsI].BlockNum <= cmstats.BlockNum {
49+
data := (*events[eventsI].Args)["amount"]
50+
a := new(big.Float).SetFloat64(data.(float64))
51+
amount, _ := a.Int(nil)
52+
// amount, _ := new(big.Int).SetString(x, 10)
53+
if events[eventsI].Action[:8] == "Decrease" {
54+
amount = new(big.Int).Neg(amount)
55+
}
56+
borrowed[cmstats.CreditManager] = new(big.Int).Add(borrowed[cmstats.CreditManager], amount)
57+
eventsI++
58+
}
59+
cmstats.TotalBorrowedBi = (*core.BigInt)(borrowed[cmstats.CreditManager])
60+
cmstats.TotalBorrowed = utils.GetFloat64Decimal(borrowed[cmstats.CreditManager], cmstats.Decimals)
61+
}
62+
63+
for ind, stats := range allstats {
64+
if ind%100 == 0 {
65+
log.Info(ind, len(allstats))
66+
}
67+
log.Info(stats.CreditManager, stats.BlockNum, stats.TotalBorrowed, stats.TotalBorrowedBi)
68+
err = db.Exec(`update credit_manager_stats set total_borrowed=?, total_borrowed_bi=? where credit_manager=? and block_num=?`, stats.TotalBorrowed, stats.TotalBorrowedBi, stats.CreditManager, stats.BlockNum).Error
69+
log.CheckFatal(err)
70+
}
71+
for cm, amount := range borrowed {
72+
decimals := &cMStats{}
73+
err = db.Raw(`select t.decimals from credit_managers cm join tokens t on t.address=cm.underlying_token where cm.address=?`, cm).Find(decimals).Error
74+
log.CheckFatal(err)
75+
err = db.Exec(`update credit_managers set total_borrowed_bi=?, total_borrowed=? where address=?`, (*core.BigInt)(amount), utils.GetFloat64Decimal(amount, decimals.Decimals), cm).Error
76+
log.CheckFatal(err)
77+
}
78+
}

0 commit comments

Comments
 (0)