@@ -13,16 +13,23 @@ import (
1313
1414func (d * PoolsListUpdater ) classifyPoolTypes (
1515 ctx context.Context ,
16+ poolsSourceIndex int ,
1617 registryOrFactoryABI abi.ABI ,
1718 registryOrFactoryAddress string ,
1819 poolAddresses []common.Address ,
1920) ([]string , error ) {
20- if strings .EqualFold (registryOrFactoryAddress , d .config .CryptoPoolsRegistryAddress ) ||
21- strings .EqualFold (registryOrFactoryAddress , d .config .CryptoPoolsFactoryAddress ) {
21+ switch poolsSourceIndex {
22+ case sourceMainRegistry :
23+ return d .classifyCurveV1PoolTypes (ctx , registryOrFactoryABI , registryOrFactoryAddress , poolAddresses )
24+ case sourceMetaPoolsFactory :
25+ return d .classifyCurveV1PoolTypes (ctx , registryOrFactoryABI , registryOrFactoryAddress , poolAddresses )
26+ case sourceCryptoPoolsRegistry :
2227 return d .classifyCurveV2PoolTypes (ctx , registryOrFactoryABI , registryOrFactoryAddress , poolAddresses )
28+ case sourceCryptoPoolsFactory :
29+ return d .classifyCurveV2PoolTypes (ctx , registryOrFactoryABI , registryOrFactoryAddress , poolAddresses )
30+ default :
31+ return d .classifyCurveV1PoolTypes (ctx , registryOrFactoryABI , registryOrFactoryAddress , poolAddresses )
2332 }
24-
25- return d .classifyCurveV1PoolTypes (ctx , registryOrFactoryABI , registryOrFactoryAddress , poolAddresses )
2633}
2734
2835// classifyCurveV1PoolTypes includes plainOracle, base, meta, aave, compound
@@ -150,7 +157,7 @@ func (d *PoolsListUpdater) classifyCurveV2PoolTypes(
150157 registryOrFactoryAddress string ,
151158 poolAddresses []common.Address ,
152159) ([]string , error ) {
153- var coins = make ([][8 ]common.Address , len (poolAddresses ))
160+ coins : = make ([][8 ]common.Address , len (poolAddresses ))
154161 calls := d .ethrpcClient .NewRequest ().SetContext (ctx )
155162 for i , poolAddress := range poolAddresses {
156163 calls .AddCall (& ethrpc.Call {
@@ -171,8 +178,11 @@ func (d *PoolsListUpdater) classifyCurveV2PoolTypes(
171178 for i := range poolAddresses {
172179 if d .isTwo (coins [i ]) {
173180 poolTypes [i ] = poolTypeTwo
174- } else {
181+ } else if d . isTricrypto ( coins [ i ]) {
175182 poolTypes [i ] = poolTypeTricrypto
183+ } else {
184+ logger .Infof ("unsupported curve v2 pool: %s" , poolAddresses [i ].Hex ())
185+ poolTypes [i ] = poolTypeUnsupported
176186 }
177187 }
178188
@@ -265,7 +275,7 @@ func (d *PoolsListUpdater) isCompoundPool(
265275// isTwo TwoCryptoPool
266276// is curveV2, belongs to CryptoFactory and CryptoRegistry
267277// has "gamma" in its contracts
268- // has only 2 coins (has 2 coins is TriCryptoPool )
278+ // has only 2 coins (has 3 coins is TricryptoPool )
269279func (d * PoolsListUpdater ) isTwo (coins [8 ]common.Address ) bool {
270280 var numberOfCoin = 0
271281 for _ , coin := range coins {
@@ -277,3 +287,18 @@ func (d *PoolsListUpdater) isTwo(coins [8]common.Address) bool {
277287
278288 return numberOfCoin == 2
279289}
290+
291+ // isTricrypto is curveV2, belongs to CryptoRegistry and CryptoFactory
292+ // has "gamma" in its contracts
293+ // has only 3 coins (has 2 coins is TwoPool)
294+ func (d * PoolsListUpdater ) isTricrypto (coins [8 ]common.Address ) bool {
295+ var numberOfCoin = 0
296+ for _ , coin := range coins {
297+ if strings .EqualFold (coin .Hex (), addressZero ) {
298+ break
299+ }
300+ numberOfCoin += 1
301+ }
302+
303+ return numberOfCoin == 3
304+ }
0 commit comments