diff --git a/config/generation.go b/config/generation.go index f5aaa4f..48c86b3 100644 --- a/config/generation.go +++ b/config/generation.go @@ -123,6 +123,9 @@ type GenerateConfig struct { // You must have MinProviderCountOverride <= MinDexProviderCount. MinDexProviderCount uint64 `json:"min_dex_provider_count" mapstructure:"min_dex_provider_count"` + // ExcludeCMCIDs specifies a list of CMC IDs of markets that should be excluded. + ExcludeCMCIDs []string `json:"exclude_cmc_ids" mapstructure:"exclude_cmc_ids"` + // ExcludeCMCTags specifies a list of CMC tags of markets that should be excluded. ExcludeCMCTags []string `json:"exclude_cmc_tags" mapstructure:"exclude_cmc_tags"` // DisableProviders specifies a list of providers that should not be allowed to provide for a market. diff --git a/generator/transformer/asset_transforms.go b/generator/transformer/asset_transforms.go index 1efaf2a..c3d5d32 100644 --- a/generator/transformer/asset_transforms.go +++ b/generator/transformer/asset_transforms.go @@ -2,7 +2,9 @@ package transformer import ( "context" + "slices" "strings" + "strconv" "go.uber.org/zap" @@ -39,6 +41,28 @@ func FilterOutCMCTags() TransformAsset { } } +func FilterOutCMCIDs() TransformAsset { + return func(_ context.Context, logger *zap.Logger, cfg config.GenerateConfig, feeds types.Feeds, cmcIDToAssetInfo map[int64]provider.AssetInfo) (types.Feeds, types.ExclusionReasons, error) { + idsToExclude := cfg.ExcludeCMCIDs + logger.Info("filtering out cmc ids", zap.Int("feeds", len(feeds)), zap.Strings("ids", idsToExclude)) + out := make([]types.Feed, 0, len(feeds)) + exclusions := types.NewExclusionReasons() + + for _, feed := range feeds { + baseAssetCMCID := feed.CMCInfo.BaseID + if slices.Contains(idsToExclude, strconv.FormatInt(baseAssetCMCID, 10)) { + logger.Info("dropping feed because it has excluded CMC ids", zap.Any("feed", feed)) + exclusions.AddExclusionReasonFromFeed(feed, feed.ProviderConfig.Name, "FilterOutCMCID: has cmc id to exclude") + continue + } + out = append(out, feed) + } + + logger.Info("filtering out cmc ids", zap.Int("feeds remaining", len(out))) + return out, exclusions, nil + } +} + func HasCMCTag(assetInfo provider.AssetInfo, tagsToExclude []string) bool { for _, tagToExclude := range tagsToExclude { for _, assetTag := range assetInfo.CMCTags { diff --git a/generator/transformer/transformer.go b/generator/transformer/transformer.go index 3aa7dec..1bf851a 100644 --- a/generator/transformer/transformer.go +++ b/generator/transformer/transformer.go @@ -42,6 +42,7 @@ func New(logger *zap.Logger) Transformer { }, assetTransforms: []TransformAsset{ // Separate from feed transforms because these require extra metadata from asset infos FilterOutCMCTags(), + FilterOutCMCIDs(), }, mmTransforms: []TransformMarketMap{ PruneMarkets(), diff --git a/local/config-dydx-mainnet.json b/local/config-dydx-mainnet.json index afb8b54..deb341b 100644 --- a/local/config-dydx-mainnet.json +++ b/local/config-dydx-mainnet.json @@ -196,6 +196,7 @@ }, "min_cex_provider_count": 2, "min_dex_provider_count": 1, + "exclude_cmc_ids": ["29035"], "exclude_cmc_tags": ["wrapped-tokens", "algorithmic-stablecoin"], "disable_providers": { "IOTX/USD": ["coinbase_ws"] @@ -210,11 +211,13 @@ "MATIC/USD": {}, "MXN/USD": {}, "NZD/USD": {}, - "WTAO/USD": {} + "WTAO/USD": {}, + "OGN/USD": {} }, "allowed_currency_pairs": null, "market_map_override": { "markets": { + "METH/USD": {}, "BRL/USD": { "ticker": { "currency_pair": { "Base": "BRL", "Quote": "USD" },