Skip to content

Commit 862cbfc

Browse files
committed
feat: introduce enabled flag for chains configuration and update indexing logic to use enabled chains
1 parent 8380aaf commit 862cbfc

5 files changed

Lines changed: 109 additions & 2 deletions

File tree

cmd/indexer/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ func runIndexer(chains []string, configPath string, debug, manual, catchup, from
170170

171171
// If no chains specified, use all configured chains
172172
if len(chains) == 0 {
173-
chains = cfg.Chains.Names()
174-
logger.Info("No chains specified, using all configured chains", "chains", chains)
173+
chains = cfg.Chains.EnabledNames()
174+
logger.Info("No chains specified, using enabled configured chains", "chains", chains)
175175
} else {
176176
logger.Info("Indexing specified chains", "chains", chains)
177177
}

configs/config.example.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ version: "1.0.0"
44

55
# Global defaults - applies to all chains unless overridden
66
defaults:
7+
enabled: false # chains inherit this unless they override enabled below
78
from_latest: true # start indexing from the latest block
89
poll_interval: "5s" # how often to poll for new blocks
910
reorg_rollback_window: 20 # number of blocks to roll back on reorg
@@ -47,6 +48,7 @@ chains:
4748
slow_max_pending_blocks: 400
4849

4950
ethereum_mainnet:
51+
enabled: true # example override: this chain starts even when defaults.enabled is false
5052
network_id: "ethereum_mainnet"
5153
internal_code: "ETH_MAINNET"
5254
type: "evm"

pkg/common/config/chains.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ func (c Chains) Names() []string {
3131
return names
3232
}
3333

34+
// EnabledNames returns chain names whose enabled flag is either true or omitted.
35+
func (c Chains) EnabledNames() []string {
36+
names := make([]string, 0, len(c))
37+
for k, chain := range c {
38+
if chain.Enabled == nil || *chain.Enabled {
39+
names = append(names, k)
40+
}
41+
}
42+
return names
43+
}
44+
3445
// Validate checks if given chain names exist in config.
3546
func (c Chains) Validate(names []string) error {
3647
for _, name := range names {
@@ -60,6 +71,10 @@ func (c Chains) ApplyDefaults(def Defaults) error {
6071
if strings.TrimSpace(chain.InternalCode) == "" {
6172
chain.InternalCode = strings.ToUpper(name)
6273
}
74+
if chain.Enabled == nil && def.Enabled != nil {
75+
enabled := *def.Enabled
76+
chain.Enabled = &enabled
77+
}
6378
if !chain.FromLatest {
6479
chain.FromLatest = def.FromLatest
6580
}

pkg/common/config/chains_test.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,91 @@ func TestApplyDefaults_MergesStatusThresholds(t *testing.T) {
3636
require.Equal(t, uint64(30), chain.Status.HealthyMaxPendingBlocks)
3737
require.Equal(t, uint64(120), chain.Status.SlowMaxPendingBlocks)
3838
}
39+
40+
func TestApplyDefaults_AppliesEnabledDefaultWhenOmitted(t *testing.T) {
41+
t.Parallel()
42+
43+
enabled := false
44+
chains := Chains{
45+
"ethereum_mainnet": {
46+
Type: enum.NetworkTypeEVM,
47+
PollInterval: time.Second,
48+
Nodes: []NodeConfig{{URL: "https://example.com"}},
49+
},
50+
}
51+
52+
err := chains.ApplyDefaults(Defaults{
53+
Enabled: &enabled,
54+
PollInterval: time.Second,
55+
ReorgRollbackWindow: 20,
56+
})
57+
require.NoError(t, err)
58+
59+
require.NotNil(t, chains["ethereum_mainnet"].Enabled)
60+
require.False(t, *chains["ethereum_mainnet"].Enabled)
61+
}
62+
63+
func TestApplyDefaults_PreservesExplicitEnabledValue(t *testing.T) {
64+
t.Parallel()
65+
66+
defaultEnabled := false
67+
chainEnabled := true
68+
chains := Chains{
69+
"ethereum_mainnet": {
70+
Enabled: &chainEnabled,
71+
Type: enum.NetworkTypeEVM,
72+
PollInterval: time.Second,
73+
Nodes: []NodeConfig{{URL: "https://example.com"}},
74+
},
75+
}
76+
77+
err := chains.ApplyDefaults(Defaults{
78+
Enabled: &defaultEnabled,
79+
PollInterval: time.Second,
80+
ReorgRollbackWindow: 20,
81+
})
82+
require.NoError(t, err)
83+
84+
require.NotNil(t, chains["ethereum_mainnet"].Enabled)
85+
require.True(t, *chains["ethereum_mainnet"].Enabled)
86+
}
87+
88+
func TestEnabledNames_DefaultsToEnabledWhenOmitted(t *testing.T) {
89+
t.Parallel()
90+
91+
disabled := false
92+
chains := Chains{
93+
"ethereum_mainnet": {
94+
Type: enum.NetworkTypeEVM,
95+
Nodes: []NodeConfig{{URL: "https://example.com"}},
96+
},
97+
"tron_mainnet": {
98+
Enabled: &disabled,
99+
Type: enum.NetworkTypeTron,
100+
Nodes: []NodeConfig{{URL: "https://example.com"}},
101+
},
102+
}
103+
104+
require.ElementsMatch(t, []string{"ethereum_mainnet"}, chains.EnabledNames())
105+
}
106+
107+
func TestEnabledNames_IncludesExplicitlyEnabledChains(t *testing.T) {
108+
t.Parallel()
109+
110+
enabled := true
111+
disabled := false
112+
chains := Chains{
113+
"ethereum_mainnet": {
114+
Enabled: &enabled,
115+
Type: enum.NetworkTypeEVM,
116+
Nodes: []NodeConfig{{URL: "https://example.com"}},
117+
},
118+
"tron_mainnet": {
119+
Enabled: &disabled,
120+
Type: enum.NetworkTypeTron,
121+
Nodes: []NodeConfig{{URL: "https://example.com"}},
122+
},
123+
}
124+
125+
require.ElementsMatch(t, []string{"ethereum_mainnet"}, chains.EnabledNames())
126+
}

pkg/common/config/types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type Config struct {
2828
}
2929

3030
type Defaults struct {
31+
Enabled *bool `yaml:"enabled"`
3132
FromLatest bool `yaml:"from_latest"`
3233
TwoWayIndexing bool `yaml:"two_way_indexing"`
3334
PollInterval time.Duration `yaml:"poll_interval" validate:"required"`
@@ -42,6 +43,7 @@ type Chains map[string]ChainConfig
4243

4344
type ChainConfig struct {
4445
Name string `yaml:"-"`
46+
Enabled *bool `yaml:"enabled"`
4547
NetworkId string `yaml:"network_id"`
4648
InternalCode string `yaml:"internal_code"`
4749
NativeDenom string `yaml:"native_denom"`

0 commit comments

Comments
 (0)