diff --git a/cmd/thalos/server.go b/cmd/thalos/server.go index 2aed773..0fa0c4a 100644 --- a/cmd/thalos/server.go +++ b/cmd/thalos/server.go @@ -238,6 +238,8 @@ func GetConfig(flags *pflag.FlagSet) (*config.Config, error) { } } + cfg.Ship.Blacklist.SetWhitelist(cfg.Ship.BlacklistIsWhitelist) + return cfg, nil } diff --git a/config.example.yml b/config.example.yml index 84990b1..9d6deef 100644 --- a/config.example.yml +++ b/config.example.yml @@ -54,6 +54,8 @@ ship: # blacklist all action from a contract # evilcontract: ["*"] + # blacklist_is_whitelist: true + # Telegram notifications #telegram: # id: "123456789:GPdmGPBWvpgHPxlergJLavus-PoAURTjMWP" diff --git a/internal/config/builder.go b/internal/config/builder.go index d273858..2967f63 100644 --- a/internal/config/builder.go +++ b/internal/config/builder.go @@ -53,6 +53,7 @@ func NewBuilder() *Builder { "ship.max_messages_in_flight": "max-msg-in-flight", "ship.chain": "chain", "ship.blacklist": "blacklist", + "ship.blacklist_is_whitelist": "blacklist-is-whitelist", }, } } diff --git a/internal/config/builder_test.go b/internal/config/builder_test.go index bec8178..df24552 100644 --- a/internal/config/builder_test.go +++ b/internal/config/builder_test.go @@ -32,6 +32,7 @@ func TestBuilder(t *testing.T) { "eosio": {"noop"}, "contract": {"skip1", "skip2"}, }), + BlacklistIsWhitelist: true, }, Telegram: TelegramConfig{ Id: "110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw", @@ -68,6 +69,7 @@ ship: contract: - skip1 - skip2 + blacklist_is_whitelist: true telegram: id: "110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw" channel: -123456789 @@ -186,6 +188,7 @@ func TestBuilder_Flags(t *testing.T) { require.NoError(t, flags.Set("max-msg-in-flight", "98")) require.NoError(t, flags.Set("chain", "wax")) require.NoError(t, flags.Set("blacklist", "contract:action1,contract:action2,contract2:action1")) + require.NoError(t, flags.Set("blacklist-is-whitelist", "true")) cfg, err := NewBuilder(). SetSource(bytes.NewReader([]byte(``))). @@ -211,6 +214,7 @@ func TestBuilder_Flags(t *testing.T) { "contract": {"action1", "action2"}, "contract2": {"action1"}, }), + BlacklistIsWhitelist: true, }, Telegram: TelegramConfig{ Id: "72983126312982618", diff --git a/internal/config/cli.go b/internal/config/cli.go index 38439a5..85d8f39 100644 --- a/internal/config/cli.go +++ b/internal/config/cli.go @@ -44,6 +44,7 @@ func GetFlags() *pflag.FlagSet { flags.String("chain", "", "ChainID used in channel namespace, can be any string (default from api)") flags.StringSlice("blacklist", []string{}, "Define a list of 'contract:action' pairs that will be blacklisted (thalos will not process those actions)") + flags.Bool("blacklist-is-whitelist", false, "Thalos will treat the blacklist as a whitelist") return &flags } diff --git a/internal/config/config.go b/internal/config/config.go index 5e84072..7bb8b4b 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -19,13 +19,14 @@ type TelegramConfig struct { } type ShipConfig struct { - Url string `yaml:"url" mapstructure:"url"` - IrreversibleOnly bool `yaml:"irreversible_only" mapstructure:"irreversible_only"` - MaxMessagesInFlight uint32 `yaml:"max_messages_in_flight" mapstructure:"max_messages_in_flight"` - StartBlockNum uint32 `yaml:"start_block_num" mapstructure:"start_block_num"` - EndBlockNum uint32 `yaml:"end_block_num" mapstructure:"end_block_num"` - Chain string `yaml:"chain" mapstructure:"chain"` - Blacklist types.Blacklist `yaml:"blacklist" mapstructure:"blacklist"` + Url string `yaml:"url" mapstructure:"url"` + IrreversibleOnly bool `yaml:"irreversible_only" mapstructure:"irreversible_only"` + MaxMessagesInFlight uint32 `yaml:"max_messages_in_flight" mapstructure:"max_messages_in_flight"` + StartBlockNum uint32 `yaml:"start_block_num" mapstructure:"start_block_num"` + EndBlockNum uint32 `yaml:"end_block_num" mapstructure:"end_block_num"` + Chain string `yaml:"chain" mapstructure:"chain"` + Blacklist types.Blacklist `yaml:"blacklist" mapstructure:"blacklist"` + BlacklistIsWhitelist bool `yaml:"blacklist_is_whitelist" mapstructure:"blacklist_is_whitelist"` } type Config struct {