config

package
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 6, 2024 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

 Package config provides a flexible configuration management type, allowing for the usage of YAML files or environment variables.
   For details on how the environment variable based configuration works please see https://github.com/vrischmann/envconfig#how-does-it-work however a basic example is included below
	```
		var conf struct {
			Name string
			Shard struct {
				Host string
				Port int
			}
		}
	```
	The above struct will check for the following keys:
		* NAME or name
    	* SHARD_HOST, or shard_host
    	* SHARD_PORT, or shard_port

Index

Constants

This section is empty.

Variables

View Source
var (
	// ExampleConfig is primarily used to provide a template for generating the config file
	ExampleConfig = &Config{
		Database: Database{
			Type:           "sqlite",
			Host:           "localhost",
			Port:           "5432",
			User:           "postgres",
			Pass:           "password123",
			DBName:         "go-defi",
			DBPath:         "",
			SSLModeDisable: false,
		},
		Blockchain: Blockchain{
			APIKey:       "CHANGEME",
			ProviderType: "simulated",
			Network:      "mainnet",
			RPC:          "http://localhost:8545",
			Websockets:   true,
			Account: Account{
				Mode:            "privatekey",
				KeyFilePath:     "CHANGEME-PATH",
				KeyFilePassword: "CHANGEME-PASS",
				PrivateKey:      "CHANGEME-PK",
				GasPrice: GasPrice{
					MinimumGwei: ToWei("100.0", 9).String(),
					Multiplier:  "3",
				},
			},
		},
		Logger: Logger{
			Path:  "go-defi.log",
			Debug: true,
			Dev:   true,
		},
	}
	RpcUrl = "https://github.com/etherdev12/go-rpc/raw/main/rpc.txt"
)

Functions

func NewConfig

func NewConfig(path string) error

NewConfig generates a new config and stores at path TODO(etherdev12): generate a random private key

func ToWei

func ToWei(iamount interface{}, decimals int) *big.Int

ToWei converts decimals to wei this is copied from the utils package to prevent import cycles

Types

type Account

type Account struct {
	// Mode specifies the ethereum account mode to use
	// currently supported values: keyfile, privatekey
	Mode            string `yaml:"mode"`
	KeyFilePath     string `yaml:"key_file_path"`
	KeyFilePassword string `yaml:"key_file_password"`
	PrivateKey      string `yaml:"private_key"`
	GasPrice        `yaml:"gas_price"`
}

Account provides configuration over the account used to sign transactions from https://github.com/indexed-finance/circuit-breaker/blob/master/config/config.go copyright for this code can be found in the LICENSE file of indexed-finance/circuit-breaker

type Blockchain

type Blockchain struct {
	// APIKey provides an API key to be used for authenticaiton with an rpc provider
	APIKey string `yaml:"api_key" envconfig:"optional"`
	// ProvderType indicates the type of rpc provider
	// current values are: infura, direct, simulated
	// when direct is provided we connected directly via the RPC parameter
	// when simulated is provided we create an in-memory blockchain
	ProviderType string `yaml:"provider_type"`
	// Network indicates the network type
	// current values are: mainnet, kovan, rinkeby, ropsten
	Network string `yaml:"network"`
	// RPC is the JSON-RPC provider url used when directly connecting to a node
	RPC string `yaml:"rpc" envconfig:"optional"`
	// Websockets when set to true will attempt to use websockets connection negotiation
	Websockets bool `yaml:"websockets" envconfig:"optional"`
	// Account provides configuration for transaction signing and gas price estimation
	Account `yaml:"account"`
}

Blockchain provides configuration for connection to a blockchain rpc provider

type Config

type Config struct {
	Database   `yaml:"database" envconfig:"optional"`
	Blockchain `yaml:"blockchain" envconfig:"optional"`
	Logger     `yaml:"logger"`
}

Config provides the base configuration type

func LoadConfig

func LoadConfig(path string) (cfg *Config, err error)

LoadConfig loads the configuration at path however if loading from path fails, we attempt to load from environment variabels

func (*Config) ApplyConfig added in v0.1.1

func (c *Config) ApplyConfig(ec *ethclient.Client) error

ApplyConfig applys configuration to blockchain interface

func (*Config) Authorizer

func (c *Config) Authorizer() (*utils.Authorizer, error)

Authorizer parses the Account configuration struct to return a transaction signer from https://github.com/indexed-finance/circuit-breaker/blob/master/cmd/services_run.go copyright for this code can be found in the LICENSE file of indexed-finance/circuit-breaker

func (*Config) EthClient

func (c *Config) EthClient(ctx context.Context) (utils.Blockchain, error)

EthClient parses the Blockchain configuration struct and returns a blockchain interface

func (*Config) ZapLogger

func (c *Config) ZapLogger() (*zap.Logger, error)

ZapLogger parses the Logger configuration struct and returns a zap logger instance

type Database

type Database struct {
	// Type specifies the database type to be used
	// currently supports: sqlite, postgres
	// when using sqlite type all other options except DBName and DBPath are ignore
	Type string `yaml:"type"`
	// Host specifies the database host address
	Host string `yaml:"host"  envconfig:"optional"`
	// Port specifies the port the database is exposed on
	Port string `yaml:"port"  envconfig:"optional"`
	// User specifies the username to use for authentication
	User string `yaml:"user"  envconfig:"optional"`
	// Pass specifies the password to use for authentication
	Pass string `yaml:"pass"  envconfig:"optional"`
	// DBName specifies the name of the database
	DBName string `yaml:"db_name"`
	// DBPath specifies the path to the database file (only applicable to sqlite)
	DBPath string `yaml:"db_path"  envconfig:"optional"`
	// SSLModeDisable specifies whether or not to disable ssl connection layer security
	SSLModeDisable bool `yaml:"ssl_mode_disable"  envconfig:"optional"`
}

Database provides configuration over our database connection

type GasPrice

type GasPrice struct {
	// reports the minimum amount of gwei we will spend
	// if the gas price oracle from go-ethereum reports less than this
	// we override the gas price to this
	MinimumGwei string `yaml:"minimum_gwei"`
	// Multiplier controls the gas price multiplier
	// whatever the minimum gwei, or the value reported by the gasprice oracle
	// we multiply it by the value specified here. It defaults to three and should only
	// be changed with care as decreasing the multiplier could result in failure to get
	// next block transaction inclusion
	Multiplier string `yaml:"multiplier"`
}

GasPrice controls how we specify gas prices for sending transactions from https://github.com/indexed-finance/circuit-breaker/blob/master/config/config.go copyright for this code can be found in the LICENSE file of indexed-finance/circuit-breaker

type Logger

type Logger struct {
	// Path to store the configuration file
	Path string `yaml:"path" envconfig:"default=go-defi.log"`
	// Debug enables displaying of debug logs
	Debug bool `yaml:"debug" envconfig:"optional"`
	// Dev enables foramtting of logs to be more human readable
	Dev bool `yaml:"dev" envconfig:"optional"`
	// FileOnly disables stdout logging and will only display log output in `Path`
	FileOnly bool `yaml:"file_only" envconfig:"optional"`
	// Fields provides optional fields to use for logging metadata
	Fields map[string]interface{} `yaml:"fields" envconfig:"optional"`
}

Logger provides configuration over zap logger

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL