Skip to content

Commit 766771a

Browse files
authored
Move hard-coded values to config (trustwallet#16872)
1 parent c7af5aa commit 766771a

File tree

5 files changed

+70
-130
lines changed

5 files changed

+70
-130
lines changed

.github/assets.config.yaml

+24-1
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,27 @@ validators_settings:
106106
description: Tokens that are deflationary or use mechanism to burn a token on transfer/swap.
107107
- id: memes
108108
name: Memes
109-
description: A cryptocurrency that is associated with some theme, often as a joke rather than a serious product.
109+
description: A cryptocurrency that is associated with some theme, often as a joke rather than a serious product.
110+
111+
trading_pair_settings:
112+
uniswap:
113+
url: https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2
114+
115+
primary_tokens: "WETH,ETH"
116+
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"
117+
force_exclude_list: "STARL,UFO"
118+
119+
min_liquidity: 2000000
120+
min_vol_24: 1000000
121+
min_tx_count_24: 480
122+
123+
pancakeswap:
124+
url: https://api.bscgraph.org/subgraphs/name/cakeswap
125+
126+
primary_tokens: "WBNB,BNB"
127+
force_include_list: "Cake,DAI,ETH,TWT,VAI,USDT,BLINK,BTCB,ALPHA,INJ,CTK,UNI,XVS,BUSD,HARD,BIFI,FRONT"
128+
force_exclude_list:
129+
130+
min_liquidity: 1000000
131+
min_vol_24: 500000
132+
min_tx_count_24: 288

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ There are similar check logic implemented:
7272
Info on supported trading pairs are stored in `tokenlist.json` files.
7373
Trading pairs can be updated --
7474
from Uniswap/Ethereum and PancakeSwap/Smartchain -- using update script (and checking in changes).
75-
Minimal limit values for trading pair inclusion are set in the `config.ts` file.
75+
Minimal limit values for trading pair inclusion are set in the [config file](https://github.com/trustwallet/assets/blob/master/.github/assets.config.yaml).
7676
There are also options for force-include and force-exclude in the config.
7777

7878
## Disclaimer

internal/config/config.go

+20-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import (
88

99
type (
1010
Config struct {
11-
App App `mapstructure:"app"`
12-
ClientURLs ClientsURLs `mapstructure:"client_urls"`
13-
URLs URLs `mapstructure:"urls"`
14-
ValidatorsSettings ValidatorsSettings `mapstructure:"validators_settings"`
11+
App App `mapstructure:"app"`
12+
ClientURLs ClientsURLs `mapstructure:"client_urls"`
13+
URLs URLs `mapstructure:"urls"`
14+
ValidatorsSettings ValidatorsSettings `mapstructure:"validators_settings"`
15+
TradingPairSettings TradingPairSettings `mapstructure:"trading_pair_settings"`
1516
}
1617

1718
App struct {
@@ -39,6 +40,21 @@ type (
3940
DappsFolder DappsFolder `mapstructure:"dapps_folder"`
4041
CoinInfoFile CoinInfoFile `mapstructure:"coin_info_file"`
4142
}
43+
44+
TradingPairSettings struct {
45+
Uniswap TradingPairSetting `mapstructure:"uniswap"`
46+
Pancakeswap TradingPairSetting `mapstructure:"pancakeswap"`
47+
}
48+
49+
TradingPairSetting struct {
50+
URL string `mapstructure:"url"`
51+
PrimaryTokens string `mapstructure:"primary_tokens"`
52+
ForceIncludeList string `mapstructure:"force_include_list"`
53+
ForceExcludeList string `mapstructure:"force_exclude_list"`
54+
MinLiquidity int `mapstructure:"min_liquidity"`
55+
MinVol24 int `mapstructure:"min_vol_24"`
56+
MinTxCount24 int `mapstructure:"min_tx_count_24"`
57+
}
4258
)
4359

4460
// Default is a configuration instance.

internal/processor/service.go

-7
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,12 @@ func (s *Service) GetUpdatersAuto() []Updater {
137137
}
138138
}
139139

140-
// nolint:godot
141140
func (s *Service) GetUpdatersManual() []Updater {
142141
return []Updater{
143142
{
144143
Name: "Update tokenlist.json for Ethereum",
145144
Run: s.UpdateEthereumTokenlist,
146145
},
147-
// TODO: Add a special unmarshalling for `fetchTradingPairs`.
148-
// In addition, https://graphql.bitquery.io/ has new restrictions for API access, so this updater doesn't work.
149-
// {
150-
// Name: "Update tokenlist.json for Polygon",
151-
// Run: s.UpdatePolygonTokenlist,
152-
// },
153146
{
154147
Name: "Update tokenlist.json for Smartchain",
155148
Run: s.UpdateSmartchainTokenlist,

internal/processor/updaters_manual.go

+25-117
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"strconv"
77
"strings"
8-
"time"
98

109
log "github.com/sirupsen/logrus"
1110

@@ -19,25 +18,6 @@ import (
1918
"github.com/trustwallet/go-primitives/types"
2019
)
2120

22-
var (
23-
UniswapForceInclude = []string{
24-
"TUSD", "STAKE", "YFI", "BAT", "MANA", "1INCH", "REP", "KP3R", "UNI", "WBTC", "HEX", "CREAM", "SLP",
25-
"REN", "XOR", "Link", "sUSD", "HEGIC", "RLC", "DAI", "SUSHI", "FYZ", "DYT", "AAVE", "LEND", "UBT",
26-
"DIA", "RSR", "SXP", "OCEAN", "MKR", "USDC", "CEL", "BAL", "BAND", "COMP", "SNX", "OMG", "AMPL",
27-
"USDT", "KNC", "ZRX", "AXS", "ENJ", "STMX", "DPX", "FTT", "DPI", "PAX",
28-
}
29-
UniswapForceExclude = []string{"STARL", "UFO"}
30-
31-
PolygonSwapForceInclude = []string{}
32-
PolygonSwapForceExclude = []string{}
33-
34-
PancakeSwapForceInclude = []string{
35-
"Cake", "DAI", "ETH", "TWT", "VAI", "USDT", "BLINK", "BTCB", "ALPHA", "INJ", "CTK", "UNI", "XVS",
36-
"BUSD", "HARD", "BIFI", "FRONT",
37-
}
38-
PancakeSwapForceExclude = []string{}
39-
)
40-
4121
var (
4222
UniswapTradingPairsQuery = map[string]string{
4323
"operationName": "pairs",
@@ -56,21 +36,6 @@ var (
5636
`,
5737
}
5838

59-
PolygonSwapTradingPairsQuery = map[string]string{
60-
"query": `
61-
{
62-
ethereum(network: matic) {
63-
dexTrades(date: {is: "$DATE$"}) {
64-
sellCurrency {address symbol name decimals}
65-
buyCurrency {address symbol name decimals}
66-
trade: count
67-
tradeAmount(in: USD)
68-
}
69-
}
70-
}
71-
`,
72-
}
73-
7439
PancakeSwapTradingPairsQuery = map[string]string{
7540
"operationName": "pairs",
7641
"query": `
@@ -87,92 +52,30 @@ var (
8752
}
8853
`,
8954
}
90-
91-
UniswapTradingPairsUrl = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2"
92-
PolygonSwapTradingPairsUrl = "https://graphql.bitquery.io"
93-
PancakeSwapTradingPairsUrl = "https://api.bscgraph.org/subgraphs/name/cakeswap"
94-
)
95-
96-
const (
97-
UniswapMinLiquidity = 2000000
98-
UniswapMinVol24 = 1000000
99-
UniswapMinTxCount24 = 480
100-
101-
PolygonSwapMinLiquidity = 0
102-
PolygonSwapMinVol24 = 500000
103-
PolygonSwapMinTxCount24 = 288
104-
105-
PancakeSwapMinLiquidity = 1000000
106-
PancakeSwapMinVol24 = 500000
107-
PancakeSwapMinTxCount24 = 288
108-
)
109-
110-
var (
111-
PrimaryTokensEthereum = []string{"WETH", "ETH"}
112-
PrimaryTokensPolygon = []string{"WMATIC", "MATIC", "WETH", "USDC", "USDT", "DAI"}
113-
PrimaryTokensSmartChain = []string{"WBNB", "BNB"}
11455
)
11556

11657
// nolint:dupl
11758
func (s *Service) UpdateEthereumTokenlist() error {
11859
log.WithFields(log.Fields{
119-
"limit_liquidity": UniswapMinLiquidity,
120-
"volume": UniswapMinVol24,
121-
"tx_count": UniswapMinTxCount24,
60+
"limit_liquidity": config.Default.TradingPairSettings.Uniswap.MinLiquidity,
61+
"volume": config.Default.TradingPairSettings.Uniswap.MinVol24,
62+
"tx_count": config.Default.TradingPairSettings.Uniswap.MinTxCount24,
12263
}).Debug("Retrieving pairs from Uniswap")
12364

124-
tradingPairs, err := retrievePairs(UniswapTradingPairsUrl, UniswapTradingPairsQuery,
125-
UniswapMinLiquidity, UniswapMinVol24, UniswapMinTxCount24, UniswapForceInclude, PrimaryTokensEthereum)
126-
if err != nil {
127-
return err
128-
}
129-
130-
pairs := make([][]TokenItem, 0)
131-
132-
chain := coin.Coins[coin.ETHEREUM]
133-
134-
for _, tradingPair := range tradingPairs {
135-
tokenItem0, err := getTokenInfoFromSubgraphToken(chain, tradingPair.Token0)
136-
if err != nil {
137-
return err
138-
}
139-
140-
tokenItem1, err := getTokenInfoFromSubgraphToken(chain, tradingPair.Token1)
141-
if err != nil {
142-
return err
143-
}
65+
forceInclude := strings.Split(config.Default.TradingPairSettings.Uniswap.ForceIncludeList, ",")
66+
forceExclude := strings.Split(config.Default.TradingPairSettings.Uniswap.ForceExcludeList, ",")
67+
primaryTokens := strings.Split(config.Default.TradingPairSettings.Uniswap.PrimaryTokens, ",")
14468

145-
if !isTokenPrimary(tradingPair.Token0, PrimaryTokensEthereum) {
146-
tokenItem0, tokenItem1 = tokenItem1, tokenItem0
147-
}
148-
149-
pairs = append(pairs, []TokenItem{*tokenItem0, *tokenItem1})
150-
}
151-
152-
return rebuildTokenList(chain, pairs, UniswapForceExclude)
153-
}
154-
155-
func (s *Service) UpdatePolygonTokenlist() error {
156-
log.WithFields(log.Fields{
157-
"limit_liquidity": PolygonSwapMinLiquidity,
158-
"volume": PolygonSwapMinVol24,
159-
"tx_count": PolygonSwapMinTxCount24,
160-
}).Debug("Retrieving pairs from PolygonSwap")
161-
162-
yesterdayDate := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
163-
164-
PolygonSwapTradingPairsQuery["query"] = strings.ReplaceAll(PolygonSwapTradingPairsQuery["query"],
165-
"$DATE$", yesterdayDate)
166-
167-
tradingPairs, err := retrievePairs(PolygonSwapTradingPairsUrl, PolygonSwapTradingPairsQuery, PolygonSwapMinLiquidity,
168-
PolygonSwapMinVol24, PolygonSwapMinTxCount24, PolygonSwapForceInclude, PrimaryTokensPolygon)
69+
tradingPairs, err := retrievePairs(config.Default.TradingPairSettings.Uniswap.URL, UniswapTradingPairsQuery,
70+
config.Default.TradingPairSettings.Uniswap.MinLiquidity, config.Default.TradingPairSettings.Uniswap.MinVol24,
71+
config.Default.TradingPairSettings.Uniswap.MinTxCount24, forceInclude, primaryTokens)
16972
if err != nil {
17073
return err
17174
}
17275

17376
pairs := make([][]TokenItem, 0)
17477

175-
chain := coin.Coins[coin.POLYGON]
78+
chain := coin.Coins[coin.ETHEREUM]
17679

17780
for _, tradingPair := range tradingPairs {
17881
tokenItem0, err := getTokenInfoFromSubgraphToken(chain, tradingPair.Token0)
@@ -185,27 +88,32 @@ func (s *Service) UpdatePolygonTokenlist() error {
18588
return err
18689
}
18790

188-
if !isTokenPrimary(tradingPair.Token0, PrimaryTokensEthereum) {
91+
if !isTokenPrimary(tradingPair.Token0, primaryTokens) {
18992
tokenItem0, tokenItem1 = tokenItem1, tokenItem0
19093
}
19194

19295
pairs = append(pairs, []TokenItem{*tokenItem0, *tokenItem1})
19396
}
19497

195-
return rebuildTokenList(chain, pairs, PolygonSwapForceExclude)
98+
return rebuildTokenList(chain, pairs, forceExclude)
19699
}
197100

198101
// nolint:dupl
199102
func (s *Service) UpdateSmartchainTokenlist() error {
200103
log.WithFields(log.Fields{
201-
"limit_liquidity": PancakeSwapMinLiquidity,
202-
"volume": PancakeSwapMinVol24,
203-
"tx_count": PancakeSwapMinTxCount24,
104+
"limit_liquidity": config.Default.TradingPairSettings.Pancakeswap.MinLiquidity,
105+
"volume": config.Default.TradingPairSettings.Pancakeswap.MinVol24,
106+
"tx_count": config.Default.TradingPairSettings.Pancakeswap.MinTxCount24,
204107
}).Debug("Retrieving pairs from PancakeSwap")
205108

206-
tradingPairs, err := retrievePairs(PancakeSwapTradingPairsUrl, PancakeSwapTradingPairsQuery,
207-
PancakeSwapMinLiquidity, PancakeSwapMinVol24, PancakeSwapMinTxCount24,
208-
PancakeSwapForceInclude, PrimaryTokensSmartChain)
109+
forceInclude := strings.Split(config.Default.TradingPairSettings.Pancakeswap.ForceIncludeList, ",")
110+
forceExclude := strings.Split(config.Default.TradingPairSettings.Pancakeswap.ForceExcludeList, ",")
111+
primaryTokens := strings.Split(config.Default.TradingPairSettings.Pancakeswap.PrimaryTokens, ",")
112+
113+
tradingPairs, err := retrievePairs(config.Default.TradingPairSettings.Pancakeswap.URL,
114+
PancakeSwapTradingPairsQuery, config.Default.TradingPairSettings.Pancakeswap.MinLiquidity,
115+
config.Default.TradingPairSettings.Pancakeswap.MinVol24,
116+
config.Default.TradingPairSettings.Pancakeswap.MinTxCount24, forceInclude, primaryTokens)
209117
if err != nil {
210118
return err
211119
}
@@ -225,14 +133,14 @@ func (s *Service) UpdateSmartchainTokenlist() error {
225133
return err
226134
}
227135

228-
if !isTokenPrimary(tradingPair.Token0, PrimaryTokensSmartChain) {
136+
if !isTokenPrimary(tradingPair.Token0, primaryTokens) {
229137
tokenItem0, tokenItem1 = tokenItem1, tokenItem0
230138
}
231139

232140
pairs = append(pairs, []TokenItem{*tokenItem0, *tokenItem1})
233141
}
234142

235-
return rebuildTokenList(chain, pairs, PancakeSwapForceExclude)
143+
return rebuildTokenList(chain, pairs, forceExclude)
236144
}
237145

238146
func retrievePairs(url string, query map[string]string, minLiquidity, minVol24, minTxCount24 int,

0 commit comments

Comments
 (0)