Skip to content

Commit e64147e

Browse files
committed
feat: poolCompressor, tvl calulation, AfterSyncHook on addrprovider
1 parent 7bef27d commit e64147e

File tree

23 files changed

+273
-140
lines changed

23 files changed

+273
-140
lines changed

debts/engine.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ func (eng *DebtEngine) CalculateDebt() {
167167
log.Fatal("State for pool not found for address: ", pool)
168168
}
169169
//
170-
market := state.(*schemas.PoolState).UnderlyingToken
170+
market := state.(*schemas.PoolState).Market
171171
marketToTvl.add(market, caValue, 0, 0)
172172
}
173173

@@ -212,7 +212,6 @@ func (eng *DebtEngine) createTvlSnapshots(blockNum int64, marketToTvl MarketToTv
212212
// if eng.lastTvlSnapshot != nil && blockNum-eng.lastTvlSnapshot.BlockNum < core.NoOfBlocksPerHr { // tvl snapshot every hour
213213
// return
214214
// }
215-
log.Info("tvl for block", blockNum)
216215
for _, entry := range eng.poolLastInterestData {
217216
adapter := eng.repo.GetAdapter(entry.Address)
218217
state := adapter.GetUnderlyingState()
@@ -237,8 +236,10 @@ func (eng *DebtEngine) createTvlSnapshots(blockNum int64, marketToTvl MarketToTv
237236
marketToTvl.add(state.(*schemas.PoolState).Market, 0, availLiq, expectedLiqInUSD)
238237
}
239238
// save as last tvl snapshot and add to db
239+
addedMarket := []string{}
240240
for market, details := range marketToTvl {
241241
if lastTvlBlock, ok := eng.marketTolastTvlBlock[market]; ok && blockNum-lastTvlBlock < core.BlockPer(core.GetBaseChainId(eng.client), time.Hour) { // only snap her hr.
242+
addedMarket = append(addedMarket, market)
242243
continue
243244
}
244245
//
@@ -252,6 +253,9 @@ func (eng *DebtEngine) createTvlSnapshots(blockNum int64, marketToTvl MarketToTv
252253
eng.tvlSnapshots = append(eng.tvlSnapshots, tvl)
253254
eng.marketTolastTvlBlock[tvl.Market] = tvl.BlockNum
254255
}
256+
if len(addedMarket) > 0 {
257+
log.Infof("%d:Tvl snapshot added for market %s", blockNum, addedMarket)
258+
}
255259
}
256260

257261
func (eng *DebtEngine) ifAccountLiquidated(sessionId, cmAddr string, closedAt int64, status int) {

ds/dc_wrapper/wrapper.go

Lines changed: 91 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import (
1414
dcv2 "github.com/Gearbox-protocol/sdk-go/artifacts/dataCompressor/dataCompressorv2"
1515
"github.com/Gearbox-protocol/sdk-go/artifacts/dataCompressor/mainnet"
1616
dcv3 "github.com/Gearbox-protocol/sdk-go/artifacts/dataCompressorv3"
17-
"github.com/Gearbox-protocol/sdk-go/artifacts/marketCompressor"
1817
"github.com/Gearbox-protocol/sdk-go/artifacts/multicall"
18+
"github.com/Gearbox-protocol/sdk-go/artifacts/poolCompressor"
1919
"github.com/Gearbox-protocol/sdk-go/core"
2020
"github.com/Gearbox-protocol/sdk-go/log"
2121
"github.com/Gearbox-protocol/sdk-go/pkg/dc"
@@ -158,19 +158,19 @@ func (dcw *DataCompressorWrapper) addDataCompressorv300(version core.VersionType
158158
}
159159

160160
func (dcw *DataCompressorWrapper) AddCompressorType(addr common.Address, cType CompressorType, discoveredAt int64) {
161-
if !utils.Contains([]CompressorType{MARKET_COMPRESSOR, CREDIT_ACCOUNT_COMPRESSOR}, cType) {
161+
if !utils.Contains([]CompressorType{MARKET_COMPRESSOR, CREDIT_ACCOUNT_COMPRESSOR, POOL_COMPRESSOR}, cType) {
162162
log.Fatal("ctype is wrong, ", cType)
163163
}
164164
if len(dcw.compressorByBlock[cType]) > 0 {
165165
last := dcw.compressorByBlock[cType][len(dcw.compressorByBlock[cType])-1]
166166
if last.block > discoveredAt {
167167
log.Fatalf("last %s has blocknum more than (%s) and new addr is %s", last, discoveredAt, addr)
168168
}
169-
dcw.compressorByBlock[cType] = append(dcw.compressorByBlock[cType], addressAndBlock{
170-
address: addr,
171-
block: discoveredAt,
172-
})
173169
}
170+
dcw.compressorByBlock[cType] = append(dcw.compressorByBlock[cType], addressAndBlock{
171+
address: addr,
172+
block: discoveredAt,
173+
})
174174
}
175175

176176
func (dcw *DataCompressorWrapper) LoadMultipleDC(multiDCs interface{}) {
@@ -212,8 +212,8 @@ func (dcw *DataCompressorWrapper) LoadMultipleDC(multiDCs interface{}) {
212212
type CompressorType string
213213

214214
const (
215-
MARKET_COMPRESSOR CompressorType = "MARKET"
216-
// CM_COMPRESSOR CompressorType = "CM"
215+
MARKET_COMPRESSOR CompressorType = "MARKET"
216+
POOL_COMPRESSOR CompressorType = "POOL"
217217
CREDIT_ACCOUNT_COMPRESSOR CompressorType = "ACCOUNT"
218218
)
219219

@@ -399,15 +399,17 @@ func (dcw *DataCompressorWrapper) GetCreditManagerData(version core.VersionType,
399399
if err != nil {
400400
return dc.CMCallData{}, err
401401
}
402-
type debts struct {
402+
debt := struct {
403403
MinDebt *big.Int
404404
MaxDebt *big.Int
405-
}
406-
cmData := *abi.ConvertType(out[0], new(debts)).(*debts)
405+
}{}
406+
debt.MinDebt = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
407+
debt.MaxDebt = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
408+
// cmData := *abi.ConvertType(out[0], new(debts)).(*debts)
407409
return dc.CMCallData{
408410
Addr: _creditManager,
409-
MinDebt: (*core.BigInt)(cmData.MinDebt),
410-
MaxDebt: (*core.BigInt)(cmData.MaxDebt),
411+
MinDebt: (*core.BigInt)(debt.MinDebt),
412+
MaxDebt: (*core.BigInt)(debt.MaxDebt),
411413
}, nil
412414
case DCV3:
413415
out, err := core.GetAbi("DataCompressorv3").Unpack("getCreditManagerData", bytes)
@@ -446,61 +448,85 @@ type PoolZapperInfo struct {
446448
}
447449

448450
// zapper info from v300 onwards
449-
func (dcw *DataCompressorWrapper) GetZapperInfo(blockNum int64, poolAddr ...common.Address) (ans []PoolZapperInfo, found bool) {
450-
key, compressor := dcw.GetKeyAndAddress(core.NewVersion(300), blockNum, MARKET_COMPRESSOR)
451+
func (dcw *DataCompressorWrapper) getZapperInfov3(blockNum int64, poolAddrs ...common.Address) ([]PoolZapperInfo, error) {
452+
compressor, found := dcw.GetLatestv3DC()
453+
if !found {
454+
return nil, nil
455+
}
451456
opts := &bind.CallOpts{BlockNumber: big.NewInt(blockNum)}
452-
switch key {
453-
case DCV310:
454-
marketConfigs := GetMarketConfigurators()
455-
con, err := marketCompressor.NewMarketCompressor(compressor, dcw.client)
456-
log.CheckFatal(err)
457-
markets, err := con.GetMarkets(opts, marketCompressor.MarketFilter{Pools: poolAddr})
458-
for _, market := range markets {
459-
if !utils.Contains(marketConfigs, market.Configurator) {
460-
continue
461-
}
462-
obj := &PoolZapperInfo{
463-
Addr: market.Pool.BaseParams.Addr,
464-
Underlying: market.Pool.Underlying,
465-
DieselToken: market.Pool.BaseParams.Addr,
466-
}
467-
for _, zapper := range market.Zappers {
468-
obj.Zappers = append(obj.Zappers, dcv3.ZapperInfo{
469-
Zapper: zapper.BaseParams.Addr,
470-
TokenIn: zapper.TokenIn.Addr,
471-
TokenOut: zapper.TokenOut.Addr,
472-
})
457+
con, err := dcv3.NewDataCompressorv3(compressor, dcw.client)
458+
log.CheckFatal(err)
459+
poolList := []dcv3.PoolData{}
460+
zapperInfo := []PoolZapperInfo{}
461+
if len(poolAddrs) != 0 {
462+
for _, addr := range poolAddrs {
463+
data, err := con.GetPoolData(opts, addr)
464+
if err != nil {
465+
return nil, fmt.Errorf("pool ZapperInfo not found in dc %d: %v", blockNum, poolAddrs)
473466
}
474-
ans = append(ans, *obj)
467+
poolList = append(poolList, data)
475468
}
476-
return ans, true
477-
case DCV3:
478-
con, err := dcv3.NewDataCompressorv3(compressor, dcw.client)
469+
} else {
470+
var err error
471+
poolList, err = con.GetPoolsV3List(nil)
479472
log.CheckFatal(err)
480-
poolList := []dcv3.PoolData{}
481-
if len(poolAddr) != 0 {
482-
for _, addr := range poolAddr {
483-
data, err := con.GetPoolData(opts, addr)
484-
log.CheckFatal(err)
485-
poolList = append(poolList, data)
486-
}
487-
} else {
488-
var err error
489-
poolList, err = con.GetPoolsV3List(nil)
490-
log.CheckFatal(err)
473+
}
474+
for _, pool := range poolList {
475+
obj := &PoolZapperInfo{
476+
Addr: pool.Addr,
477+
Underlying: pool.Underlying,
478+
DieselToken: pool.DieselToken,
479+
Zappers: pool.Zappers,
491480
}
492-
for _, pool := range poolList {
493-
obj := &PoolZapperInfo{
494-
Addr: pool.Addr,
495-
Underlying: pool.Underlying,
496-
DieselToken: pool.DieselToken,
497-
Zappers: pool.Zappers,
498-
}
499-
ans = append(ans, *obj)
481+
zapperInfo = append(zapperInfo, *obj)
482+
}
483+
return zapperInfo, nil
484+
}
485+
486+
func (dcw *DataCompressorWrapper) GetZapperInfo(blockNum int64, poolAddrs ...common.Address) (ans []PoolZapperInfo) {
487+
key, _ := dcw.GetKeyAndAddress(core.NewVersion(300), blockNum, MARKET_COMPRESSOR)
488+
switch key {
489+
case DCV310:
490+
data, err := dcw.getZapperInfov3(blockNum, poolAddrs...)
491+
if err != nil {
492+
log.Warn(err)
500493
}
494+
return data
495+
// marketConfigs := GetMarketConfigurators()
496+
// con, err := marketCompressor.NewMarketCompressor(compressor, dcw.client)
497+
// log.CheckFatal(err)
498+
// poolAddrs = []common.Address{}
499+
// markets, err := con.GetMarkets(opts, marketCompressor.MarketFilter{Pools: poolAddrs})
500+
// log.CheckFatal(err)
501+
// for _, market := range markets {
502+
// log.Info(market.Configurator, market.Pool.BaseParams.Addr)
503+
// if !utils.Contains(marketConfigs, market.Configurator) {
504+
// continue
505+
// }
506+
// obj := &PoolZapperInfo{
507+
// Addr: market.Pool.BaseParams.Addr,
508+
// Underlying: market.Pool.Underlying,
509+
// DieselToken: market.Pool.BaseParams.Addr,
510+
// }
511+
// for _, zapper := range market.Zappers {
512+
// obj.Zappers = append(obj.Zappers, dcv3.ZapperInfo{
513+
// Zapper: zapper.BaseParams.Addr,
514+
// TokenIn: zapper.TokenIn.Addr,
515+
// TokenOut: zapper.TokenOut.Addr,
516+
// })
517+
// }
518+
// ans = append(ans, *obj)
519+
// }
520+
// log.Infof("%s: zapper info, v310: %d pooladdr:%v", log.DetectFuncAtStackN(2), len(data), poolAddrs)
521+
// return ans
522+
case DCV3:
523+
data, notv3 := dcw.getZapperInfov3(blockNum, poolAddrs...)
524+
log.CheckFatal(notv3)
525+
log.Infof("%s: zapper info, v3:%d pooladdr:%v", log.DetectFuncAtStackN(2), len(data), poolAddrs)
526+
return data
501527
default:
502528
// log.Fatal("No data compressor found for zapper info")
503-
return nil, false
529+
return nil
504530
}
505531
}
506532

@@ -510,12 +536,12 @@ func (dcw *DataCompressorWrapper) GetPoolData(version core.VersionType, blockNum
510536
resultFn func([]byte) (dc.PoolCallData, error),
511537
errReturn error) {
512538
//
513-
key, dcAddr := dcw.GetKeyAndAddress(version, blockNum, MARKET_COMPRESSOR)
539+
key, dcAddr := dcw.GetKeyAndAddress(version, blockNum, POOL_COMPRESSOR)
514540
switch key {
515541
case NODC:
516542
errReturn = NO_DC_FOUND_ERR
517543
case DCV310:
518-
data, err := core.GetAbi("MarketCompressor").Pack("getMarketData0", _pool)
544+
data, err := core.GetAbi("PoolCompressor").Pack("getPoolState", _pool)
519545
call, errReturn = multicall.Multicall2Call{
520546
Target: dcAddr,
521547
CallData: data,
@@ -553,12 +579,12 @@ func (dcw *DataCompressorWrapper) GetPoolData(version core.VersionType, blockNum
553579
case NODC:
554580
log.Fatal("No data compressor found for pool data")
555581
case DCV310:
556-
out, err := core.GetAbi("MarketCompressor").Unpack("getMarketData0", bytes)
582+
out, err := core.GetAbi("PoolCompressor").Unpack("getPoolState", bytes)
557583
if err != nil {
558584
return dc.PoolCallData{}, err
559585
}
560-
poolData := *abi.ConvertType(out[0], new(marketCompressor.MarketData)).(*marketCompressor.MarketData)
561-
return dc.GetPoolDataFromDCCall(poolData.Pool)
586+
poolData := *abi.ConvertType(out[0], new(poolCompressor.PoolState)).(*poolCompressor.PoolState)
587+
return dc.GetPoolDataFromDCCall(poolData)
562588
case DCV3:
563589
out, err := core.GetAbi("DataCompressorv3").Unpack("getPoolData", bytes)
564590
if err != nil {

ds/repo.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package ds
22

33
import (
44
"math/big"
5+
"reflect"
6+
"strconv"
57
"time"
68

79
"github.com/Gearbox-protocol/sdk-go/core"
@@ -154,3 +156,19 @@ func IsTestnet(client core.ClientI) bool {
154156
chainid := core.GetChainId(client)
155157
return log.GetNetworkName(chainid) != log.GetBaseNet(chainid)
156158
}
159+
160+
func ToInt(i interface{}) int64 {
161+
switch i := i.(type) {
162+
case string:
163+
x, err := strconv.ParseInt(i, 10, 64)
164+
log.WrapErrWithLineN(err, 3)
165+
return x
166+
case float64:
167+
return int64(i)
168+
case int64:
169+
return int64(i)
170+
default:
171+
log.Fatal("", reflect.TypeOf(i))
172+
return 0
173+
}
174+
}

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.23
55
// toolchain go1.23.2
66

77
require (
8-
github.com/Gearbox-protocol/sdk-go v0.0.0-20250402073851-44589b7f10df
8+
github.com/Gearbox-protocol/sdk-go v0.0.0-20250403170805-67506ff30e20
99
github.com/ethereum/go-ethereum v1.13.14
1010
github.com/go-playground/validator/v10 v10.4.1
1111
github.com/google/go-cmp v0.6.0
@@ -84,6 +84,6 @@ require (
8484

8585
replace github.com/btcsuite/btcd => github.com/btcsuite/btcd v0.22.1
8686

87-
replace github.com/Gearbox-protocol/sdk-go v0.0.0-20250402070712-3f6d98a522ee => ../sdk-go
87+
replace github.com/Gearbox-protocol/sdk-go v0.0.0-20250402073851-44589b7f10df => ../sdk-go
8888

8989
replace github.com/ethereum/go-ethereum v1.13.14 => github.com/OffchainLabs/go-ethereum v1.13.4-0.20240313010929-e5d8587e7227

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ
66
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
77
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
88
github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
9-
github.com/Gearbox-protocol/sdk-go v0.0.0-20250402073851-44589b7f10df h1:5El7QxuRDMNLy0uAbjICMA1Mzax/hTL8ffLM7HuF7K0=
10-
github.com/Gearbox-protocol/sdk-go v0.0.0-20250402073851-44589b7f10df/go.mod h1:MZsiiSAwDdnHY6GEILYtHEqhb9wmbUUE34UBQgNlUyM=
9+
github.com/Gearbox-protocol/sdk-go v0.0.0-20250403170805-67506ff30e20 h1:PUfrZ/We3p4JByvN3cKJXZ1gzJOLpv7tf4rc71q1LBI=
10+
github.com/Gearbox-protocol/sdk-go v0.0.0-20250403170805-67506ff30e20/go.mod h1:MZsiiSAwDdnHY6GEILYtHEqhb9wmbUUE34UBQgNlUyM=
1111
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
1212
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
1313
github.com/OffchainLabs/go-ethereum v1.13.4-0.20240313010929-e5d8587e7227 h1:+/3TrD+q+BP36jGj2Bycdmrc/joKLNbc5ImePQzKRLM=

jsonnet/sync_adapters/adapters.jsonnet

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
'3': '#PriceOracle_1',
1212
'5': '#PriceOracle_2',
1313
},
14+
all: {
15+
'#AddressProvider_1': 10,
16+
},
1417
},
1518
disabled: false,
1619
disabled_at: 0,

0 commit comments

Comments
 (0)