@@ -17,59 +17,65 @@ import (
1717 "github.com/Gearbox-protocol/third-eye/models/price_oracle/po_v3"
1818)
1919
20+ func (mdl * ContractRegister ) addCM (blockNum int64 , cmAddr string ) {
21+ cmAdapter := mdl .Repo .GetAdapter (cmAddr )
22+ if cmAdapter == nil {
23+ cm := NewCM (cmAddr , mdl .Client , mdl .Repo , blockNum )
24+ mdl .Repo .AddSyncAdapter (cm )
25+ }
26+ }
27+ func (mdl * ContractRegister ) poolToMarketAndPriceOracleRelation (blockNum int64 , poolAddr , priceOracleAddr string ) {
28+ marketAddr := mdl .GetDetailsByKey ("MARKET" )
29+ mdl .Repo .AddRelation (& schemas.Relation {
30+ Type : "MarketPool" ,
31+ Owner : marketAddr , //
32+ Dependent : poolAddr ,
33+ BlockNum : blockNum ,
34+ })
35+ mdl .Repo .AddRelation (& schemas.Relation {
36+ Type : "PoolOracle" ,
37+ Owner : poolAddr ,
38+ Dependent : priceOracleAddr ,
39+ BlockNum : blockNum ,
40+ })
41+ poolAdapter := mdl .Repo .GetAdapter (poolAddr )
42+ if poolv3 , ok := poolAdapter .(* pool_v3.Poolv3 ); ok {
43+ poolv3 .State .Market = mdl .Address
44+ poolv3 .State .PriceOracle = schemas .PriceOracleT (priceOracleAddr )
45+ } else {
46+ log .Fatalf ("the pool by the address(%s) is not poolv3" , poolAddr )
47+ }
48+ if priceOracle := mdl .Repo .GetAdapter (priceOracleAddr ); priceOracle == nil {
49+ po := po_v3 .NewPriceOracle (priceOracleAddr , blockNum , mdl .Client , mdl .Repo )
50+ mdl .Repo .AddSyncAdapter (po )
51+ }
52+ }
2053func (mdl * ContractRegister ) OnLog (txLog types.Log ) {
2154 blockNum := int64 (txLog .BlockNumber )
2255 switch txLog .Topics [0 ] {
2356 case core .Topic ("NewPoolAdded(address)" ):
2457 address := common .HexToAddress (txLog .Topics [1 ].Hex ()).Hex ()
25- // log.Info("new pool", address)
26- obj := NewPool (address , mdl .SyncAdapter .Client , mdl .Repo , blockNum )
27- mdl .Repo .AddSyncAdapter (obj )
58+ mdl .addNewPool (address , blockNum , core .NULL_ADDR .Hex (), core .NULL_ADDR )
59+ //
2860 case core .Topic ("NewCreditManagerAdded(address)" ):
2961 address := common .HexToAddress (txLog .Topics [1 ].Hex ()).Hex ()
30- // log.Info("new cm", address)
31- cm := NewCM (address , mdl .SyncAdapter .Client , mdl .Repo , blockNum )
32- mdl .Repo .AddSyncAdapter (cm )
62+ mdl .addCM (blockNum , address )
3363 // for v310
34- case core .Topic ("CreateMarket (address,address,string,string )" ):
64+ case core .Topic ("RegisterMarket (address,address,address )" ):
3565 // create marketpool and pooloracle relations
3666 // add priceoracle adapter and add pool is not present
3767 poolAddr := common .BytesToAddress (txLog .Topics [1 ][:]).Hex ()
38-
39- priceOracleAddr := mdl .GetPriceOracle (poolAddr , blockNum )
40- mdl .Repo .AddRelation (& schemas.Relation {
41- Type : "MarketPool" ,
42- Owner : mdl .Address ,
43- Dependent : poolAddr ,
44- BlockNum : blockNum ,
45- })
46- mdl .Repo .AddRelation (& schemas.Relation {
47- Type : "PoolOracle" ,
48- Owner : poolAddr ,
49- Dependent : priceOracleAddr ,
50- BlockNum : blockNum ,
51- })
68+ priceOracleAddr := common .BytesToAddress (txLog .Topics [2 ][:])
69+ mdl .addNewPool (poolAddr , blockNum , mdl .GetDetailsByKey ("MARKET" ), priceOracleAddr )
5270 //
53- if priceOracle := mdl .Repo .GetAdapter (priceOracleAddr ); priceOracle == nil {
54- po := po_v3 .NewPriceOracle (priceOracleAddr , blockNum , mdl .Client , mdl .Repo )
55- mdl .Repo .AddSyncAdapter (po )
56- }
57- //
58- poolAdapter := mdl .Repo .GetAdapter (poolAddr )
59- if poolAdapter == nil {
60- pool := pool_v3 .NewPool (poolAddr , mdl .Client , mdl .Repo , blockNum , mdl .Address , schemas .PriceOracleT (priceOracleAddr ), 310 )
61- mdl .Repo .AddSyncAdapter (pool )
62- } else {
63- if poolv3 , ok := poolAdapter .(* pool_v3.Poolv3 ); ok {
64- poolv3 .State .Market = mdl .Address
65- poolv3 .State .PriceOracle = schemas .PriceOracleT (priceOracleAddr )
66- } else {
67- log .Fatalf ("the pool by the address(%s) is not poolv3" , poolAddr )
68- }
69- }
70- case core .Topic ("RegisterCreditSuite(address,address)" ):
71- cm := cm_v3 .NewCMv3 (common .BytesToAddress (txLog .Topics [1 ][:]).Hex (), mdl .Client , mdl .Repo , blockNum )
72- mdl .Repo .AddSyncAdapter (cm )
71+ mdl .poolToMarketAndPriceOracleRelation (blockNum , poolAddr , priceOracleAddr .Hex ())
72+ case core .Topic ("RegisterCreditSuite(address,address)" ): // pool, cm
73+ cmAddr := common .BytesToAddress (txLog .Topics [2 ][:])
74+ mdl .addCM (blockNum , cmAddr .Hex ())
75+ case core .Topic ("SetPriceOracle(address,address)" ): // pool, priceoracle
76+ poolAddr := common .BytesToAddress (txLog .Topics [1 ][:]).Hex ()
77+ priceOracle := common .BytesToAddress (txLog .Topics [2 ][:]).Hex ()
78+ mdl .poolToMarketAndPriceOracleRelation (blockNum , poolAddr , priceOracle )
7379 }
7480}
7581
@@ -89,28 +95,33 @@ func NewCM(addr string, client core.ClientI, repo ds.RepositoryI, blockNum int64
8995 return nil
9096}
9197
92- func NewPool (addr string , client core.ClientI , repo ds.RepositoryI , blockNum int64 ) ds.SyncAdapterI {
93- version := core .FetchVersion (addr , blockNum , client )
98+ // if already present doesn't add.
99+ func (mdl * ContractRegister ) addNewPool (addr string , blockNum int64 , market string , pOracle common.Address ) {
100+ version := core .FetchVersion (addr , blockNum , mdl .Client )
94101 switch version {
95102 case core .NewVersion (1 ), core .NewVersion (2 ):
96- return pool_v2 .NewPool (addr , client , repo , blockNum )
103+ obj := pool_v2 .NewPool (addr , mdl .Client , mdl .Repo , blockNum )
104+ mdl .Repo .AddSyncAdapter (obj )
97105 default :
98- if version .MoreThanEq (core .NewVersion (300 )) {
99- // add pool to the lmrewards so that farm_v3 table entry can be created.
100- adapters := repo .GetAdapterAddressByName (ds .LMRewardsv3 )
101- lmRewards := repo .GetAdapter (adapters [0 ])
102- lmRewards .(* v3.LMRewardsv3 ).AddPoolv3 (blockNum , addr )
103- // add pool
104- return pool_v3 .NewPool (addr , client , repo , blockNum , core .NULL_ADDR .Hex (), schemas .PriceOracleT (core .NULL_ADDR .Hex ()), 300 )
106+ // add pool to the lmrewards so that farm_v3 table entry can be created.
107+ if mdl .Repo .GetAdapter (addr ) != nil {
108+ return
105109 }
110+ adapters := mdl .Repo .GetAdapterAddressByName (ds .LMRewardsv3 )
111+ lmRewards := mdl .Repo .GetAdapter (adapters [0 ])
112+ lmRewards .(* v3.LMRewardsv3 ).AddPoolv3 (blockNum , addr )
113+ // add pool
114+ if pOracle == core .NULL_ADDR {
115+ po , version , err := mdl .Repo .GetActivePriceOracleByBlockNum (blockNum )
116+ if version == core .NewVersion (300 ) {
117+ log .Fatal ()
118+ }
119+ log .CheckFatal (err )
120+ pOracle = common .HexToAddress (string (po ))
121+ }
122+ obj := pool_v3 .NewPool (addr , mdl .Client , mdl .Repo , blockNum , market , schemas .PriceOracleT (pOracle .Hex ())) // can be 310, 300, 2, 1
123+ mdl .Repo .AddSyncAdapter (obj )
124+ //
125+ mdl .poolToMarketAndPriceOracleRelation (blockNum , addr , pOracle .Hex ())
106126 }
107- log .Fatalf ("Version(%d) of pool can't be created." , version )
108- return nil
109- }
110-
111- func (mdl * ContractRegister ) GetPriceOracle (pool string , blockNum int64 ) string {
112- hash := common .HexToHash (pool )
113- data , err := core .CallFuncGetSingleValue (mdl .Client , "01374518" , common .HexToAddress (mdl .Address ), blockNum , hash [:])
114- log .CheckFatal (err )
115- return common .BytesToAddress (data ).Hex ()
116127}
0 commit comments