From 766771ac91fd37ed270f3008736d86d715727f16 Mon Sep 17 00:00:00 2001 From: Daniel <24758309+leedaniil@users.noreply.github.com> Date: Tue, 28 Dec 2021 00:44:12 +0300 Subject: [PATCH] Move hard-coded values to config (#16872) --- .github/assets.config.yaml | 25 ++++- README.md | 2 +- internal/config/config.go | 24 ++++- internal/processor/service.go | 7 -- internal/processor/updaters_manual.go | 142 +++++--------------------- 5 files changed, 70 insertions(+), 130 deletions(-) diff --git a/.github/assets.config.yaml b/.github/assets.config.yaml index 0f1ee4260..e92a0f32b 100644 --- a/.github/assets.config.yaml +++ b/.github/assets.config.yaml @@ -106,4 +106,27 @@ validators_settings: description: Tokens that are deflationary or use mechanism to burn a token on transfer/swap. - id: memes name: Memes - description: A cryptocurrency that is associated with some theme, often as a joke rather than a serious product. \ No newline at end of file + description: A cryptocurrency that is associated with some theme, often as a joke rather than a serious product. + +trading_pair_settings: + uniswap: + url: https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2 + + primary_tokens: "WETH,ETH" + force_include_list: "TUSD,STAKE,YFI,BAT,MANA,1INCH,REP,KP3R,UNI,WBTC,HEX,CREAM,SLP,REN,XOR,Link,sUSD,HEGIC,RLC,DAI,SUSHI,FYZ,DYT,AAVE,LEND,UBT,DIA,RSR,SXP,OCEAN,MKR,USDC,CEL,BAL,BAND,COMP,SNX,OMG,AMPL,USDT,KNC,ZRX,AXS,ENJ,STMX,DPX,FTT,DPI,PAX" + force_exclude_list: "STARL,UFO" + + min_liquidity: 2000000 + min_vol_24: 1000000 + min_tx_count_24: 480 + + pancakeswap: + url: https://api.bscgraph.org/subgraphs/name/cakeswap + + primary_tokens: "WBNB,BNB" + force_include_list: "Cake,DAI,ETH,TWT,VAI,USDT,BLINK,BTCB,ALPHA,INJ,CTK,UNI,XVS,BUSD,HARD,BIFI,FRONT" + force_exclude_list: + + min_liquidity: 1000000 + min_vol_24: 500000 + min_tx_count_24: 288 \ No newline at end of file diff --git a/README.md b/README.md index 4989ebf14..77b6d3b5f 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ There are similar check logic implemented: Info on supported trading pairs are stored in `tokenlist.json` files. Trading pairs can be updated -- from Uniswap/Ethereum and PancakeSwap/Smartchain -- using update script (and checking in changes). -Minimal limit values for trading pair inclusion are set in the `config.ts` file. +Minimal limit values for trading pair inclusion are set in the [config file](https://github.com/trustwallet/assets/blob/master/.github/assets.config.yaml). There are also options for force-include and force-exclude in the config. ## Disclaimer diff --git a/internal/config/config.go b/internal/config/config.go index 031cf2c90..983a4e22a 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -8,10 +8,11 @@ import ( type ( Config struct { - App App `mapstructure:"app"` - ClientURLs ClientsURLs `mapstructure:"client_urls"` - URLs URLs `mapstructure:"urls"` - ValidatorsSettings ValidatorsSettings `mapstructure:"validators_settings"` + App App `mapstructure:"app"` + ClientURLs ClientsURLs `mapstructure:"client_urls"` + URLs URLs `mapstructure:"urls"` + ValidatorsSettings ValidatorsSettings `mapstructure:"validators_settings"` + TradingPairSettings TradingPairSettings `mapstructure:"trading_pair_settings"` } App struct { @@ -39,6 +40,21 @@ type ( DappsFolder DappsFolder `mapstructure:"dapps_folder"` CoinInfoFile CoinInfoFile `mapstructure:"coin_info_file"` } + + TradingPairSettings struct { + Uniswap TradingPairSetting `mapstructure:"uniswap"` + Pancakeswap TradingPairSetting `mapstructure:"pancakeswap"` + } + + TradingPairSetting struct { + URL string `mapstructure:"url"` + PrimaryTokens string `mapstructure:"primary_tokens"` + ForceIncludeList string `mapstructure:"force_include_list"` + ForceExcludeList string `mapstructure:"force_exclude_list"` + MinLiquidity int `mapstructure:"min_liquidity"` + MinVol24 int `mapstructure:"min_vol_24"` + MinTxCount24 int `mapstructure:"min_tx_count_24"` + } ) // Default is a configuration instance. diff --git a/internal/processor/service.go b/internal/processor/service.go index 446d5dcc9..2f3dc51eb 100644 --- a/internal/processor/service.go +++ b/internal/processor/service.go @@ -137,19 +137,12 @@ func (s *Service) GetUpdatersAuto() []Updater { } } -// nolint:godot func (s *Service) GetUpdatersManual() []Updater { return []Updater{ { Name: "Update tokenlist.json for Ethereum", Run: s.UpdateEthereumTokenlist, }, - // TODO: Add a special unmarshalling for `fetchTradingPairs`. - // In addition, https://graphql.bitquery.io/ has new restrictions for API access, so this updater doesn't work. - // { - // Name: "Update tokenlist.json for Polygon", - // Run: s.UpdatePolygonTokenlist, - // }, { Name: "Update tokenlist.json for Smartchain", Run: s.UpdateSmartchainTokenlist, diff --git a/internal/processor/updaters_manual.go b/internal/processor/updaters_manual.go index 0f47582dd..2ebf96e1f 100644 --- a/internal/processor/updaters_manual.go +++ b/internal/processor/updaters_manual.go @@ -5,7 +5,6 @@ import ( "fmt" "strconv" "strings" - "time" log "github.com/sirupsen/logrus" @@ -19,25 +18,6 @@ import ( "github.com/trustwallet/go-primitives/types" ) -var ( - UniswapForceInclude = []string{ - "TUSD", "STAKE", "YFI", "BAT", "MANA", "1INCH", "REP", "KP3R", "UNI", "WBTC", "HEX", "CREAM", "SLP", - "REN", "XOR", "Link", "sUSD", "HEGIC", "RLC", "DAI", "SUSHI", "FYZ", "DYT", "AAVE", "LEND", "UBT", - "DIA", "RSR", "SXP", "OCEAN", "MKR", "USDC", "CEL", "BAL", "BAND", "COMP", "SNX", "OMG", "AMPL", - "USDT", "KNC", "ZRX", "AXS", "ENJ", "STMX", "DPX", "FTT", "DPI", "PAX", - } - UniswapForceExclude = []string{"STARL", "UFO"} - - PolygonSwapForceInclude = []string{} - PolygonSwapForceExclude = []string{} - - PancakeSwapForceInclude = []string{ - "Cake", "DAI", "ETH", "TWT", "VAI", "USDT", "BLINK", "BTCB", "ALPHA", "INJ", "CTK", "UNI", "XVS", - "BUSD", "HARD", "BIFI", "FRONT", - } - PancakeSwapForceExclude = []string{} -) - var ( UniswapTradingPairsQuery = map[string]string{ "operationName": "pairs", @@ -56,21 +36,6 @@ var ( `, } - PolygonSwapTradingPairsQuery = map[string]string{ - "query": ` - { - ethereum(network: matic) { - dexTrades(date: {is: "$DATE$"}) { - sellCurrency {address symbol name decimals} - buyCurrency {address symbol name decimals} - trade: count - tradeAmount(in: USD) - } - } - } - `, - } - PancakeSwapTradingPairsQuery = map[string]string{ "operationName": "pairs", "query": ` @@ -87,42 +52,23 @@ var ( } `, } - - UniswapTradingPairsUrl = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2" - PolygonSwapTradingPairsUrl = "https://graphql.bitquery.io" - PancakeSwapTradingPairsUrl = "https://api.bscgraph.org/subgraphs/name/cakeswap" -) - -const ( - UniswapMinLiquidity = 2000000 - UniswapMinVol24 = 1000000 - UniswapMinTxCount24 = 480 - - PolygonSwapMinLiquidity = 0 - PolygonSwapMinVol24 = 500000 - PolygonSwapMinTxCount24 = 288 - - PancakeSwapMinLiquidity = 1000000 - PancakeSwapMinVol24 = 500000 - PancakeSwapMinTxCount24 = 288 -) - -var ( - PrimaryTokensEthereum = []string{"WETH", "ETH"} - PrimaryTokensPolygon = []string{"WMATIC", "MATIC", "WETH", "USDC", "USDT", "DAI"} - PrimaryTokensSmartChain = []string{"WBNB", "BNB"} ) // nolint:dupl func (s *Service) UpdateEthereumTokenlist() error { log.WithFields(log.Fields{ - "limit_liquidity": UniswapMinLiquidity, - "volume": UniswapMinVol24, - "tx_count": UniswapMinTxCount24, + "limit_liquidity": config.Default.TradingPairSettings.Uniswap.MinLiquidity, + "volume": config.Default.TradingPairSettings.Uniswap.MinVol24, + "tx_count": config.Default.TradingPairSettings.Uniswap.MinTxCount24, }).Debug("Retrieving pairs from Uniswap") - tradingPairs, err := retrievePairs(UniswapTradingPairsUrl, UniswapTradingPairsQuery, - UniswapMinLiquidity, UniswapMinVol24, UniswapMinTxCount24, UniswapForceInclude, PrimaryTokensEthereum) + forceInclude := strings.Split(config.Default.TradingPairSettings.Uniswap.ForceIncludeList, ",") + forceExclude := strings.Split(config.Default.TradingPairSettings.Uniswap.ForceExcludeList, ",") + primaryTokens := strings.Split(config.Default.TradingPairSettings.Uniswap.PrimaryTokens, ",") + + tradingPairs, err := retrievePairs(config.Default.TradingPairSettings.Uniswap.URL, UniswapTradingPairsQuery, + config.Default.TradingPairSettings.Uniswap.MinLiquidity, config.Default.TradingPairSettings.Uniswap.MinVol24, + config.Default.TradingPairSettings.Uniswap.MinTxCount24, forceInclude, primaryTokens) if err != nil { return err } @@ -142,70 +88,32 @@ func (s *Service) UpdateEthereumTokenlist() error { return err } - if !isTokenPrimary(tradingPair.Token0, PrimaryTokensEthereum) { + if !isTokenPrimary(tradingPair.Token0, primaryTokens) { tokenItem0, tokenItem1 = tokenItem1, tokenItem0 } pairs = append(pairs, []TokenItem{*tokenItem0, *tokenItem1}) } - return rebuildTokenList(chain, pairs, UniswapForceExclude) -} - -func (s *Service) UpdatePolygonTokenlist() error { - log.WithFields(log.Fields{ - "limit_liquidity": PolygonSwapMinLiquidity, - "volume": PolygonSwapMinVol24, - "tx_count": PolygonSwapMinTxCount24, - }).Debug("Retrieving pairs from PolygonSwap") - - yesterdayDate := time.Now().AddDate(0, 0, -1).Format("2006-01-02") - - PolygonSwapTradingPairsQuery["query"] = strings.ReplaceAll(PolygonSwapTradingPairsQuery["query"], - "$DATE$", yesterdayDate) - - tradingPairs, err := retrievePairs(PolygonSwapTradingPairsUrl, PolygonSwapTradingPairsQuery, PolygonSwapMinLiquidity, - PolygonSwapMinVol24, PolygonSwapMinTxCount24, PolygonSwapForceInclude, PrimaryTokensPolygon) - if err != nil { - return err - } - - pairs := make([][]TokenItem, 0) - - chain := coin.Coins[coin.POLYGON] - - for _, tradingPair := range tradingPairs { - tokenItem0, err := getTokenInfoFromSubgraphToken(chain, tradingPair.Token0) - if err != nil { - return err - } - - tokenItem1, err := getTokenInfoFromSubgraphToken(chain, tradingPair.Token1) - if err != nil { - return err - } - - if !isTokenPrimary(tradingPair.Token0, PrimaryTokensEthereum) { - tokenItem0, tokenItem1 = tokenItem1, tokenItem0 - } - - pairs = append(pairs, []TokenItem{*tokenItem0, *tokenItem1}) - } - - return rebuildTokenList(chain, pairs, PolygonSwapForceExclude) + return rebuildTokenList(chain, pairs, forceExclude) } // nolint:dupl func (s *Service) UpdateSmartchainTokenlist() error { log.WithFields(log.Fields{ - "limit_liquidity": PancakeSwapMinLiquidity, - "volume": PancakeSwapMinVol24, - "tx_count": PancakeSwapMinTxCount24, + "limit_liquidity": config.Default.TradingPairSettings.Pancakeswap.MinLiquidity, + "volume": config.Default.TradingPairSettings.Pancakeswap.MinVol24, + "tx_count": config.Default.TradingPairSettings.Pancakeswap.MinTxCount24, }).Debug("Retrieving pairs from PancakeSwap") - tradingPairs, err := retrievePairs(PancakeSwapTradingPairsUrl, PancakeSwapTradingPairsQuery, - PancakeSwapMinLiquidity, PancakeSwapMinVol24, PancakeSwapMinTxCount24, - PancakeSwapForceInclude, PrimaryTokensSmartChain) + forceInclude := strings.Split(config.Default.TradingPairSettings.Pancakeswap.ForceIncludeList, ",") + forceExclude := strings.Split(config.Default.TradingPairSettings.Pancakeswap.ForceExcludeList, ",") + primaryTokens := strings.Split(config.Default.TradingPairSettings.Pancakeswap.PrimaryTokens, ",") + + tradingPairs, err := retrievePairs(config.Default.TradingPairSettings.Pancakeswap.URL, + PancakeSwapTradingPairsQuery, config.Default.TradingPairSettings.Pancakeswap.MinLiquidity, + config.Default.TradingPairSettings.Pancakeswap.MinVol24, + config.Default.TradingPairSettings.Pancakeswap.MinTxCount24, forceInclude, primaryTokens) if err != nil { return err } @@ -225,14 +133,14 @@ func (s *Service) UpdateSmartchainTokenlist() error { return err } - if !isTokenPrimary(tradingPair.Token0, PrimaryTokensSmartChain) { + if !isTokenPrimary(tradingPair.Token0, primaryTokens) { tokenItem0, tokenItem1 = tokenItem1, tokenItem0 } pairs = append(pairs, []TokenItem{*tokenItem0, *tokenItem1}) } - return rebuildTokenList(chain, pairs, PancakeSwapForceExclude) + return rebuildTokenList(chain, pairs, forceExclude) } func retrievePairs(url string, query map[string]string, minLiquidity, minVol24, minTxCount24 int,