@@ -25,11 +25,17 @@ import (
25
25
tmtime "github.com/tendermint/tendermint/libs/time"
26
26
"github.com/tendermint/tendermint/privval"
27
27
"github.com/tendermint/tendermint/types"
28
+ "golang.org/x/exp/slices"
28
29
29
30
"github.com/shutter-network/rolling-shutter/rolling-shutter/app"
30
31
)
31
32
32
- const VALIDATOR = "validator"
33
+ const (
34
+ VALIDATOR = "validator"
35
+ ISOLATEDVALIDATOR = "isolated-validator"
36
+ SENTRY = "sentry"
37
+ SEED = "seed"
38
+ )
33
39
34
40
type Config struct {
35
41
RootDir string `mapstructure:"root"`
@@ -67,7 +73,7 @@ func initCmd() *cobra.Command {
67
73
cmd .PersistentFlags ().Float64 ("blocktime" , 1.0 , "block time in seconds" )
68
74
cmd .PersistentFlags ().StringSlice ("genesis-keyper" , nil , "genesis keyper address" )
69
75
cmd .PersistentFlags ().String ("listen-address" , "tcp://127.0.0.1:26657" , "tendermint RPC listen address" )
70
- cmd .PersistentFlags ().String ("role" , "validator" , "tendermint node role (validator, sentry, seed)" )
76
+ cmd .PersistentFlags ().String ("role" , "validator" , "tendermint node role (validator, isolated-validator, sentry, seed)" )
71
77
cmd .PersistentFlags ().Uint64 ("initial-eon" , 0 , "initial eon" )
72
78
return cmd
73
79
}
@@ -97,7 +103,7 @@ func getArgFromViper[T interface{}](getter func(string) T, name string, required
97
103
func initFiles (_ * cobra.Command , config * Config , _ []string ) error {
98
104
keypers := []common.Address {}
99
105
100
- if config . Role == VALIDATOR {
106
+ if slices . Contains ([] string { VALIDATOR , ISOLATEDVALIDATOR }, config . Role ) {
101
107
for _ , a := range config .GenesisKeyper {
102
108
if ! common .IsHexAddress (a ) {
103
109
return errors .Errorf ("--genesis-keyper argument '%s' is not an address" , a )
@@ -126,7 +132,6 @@ func initFiles(_ *cobra.Command, config *Config, _ []string) error {
126
132
tendermintCfg .P2P .ListenAddress = p2pAddress
127
133
128
134
tendermintCfg .P2P .AllowDuplicateIP = true
129
- tendermintCfg .Mode = cfg .ModeValidator
130
135
131
136
tendermintCfg .SetRoot (config .RootDir )
132
137
if err := tendermintCfg .ValidateBasic (); err != nil {
@@ -136,15 +141,19 @@ func initFiles(_ *cobra.Command, config *Config, _ []string) error {
136
141
137
142
// set up according to the network role: https://docs.tendermint.com/v0.34/tendermint-core/validators.html
138
143
switch config .Role {
139
- case VALIDATOR :
144
+ case VALIDATOR : // standard validator mode, network exposed
145
+ tendermintCfg .P2P .PexReactor = true
146
+ tendermintCfg .Mode = cfg .ModeValidator
147
+ tendermintCfg .P2P .AddrBookStrict = true
148
+ case ISOLATEDVALIDATOR : // validator mode behind a sentry node
140
149
tendermintCfg .P2P .PexReactor = false
141
150
tendermintCfg .Mode = cfg .ModeValidator
142
151
tendermintCfg .P2P .AddrBookStrict = false
143
- case "sentry" : // even though "sentry" nodes are documented, there is no special mode
152
+ case SENTRY : // even though "sentry" nodes are documented, there is no special mode
144
153
tendermintCfg .P2P .PexReactor = true
145
154
tendermintCfg .Mode = cfg .ModeFull
146
155
tendermintCfg .P2P .AddrBookStrict = false
147
- case "seed" :
156
+ case SEED :
148
157
tendermintCfg .P2P .PexReactor = true
149
158
tendermintCfg .Mode = cfg .ModeSeed
150
159
tendermintCfg .P2P .AddrBookStrict = false
@@ -179,7 +188,7 @@ func adjustPort(address string, keyperIndex int) (string, error) {
179
188
180
189
func initFilesWithConfig (tendermintConfig * cfg.Config , config * Config , appState app.GenesisAppState ) error {
181
190
var err error
182
- if config . Role == VALIDATOR {
191
+ if slices . Contains ([] string { VALIDATOR , ISOLATEDVALIDATOR }, config . Role ) {
183
192
// private validator
184
193
privValKeyFile := tendermintConfig .PrivValidator .KeyFile ()
185
194
privValStateFile := tendermintConfig .PrivValidator .StateFile ()
0 commit comments