Files
ark/asp/internal/config/config.go
Louis Singer 51bc673e66 Add covenant-based congestion tree (#62)
* covenant based tx builder

* remove relative time delta

* txbuilder/covenant add leaf boolean in node

* txbuilder/covenant final version

* support covenantType

* add GetLeafOutputScript

* remove printLn

* fix linting

* Update asp/internal/app-config/config.go

Co-authored-by: João Bordalo <bordalix@users.noreply.github.com>
Signed-off-by: Louis Singer <41042567+louisinger@users.noreply.github.com>

---------

Signed-off-by: Louis Singer <41042567+louisinger@users.noreply.github.com>
Co-authored-by: João Bordalo <bordalix@users.noreply.github.com>
2023-12-14 14:02:37 +01:00

108 lines
2.6 KiB
Go

package config
import (
"fmt"
"os"
"path/filepath"
"strings"
common "github.com/ark-network/ark/common"
"github.com/spf13/viper"
)
type Config struct {
WalletAddr string
RoundInterval int64
Port uint32
DbType string
DbDir string
SchedulerType string
TxBuilderType string
NoTLS bool
Network common.Network
LogLevel int
}
var (
Datadir = "DATADIR"
WalletAddr = "WALLET_ADDR"
RoundInterval = "ROUND_INTERVAL"
Port = "PORT"
DbType = "DB_TYPE"
SchedulerType = "SCHEDULER_TYPE"
TxBuilderType = "TX_BUILDER_TYPE"
Insecure = "INSECURE"
LogLevel = "LOG_LEVEL"
Network = "NETWORK"
defaultDatadir = common.AppDataDir("arkd", false)
defaultRoundInterval = 60
defaultPort = 6000
defaultDbType = "badger"
defaultSchedulerType = "gocron"
defaultTxBuilderType = "covenant"
defaultInsecure = true
defaultNetwork = "testnet"
defaultLogLevel = 5
)
func LoadConfig() (*Config, error) {
viper.SetEnvPrefix("ARK")
viper.AutomaticEnv()
viper.SetDefault(Datadir, defaultDatadir)
viper.SetDefault(RoundInterval, defaultRoundInterval)
viper.SetDefault(Port, defaultPort)
viper.SetDefault(DbType, defaultDbType)
viper.SetDefault(SchedulerType, defaultSchedulerType)
viper.SetDefault(TxBuilderType, defaultTxBuilderType)
viper.SetDefault(Insecure, defaultInsecure)
viper.SetDefault(LogLevel, defaultLogLevel)
viper.SetDefault(Network, defaultNetwork)
net, err := getNetwork()
if err != nil {
return nil, err
}
if err := initDatadir(); err != nil {
return nil, fmt.Errorf("error while creating datadir: %s", err)
}
return &Config{
WalletAddr: viper.GetString(WalletAddr),
RoundInterval: viper.GetInt64(RoundInterval),
Port: viper.GetUint32(Port),
DbType: viper.GetString(DbType),
SchedulerType: viper.GetString(SchedulerType),
TxBuilderType: viper.GetString(TxBuilderType),
NoTLS: viper.GetBool(Insecure),
DbDir: filepath.Join(viper.GetString(Datadir), "db"),
LogLevel: viper.GetInt(LogLevel),
Network: net,
}, nil
}
func initDatadir() error {
datadir := viper.GetString(Datadir)
return makeDirectoryIfNotExists(datadir)
}
func makeDirectoryIfNotExists(path string) error {
if _, err := os.Stat(path); os.IsNotExist(err) {
return os.MkdirAll(path, os.ModeDir|0755)
}
return nil
}
func getNetwork() (common.Network, error) {
switch strings.ToLower(viper.GetString(Network)) {
case "mainnet":
return common.MainNet, nil
case "testnet":
return common.TestNet, nil
default:
return common.Network{}, fmt.Errorf("unknown network")
}
}