Skip to content

Commit

Permalink
feat: extra info
Browse files Browse the repository at this point in the history
  • Loading branch information
harsh jain authored and harsh jain committed Oct 14, 2024
1 parent 5824a1c commit ec260c4
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 38 deletions.
4 changes: 2 additions & 2 deletions debts/price.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ func NewPriceHandler(repo ds.RepositoryI) *PriceHandler {

func (eng *PriceHandler) loadPoolToPriceOracle(lastDebtSync int64, db *gorm.DB) {
data := []schemas.Relation{}
err := db.Raw(`(select * from relations where type='PoolOracle' where block_num <=? order by block_num)`, lastDebtSync).Find(&data).Error
err := db.Raw(`(select * from relations where category='PoolOracle' and block_num <=? order by block_num)`, lastDebtSync).Find(&data).Error
log.CheckFatal(err)
for _, entry := range data {
eng.poolToPriceOracle[entry.Owner] = schemas.PriceOracleT(entry.Dependent)
}

cms := []schemas.CreditManagerState{}
err = db.Raw(`(select address, pool from credit_managers)`).Find(&cms).Error
err = db.Raw(`(select address, pool_address from credit_managers)`).Find(&cms).Error
log.CheckFatal(err)
for _, entry := range cms {
eng.cmToPool[entry.Address] = entry.PoolAddress
Expand Down
15 changes: 10 additions & 5 deletions migrations/000053_v310.up.sql
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
alter table token_oracle add price_oracle varchar(42), add disabled_at integer;
alter table token_oracle drop constraint token_oracle_pkey;

update token_oracle set price_oracle= (select address from sync_adapters where type='PriceOracle' and version=1) where version=1;
update token_oracle set price_oracle= (select address from sync_adapters where type='PriceOracle' and version=2) where version=2;
update token_oracle set price_oracle= (select address from sync_adapters where type='PriceOracle' and version=300) where version=300;

alter table token_oracle add PRIMARY KEY (price_oracle, block_num, token, reserve);
--
alter table price_feeds drop column merged_pf_version, drop column token;

alter table pools add market varchar(42), add price_oracle varchar(42);

Expand All @@ -12,13 +19,11 @@ CREATE TABLE relations (
id SERIAL PRIMARY KEY
);

update pools p set price_oracle=sa.address from sync_adapters sa where type='PriceOracle' and p._version=sa.version;

update token_oracle set price_oracle= (select address from sync_adapters where type='PriceOracle' and version=1) where version=1;
update token_oracle set price_oracle= (select address from sync_adapters where type='PriceOracle' and version=2) where version=2;
update token_oracle set price_oracle= (select address from sync_adapters where type='PriceOracle' and version=300) where version=300;



insert into relations(block_num, owner, dependent, category) (select discovered_at, pool,oracle , 'PoolOracle' from (select address pool from pools where _version=1) l join (select address oracle, discovered_at from sync_adapters where type='PriceOracle' and version=2) on true);
insert into relations(block_num, owner, dependent, category) (select discovered_at, pool,oracle , 'PoolOracle' from (select address pool from pools where _version=1) l join (select address oracle, discovered_at from sync_adapters where type='PriceOracle' and version=1) on true);
-- insert into relations(block_num, owner, dependent, category) (select discovered_at, pool,oracle , 'PoolOracle' from (select address pool from pools where _version=1) l join (select address oracle, discovered_at from sync_adapters where type='PriceOracle' and version=2) on true);
-- insert into relations(block_num, owner, dependent, category) (select discovered_at, pool,oracle , 'PoolOracle' from (select address pool from pools where _version=1) l join (select address oracle, discovered_at from sync_adapters where type='PriceOracle' and version=1) on true);
insert into relations(block_num, owner, dependent, category) (select discovered_at, pool,oracle , 'PoolOracle' from (select address pool from pools where _version=300) l join (select address oracle, discovered_at from sync_adapters where type='PriceOracle' and version=300) on true);
2 changes: 1 addition & 1 deletion models/contract_register/on_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func NewPool(addr string, client core.ClientI, repo ds.RepositoryI, blockNum int
lmRewards := repo.GetAdapter(adapters[0])
lmRewards.(*v3.LMRewardsv3).AddPoolv3(blockNum, addr)
// add pool
return pool_v3.NewPool(addr, client, repo, blockNum, core.NULL_ADDR.Hex(),schemas.PriceOracleT(core.NULL_ADDR.Hex()), core.NewVersion(300))
return pool_v3.NewPool(addr, client, repo, blockNum, core.NULL_ADDR.Hex(), schemas.PriceOracleT(core.NULL_ADDR.Hex()), 300)
}
}
log.Fatalf("Version(%d) of pool can't be created.", version)
Expand Down
37 changes: 18 additions & 19 deletions models/market_configurator/on_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,32 @@ func (mdl *MarketConfigurator) OnLog(txLog types.Log) {
blockNum := int64(txLog.BlockNumber)
switch txLog.Topics[0] {
case core.Topic("CreateMarket(address,address,string,string)"):
// details := mdl.GetDetails()
// if val := details["legacy"]; val == nil {
// details["legacy"] = "set"
// mdl.Details = details
// return
// } // first one is the legacy one is no need to set that.
// create marketpool and pooloracle relations
// add priceoracle adapter and add pool is not present
poolAddr := common.BytesToAddress(txLog.Topics[1][:]).Hex()
poolAdapter := mdl.Repo.GetAdapter(poolAddr)

priceOracleAddr := mdl.GetPriceOracle(poolAddr, blockNum)
mdl.Repo.AddRelation(&schemas.Relation{
Type:"MarketPool",
Owner: mdl.Address,
Type: "MarketPool",
Owner: mdl.Address,
Dependent: poolAddr,
BlockNum: blockNum,
BlockNum: blockNum,
})
mdl.Repo.AddRelation(&schemas.Relation{
Type:"PoolOracle",
Owner: poolAddr,
Type: "PoolOracle",
Owner: poolAddr,
Dependent: priceOracleAddr,
BlockNum: blockNum,
BlockNum: blockNum,
})
//
if priceOracle := mdl.Repo.GetAdapter(priceOracleAddr); priceOracle == nil {
po := po_v3.NewPriceOracle(priceOracleAddr, blockNum, mdl.Client, mdl.Repo)
mdl.Repo.AddSyncAdapter(po)
}
//
poolAdapter := mdl.Repo.GetAdapter(poolAddr)
if poolAdapter == nil {
pool := pool_v3.NewPool(poolAddr, mdl.Client, mdl.Repo, blockNum, mdl.Address, schemas.PriceOracleT(priceOracleAddr), core.NewVersion(310))
pool := pool_v3.NewPool(poolAddr, mdl.Client, mdl.Repo, blockNum, mdl.Address, schemas.PriceOracleT(priceOracleAddr), 310)
mdl.Repo.AddSyncAdapter(pool)
} else {
if poolv3, ok := poolAdapter.(*pool_v3.Poolv3); ok {
Expand All @@ -52,14 +51,14 @@ func (mdl *MarketConfigurator) OnLog(txLog types.Log) {
}
}
case core.Topic("CreateCreditManager(address)"):
cm :=cm_v3.NewCMv3(common.BytesToAddress(txLog.Topics[1][:]).Hex(), mdl.Client, mdl.Repo, blockNum)
cm := cm_v3.NewCMv3(common.BytesToAddress(txLog.Topics[1][:]).Hex(), mdl.Client, mdl.Repo, blockNum)
mdl.Repo.AddSyncAdapter(cm)
}
}

func (mdl *MarketConfigurator) GetPriceOracle(pool string, blockNum int64) string {
hash :=common.HexToHash(pool)
data , err:=core.CallFuncWithExtraBytes(mdl.Client, "01374518", common.HexToAddress(mdl.Address) ,blockNum, hash[:])
hash := common.HexToHash(pool)
data, err := core.CallFuncWithExtraBytes(mdl.Client, "01374518", common.HexToAddress(mdl.Address), blockNum, hash[:])
log.CheckFatal(err)
return common.BytesToAddress(data).Hex()
}
return common.BytesToAddress(data).Hex()
}
15 changes: 9 additions & 6 deletions models/pool/pool_v3/model.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package pool_v3

import (
"fmt"

"github.com/Gearbox-protocol/sdk-go/artifacts/poolv3"
"github.com/Gearbox-protocol/sdk-go/core"
"github.com/Gearbox-protocol/sdk-go/core/schemas"
Expand Down Expand Up @@ -33,7 +35,7 @@ func (pool *Poolv3) GetRepayEvent() *schemas.PoolLedger {
return ans
}

func NewPool(addr string, client core.ClientI, repo ds.RepositoryI, discoveredAt int64, market string, priceOracle schemas.PriceOracleT, version core.VersionType) *Poolv3 {
func NewPool(addr string, client core.ClientI, repo ds.RepositoryI, discoveredAt int64, market string, priceOracle schemas.PriceOracleT, version int16) *Poolv3 {
syncAdapter := ds.NewSyncAdapter(addr, ds.Pool, discoveredAt, client, repo)
if syncAdapter.Details == nil {
syncAdapter.Details = core.Json{}
Expand All @@ -57,9 +59,9 @@ func NewPool(addr string, client core.ClientI, repo ds.RepositoryI, discoveredAt
Address: pool.Address,
DieselToken: dieselToken,
UnderlyingToken: underlyingToken.Hex(),
Version: core.NewVersion(300),
Market: market,
PriceOracle: priceOracle,
Version: core.NewVersion(version),
Market: market,
PriceOracle: priceOracle,
Name: func() string {
con, err := poolv3.NewPoolv3(common.HexToAddress(addr), client)
log.CheckFatal(err)
Expand All @@ -68,6 +70,7 @@ func NewPool(addr string, client core.ClientI, repo ds.RepositoryI, discoveredAt
return name
}(),
})
pool.Details["actualV"] = fmt.Sprintf("%d", version)

// create a pool stat snapshot at first log of the pool
pool.onBlockChangeInternally()
Expand All @@ -86,8 +89,8 @@ func NewPoolFromAdapter(adapter *ds.SyncAdapter) *Poolv3 {
log.CheckFatal(err)
return contract
}(),
zappers: &Zappers{},
CMDebtHandler: NewCMDebtHandler(adapter.GetDetailsByKey("actualV") == "310"),
zappers: &Zappers{},
CMDebtHandler: NewCMDebtHandler(!(adapter.Details["actualV"] == nil || adapter.GetDetailsByKey("actualV") != "310")), // v310 is inverse of this
}
obj.setPoolQuotaKeeper()
data := &schemas.PoolState{}
Expand Down
9 changes: 4 additions & 5 deletions repository/handlers/prev_price.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func (repo *PrevPriceStore) loadPrevPriceFeed(db *gorm.DB) {
defer utils.Elapsed("loadPrevPriceFeed")()
data := []*schemas.PriceFeed{}
err := db.Raw(`SELECT * FROM
(SELECT distinct on(token, merged_pf_version) * FROM price_feeds ORDER BY token, merged_pf_version, block_num DESC) t ORDER BY block_num`).Find(&data).Error
(SELECT distinct on(feed) * FROM price_feeds ORDER BY feed, block_num DESC) t ORDER BY block_num`).Find(&data).Error
log.CheckFatal(err)
for _, pf := range data {
repo.canPFAdded(pf)
Expand All @@ -51,8 +51,8 @@ func (repo *PrevPriceStore) loadPrevPriceFeed(db *gorm.DB) {
// isUSD -> token -> feed -> price feed object
func (repo *PrevPriceStore) canPFAdded(pf *schemas.PriceFeed) bool {
oldPF := repo.prevPriceFeeds[pf.Feed]
if oldPF != nil {
if oldPF.BlockNumber >= pf.BlockNumber {
if oldPF != nil {
if oldPF.BlockNumber >= pf.BlockNumber {
log.Warnf("oldPF %s.\n NewPF %s.", oldPF, pf)
return false
}
Expand All @@ -64,9 +64,8 @@ func (repo *PrevPriceStore) canPFAdded(pf *schemas.PriceFeed) bool {
return true
}


func (repo *PrevPriceStore) getCurrentPrice(tokenToFeed map[string]*schemas.TokenOracle) (ans []*schemas.TokenCurrentPrice) {
for _, entry:= range tokenToFeed {
for _, entry := range tokenToFeed {
price := repo.prevPriceFeeds[entry.Feed]
ans = append(ans, &schemas.TokenCurrentPrice{
PriceBI: price.PriceBI,
Expand Down
52 changes: 52 additions & 0 deletions scripts/14_merge_price_feed/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package main

import (
"github.com/Gearbox-protocol/sdk-go/log"
"github.com/Gearbox-protocol/third-eye/config"
"github.com/Gearbox-protocol/third-eye/repository"
)

func main() {
cfg := config.NewConfig()
db := repository.NewDBClient(cfg)
b := &struct {
BlockNum int64 `gorm:"column:block_num"`
}{}
err := db.Raw("select min (block_num) block_num from price_feeds").Find(b).Error
log.CheckFatal(err)
b.BlockNum = b.BlockNum - 1
for {
start := b.BlockNum + 1
end := b.BlockNum + 500_000
// log.Info(start, end)
tx := db.Begin()
//
err := tx.Exec(`create table jj as select distinct on (feed, block_num) (block_num) block_num, feed, price_bi,
price, round_id from price_feeds where block_num >=? and block_num <=? order by block_num ,feed`, start, end)
log.CheckFatal(err.Error)
log.Info("create", err.RowsAffected)
if err.RowsAffected == 0 {
err = tx.Exec(`drop table jj`)
log.CheckFatal(err.Error)
log.Info("drop")
tx.Commit()
return
}
err = tx.Exec(`delete from price_feeds where block_num >=? and block_num <=?`, start, end)
log.CheckFatal(err.Error)
log.Info("delete", err.RowsAffected)
//
err = tx.Exec(`insert into price_feeds(block_num , feed, price_bi, price , round_id) select * from jj`)
log.CheckFatal(err.Error)
log.Info("insert", err.RowsAffected)
//
//
err = tx.Exec(`drop table jj`)
log.CheckFatal(err.Error)
log.Info("drop")
tx.Commit()
//
log.Info("saved till", end)
b.BlockNum += 500_000
}
}
45 changes: 45 additions & 0 deletions scripts/15_check/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package main

import (
"github.com/Gearbox-protocol/sdk-go/core/schemas"
"github.com/Gearbox-protocol/sdk-go/log"
"github.com/Gearbox-protocol/sdk-go/utils"
"github.com/Gearbox-protocol/third-eye/config"
"github.com/Gearbox-protocol/third-eye/repository"
)

func main() {
db1 := repository.NewDBClient(&config.Config{
DatabaseUrl: "postgres://postgres:complex_password_123@144.91.114.166:5432,37.60.225.176:5432/gearbox?connect_timeout=5",
})

db2 := repository.NewDBClient(&config.Config{
DatabaseUrl: "host=84.247.174.187 user=debian password=123Sample dbname=tmp_anvil",
})

var b int64 = 13810899
for {
start := b
end := start + 500_000
data := []*schemas.Debt{}
err := db1.Raw(`select * from debts where block_num > ? and block_num <=?`, start, end).Find(&data).Error
log.CheckFatal(err)

log.Info("loaded", len(data))
for ind, debt := range data {
second := &schemas.Debt{}
err := db2.Raw(`select * from debts where block_num =? and session_id=?`, debt.BlockNumber, debt.SessionId).Find(second).Error
log.CheckFatal(err)
if second.CalTotalValueBI.Cmp(debt.CalTotalValueBI) != 0 || second.CalHealthFactor.Cmp(debt.CalHealthFactor) != 0 {
log.Fatal(utils.ToJson(debt))
log.Fatal(utils.ToJson(second))
}
if ind%1000 == 0 {
log.Info("checked till", ind)
}
}
log.Info("checked till blockNum", end)
b += 500_000
}

}

0 comments on commit ec260c4

Please sign in to comment.