2018-06-05 12:17:04 -07:00
|
|
|
package config
|
|
|
|
|
2018-09-19 08:25:52 -07:00
|
|
|
import (
|
|
|
|
"fmt"
|
2019-03-25 07:38:15 -07:00
|
|
|
"strings"
|
2018-09-19 08:25:52 -07:00
|
|
|
|
2020-06-16 08:11:02 -07:00
|
|
|
"github.com/spf13/viper"
|
|
|
|
|
2019-10-09 12:57:12 -07:00
|
|
|
"github.com/cosmos/cosmos-sdk/store"
|
2020-06-16 08:11:02 -07:00
|
|
|
"github.com/cosmos/cosmos-sdk/telemetry"
|
2018-09-19 08:25:52 -07:00
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2019-01-18 08:45:20 -08:00
|
|
|
defaultMinGasPrices = ""
|
2018-09-19 08:25:52 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
// BaseConfig defines the server's basic configuration
|
|
|
|
type BaseConfig struct {
|
2019-01-18 08:45:20 -08:00
|
|
|
// The minimum gas prices a validator is willing to accept for processing a
|
2019-02-07 18:14:54 -08:00
|
|
|
// transaction. A transaction's fees must meet the minimum of any denomination
|
2019-03-25 07:38:15 -07:00
|
|
|
// specified in this config (e.g. 0.25token1;0.0001token2).
|
2019-01-24 02:21:02 -08:00
|
|
|
MinGasPrices string `mapstructure:"minimum-gas-prices"`
|
2019-04-23 06:33:11 -07:00
|
|
|
|
2020-06-15 10:39:09 -07:00
|
|
|
Pruning string `mapstructure:"pruning"`
|
|
|
|
PruningKeepEvery string `mapstructure:"pruning-keep-every"`
|
|
|
|
PruningSnapshotEvery string `mapstructure:"pruning-snapshot-every"`
|
|
|
|
|
2019-09-09 07:08:10 -07:00
|
|
|
// HaltHeight contains a non-zero block height at which a node will gracefully
|
|
|
|
// halt and shutdown that can be used to assist upgrades and testing.
|
|
|
|
//
|
2019-12-03 01:24:12 -08:00
|
|
|
// Note: Commitment of state will be attempted on the corresponding block.
|
2019-04-23 06:33:11 -07:00
|
|
|
HaltHeight uint64 `mapstructure:"halt-height"`
|
2019-09-09 07:08:10 -07:00
|
|
|
|
|
|
|
// HaltTime contains a non-zero minimum block time (in Unix seconds) at which
|
|
|
|
// a node will gracefully halt and shutdown that can be used to assist
|
|
|
|
// upgrades and testing.
|
|
|
|
//
|
2019-12-03 01:24:12 -08:00
|
|
|
// Note: Commitment of state will be attempted on the corresponding block.
|
2019-09-09 07:08:10 -07:00
|
|
|
HaltTime uint64 `mapstructure:"halt-time"`
|
|
|
|
|
|
|
|
// InterBlockCache enables inter-block caching.
|
|
|
|
InterBlockCache bool `mapstructure:"inter-block-cache"`
|
2020-06-15 10:39:09 -07:00
|
|
|
}
|
2019-10-03 11:15:38 -07:00
|
|
|
|
2020-06-15 10:39:09 -07:00
|
|
|
// APIConfig defines the API listener configuration.
|
|
|
|
type APIConfig struct {
|
|
|
|
// Enable defines if the API server should be enabled.
|
|
|
|
Enable bool `mapstructure:"enable"`
|
|
|
|
|
|
|
|
// Swagger defines if swagger documentation should automatically be registered.
|
|
|
|
Swagger bool `mapstructure:"swagger"`
|
|
|
|
|
|
|
|
// EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk)
|
|
|
|
EnableUnsafeCORS bool `mapstructure:"enabled-unsafe-cors"`
|
|
|
|
|
|
|
|
// Address defines the API server to listen on
|
|
|
|
Address string `mapstructure:"address"`
|
|
|
|
|
|
|
|
// MaxOpenConnections defines the number of maximum open connections
|
|
|
|
MaxOpenConnections uint `mapstructure:"max-open-connections"`
|
|
|
|
|
|
|
|
// RPCReadTimeout defines the Tendermint RPC read timeout (in seconds)
|
|
|
|
RPCReadTimeout uint `mapstructure:"rpc-read-timeout"`
|
|
|
|
|
|
|
|
// RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds)
|
|
|
|
RPCWriteTimeout uint `mapstructure:"rpc-write-timeout"`
|
|
|
|
|
|
|
|
// RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes)
|
|
|
|
RPCMaxBodyBytes uint `mapstructure:"rpc-max-body-bytes"`
|
|
|
|
|
|
|
|
// TODO: TLS/Proxy configuration.
|
|
|
|
//
|
|
|
|
// Ref: https://github.com/cosmos/cosmos-sdk/issues/6420
|
2018-09-19 08:25:52 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// Config defines the server's top level configuration
|
|
|
|
type Config struct {
|
|
|
|
BaseConfig `mapstructure:",squash"`
|
2020-06-15 10:39:09 -07:00
|
|
|
|
2020-06-16 08:11:02 -07:00
|
|
|
// Telemetry defines the application telemetry configuration
|
|
|
|
Telemetry telemetry.Config `mapstructure:"telemetry"`
|
|
|
|
API APIConfig `mapstructure:"api"`
|
2018-09-19 08:25:52 -07:00
|
|
|
}
|
|
|
|
|
2019-01-18 08:45:20 -08:00
|
|
|
// SetMinGasPrices sets the validator's minimum gas prices.
|
|
|
|
func (c *Config) SetMinGasPrices(gasPrices sdk.DecCoins) {
|
|
|
|
c.MinGasPrices = gasPrices.String()
|
|
|
|
}
|
2018-09-19 08:25:52 -07:00
|
|
|
|
2019-01-18 08:45:20 -08:00
|
|
|
// GetMinGasPrices returns the validator's minimum gas prices based on the set
|
|
|
|
// configuration.
|
|
|
|
func (c *Config) GetMinGasPrices() sdk.DecCoins {
|
2019-03-25 07:38:15 -07:00
|
|
|
if c.MinGasPrices == "" {
|
|
|
|
return sdk.DecCoins{}
|
|
|
|
}
|
|
|
|
|
|
|
|
gasPricesStr := strings.Split(c.MinGasPrices, ";")
|
|
|
|
gasPrices := make(sdk.DecCoins, len(gasPricesStr))
|
|
|
|
|
|
|
|
for i, s := range gasPricesStr {
|
|
|
|
gasPrice, err := sdk.ParseDecCoin(s)
|
|
|
|
if err != nil {
|
|
|
|
panic(fmt.Errorf("failed to parse minimum gas price coin (%s): %s", s, err))
|
|
|
|
}
|
|
|
|
|
|
|
|
gasPrices[i] = gasPrice
|
2018-09-19 08:25:52 -07:00
|
|
|
}
|
2019-01-18 08:45:20 -08:00
|
|
|
|
|
|
|
return gasPrices
|
2018-09-19 08:25:52 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// DefaultConfig returns server's default configuration.
|
2019-01-18 08:45:20 -08:00
|
|
|
func DefaultConfig() *Config {
|
|
|
|
return &Config{
|
2020-06-15 10:39:09 -07:00
|
|
|
BaseConfig: BaseConfig{
|
2020-04-14 08:24:27 -07:00
|
|
|
MinGasPrices: defaultMinGasPrices,
|
|
|
|
InterBlockCache: true,
|
|
|
|
Pruning: store.PruningStrategySyncable,
|
|
|
|
PruningKeepEvery: "0",
|
|
|
|
PruningSnapshotEvery: "0",
|
2019-01-18 08:45:20 -08:00
|
|
|
},
|
2020-06-18 11:12:44 -07:00
|
|
|
Telemetry: telemetry.Config{
|
|
|
|
Enabled: false,
|
|
|
|
GlobalLabels: [][]string{},
|
|
|
|
},
|
2020-06-15 10:39:09 -07:00
|
|
|
API: APIConfig{
|
|
|
|
Enable: false,
|
|
|
|
Swagger: false,
|
|
|
|
Address: "tcp://0.0.0.0:1317",
|
|
|
|
MaxOpenConnections: 1000,
|
|
|
|
RPCReadTimeout: 10,
|
|
|
|
RPCMaxBodyBytes: 1000000,
|
|
|
|
},
|
2019-01-18 08:45:20 -08:00
|
|
|
}
|
|
|
|
}
|
2020-06-16 08:11:02 -07:00
|
|
|
|
|
|
|
// GetConfig returns a fully parsed Config object.
|
|
|
|
func GetConfig() Config {
|
2020-06-18 11:12:44 -07:00
|
|
|
globalLabelsRaw := viper.Get("telemetry.global-labels").([]interface{})
|
|
|
|
globalLabels := make([][]string, 0, len(globalLabelsRaw))
|
|
|
|
for _, glr := range globalLabelsRaw {
|
|
|
|
labelsRaw := glr.([]interface{})
|
|
|
|
if len(labelsRaw) == 2 {
|
|
|
|
globalLabels = append(globalLabels, []string{labelsRaw[0].(string), labelsRaw[1].(string)})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-06-16 08:11:02 -07:00
|
|
|
return Config{
|
|
|
|
BaseConfig: BaseConfig{
|
|
|
|
MinGasPrices: viper.GetString("minimum-gas-prices"),
|
|
|
|
InterBlockCache: viper.GetBool("inter-block-cache"),
|
|
|
|
Pruning: viper.GetString("pruning"),
|
|
|
|
PruningKeepEvery: viper.GetString("pruning-keep-every"),
|
|
|
|
PruningSnapshotEvery: viper.GetString("pruning-snapshot-every"),
|
|
|
|
HaltHeight: viper.GetUint64("halt-height"),
|
|
|
|
HaltTime: viper.GetUint64("halt-time"),
|
|
|
|
},
|
|
|
|
Telemetry: telemetry.Config{
|
|
|
|
ServiceName: viper.GetString("telemetry.service-name"),
|
|
|
|
Enabled: viper.GetBool("telemetry.enabled"),
|
|
|
|
EnableHostname: viper.GetBool("telemetry.enable-hostname"),
|
|
|
|
EnableHostnameLabel: viper.GetBool("telemetry.enable-hostname-label"),
|
|
|
|
EnableServiceLabel: viper.GetBool("telemetry.enable-service-label"),
|
|
|
|
PrometheusRetentionTime: viper.GetInt64("telemetry.prometheus-retention-time"),
|
2020-06-18 11:12:44 -07:00
|
|
|
GlobalLabels: globalLabels,
|
2020-06-16 08:11:02 -07:00
|
|
|
},
|
|
|
|
API: APIConfig{
|
2020-06-16 10:31:35 -07:00
|
|
|
Enable: viper.GetBool("api.enable"),
|
2020-06-16 08:11:02 -07:00
|
|
|
Address: viper.GetString("api.address"),
|
|
|
|
MaxOpenConnections: viper.GetUint("api.max-open-connections"),
|
|
|
|
RPCReadTimeout: viper.GetUint("api.rpc-read-timeout"),
|
|
|
|
RPCWriteTimeout: viper.GetUint("api.rpc-write-timeout"),
|
|
|
|
RPCMaxBodyBytes: viper.GetUint("api.rpc-max-body-bytes"),
|
|
|
|
EnableUnsafeCORS: viper.GetBool("api.enabled-unsafe-cors"),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|