tendermint/config/config.go

215 lines
6.1 KiB
Go
Raw Normal View History

2014-06-06 11:57:22 -07:00
package config
import (
2014-07-01 14:50:24 -07:00
"fmt"
"io/ioutil"
"os"
2015-03-16 23:34:31 -07:00
"path"
2014-07-01 14:50:24 -07:00
"path/filepath"
"strings"
2015-03-16 23:16:26 -07:00
"sync"
2014-06-06 11:57:22 -07:00
2015-01-08 16:40:23 -08:00
flag "github.com/spf13/pflag"
"github.com/tendermint/confer"
)
2014-06-06 11:57:22 -07:00
2015-03-16 23:16:26 -07:00
var app *confer.Config
var appMtx sync.Mutex
func App() *confer.Config {
appMtx.Lock()
defer appMtx.Unlock()
if app == nil {
Init("")
2015-03-16 23:16:26 -07:00
}
return app
}
func SetApp(a *confer.Config) {
appMtx.Lock()
defer appMtx.Unlock()
app = a
}
// NOTE: If you change this, maybe also change initDefaults()
var defaultConfig = `# This is a TOML config file.
2015-01-08 16:40:23 -08:00
# For more information, see https://github.com/toml-lang/toml
2014-06-06 11:57:22 -07:00
network = "tendermint_testnet_5"
moniker = "anonymous"
node_laddr = "0.0.0.0:46656"
seeds = "goldenalchemist.chaintest.net:46656"
fast_sync = true
db_backend = "leveldb"
log_level = "debug"
rpc_laddr = "0.0.0.0:46657"
2015-01-08 16:40:23 -08:00
`
2015-04-02 20:10:37 -07:00
var DefaultGenesis = `{
2015-05-01 17:26:49 -07:00
"accounts": [
2015-03-16 23:34:31 -07:00
{
2015-05-03 22:48:36 -07:00
"address": "93E243AC8A01F723DE353A4FA1ED911529CCB6E5",
2015-05-01 17:26:49 -07:00
"amount": 1049800000000000
2015-05-03 23:06:27 -07:00
},
{
"address": "9e54c9eca9a3fd5d4496696818da17a9e17f69da",
"amount": 1049800000000000
2015-03-16 23:34:31 -07:00
}
2015-04-02 20:10:37 -07:00
],
2015-05-01 17:26:49 -07:00
"validators": [
2015-04-18 23:08:02 -07:00
{
2015-05-03 22:48:36 -07:00
"pub_key": [1, "9D1ACB248A713A4DC03A5546D43D12D10060E0B081B22D5731478314243C75A5"],
2015-05-01 17:26:49 -07:00
"amount": 100000000000,
"unbond_to": [
2015-04-18 23:08:02 -07:00
{
2015-05-03 22:48:36 -07:00
"address": "93E243AC8A01F723DE353A4FA1ED911529CCB6E5",
2015-05-01 17:26:49 -07:00
"amount": 100000000000
2015-04-18 23:08:02 -07:00
}
]
},
2015-05-03 23:06:27 -07:00
{
"pub_key": [1, "e56663353d01c58a1d4cdb4d14b70c2e3335be1ebb6c3f697af7882c03837962"],
"amount": 100000000000,
"unbond_to": [
{
"address": "9e54c9eca9a3fd5d4496696818da17a9e17f69da",
"amount": 100000000000
}
]
},
2015-04-23 21:27:22 -07:00
{
2015-05-03 22:48:36 -07:00
"pub_key": [1, "006C05174D39330324F6DEA0CE8CA263FC023331A107DD6C342B0BF1711B747D"],
2015-05-01 17:26:49 -07:00
"amount": 100000000000,
"unbond_to": [
2015-04-23 21:27:22 -07:00
{
2015-05-03 22:48:36 -07:00
"address": "93E243AC8A01F723DE353A4FA1ED911529CCB6E5",
2015-05-01 17:26:49 -07:00
"amount": 100000000000
2015-04-23 21:27:22 -07:00
}
]
},
2015-04-02 20:10:37 -07:00
{
2015-05-03 22:48:36 -07:00
"pub_key": [1, "7AEAC3C6F053893F9E7FA44AF5024DC45A7857AFA07C4166A2B210340FF3B9A3"],
2015-05-01 17:26:49 -07:00
"amount": 100000000000,
"unbond_to": [
2015-04-02 20:10:37 -07:00
{
2015-05-03 22:48:36 -07:00
"address": "93E243AC8A01F723DE353A4FA1ED911529CCB6E5",
2015-05-01 17:26:49 -07:00
"amount": 100000000000
2015-04-02 20:10:37 -07:00
}
]
2015-04-18 23:08:02 -07:00
},
{
2015-05-03 22:48:36 -07:00
"pub_key": [1, "178EC6008A4364508979C70CBF100BD4BCBAA12DDE6251F5F486B4FD09014F06"],
2015-05-01 17:26:49 -07:00
"amount": 100000000000,
"unbond_to": [
2015-04-18 23:08:02 -07:00
{
2015-05-03 22:48:36 -07:00
"address": "93E243AC8A01F723DE353A4FA1ED911529CCB6E5",
"amount": 100000000000
2015-04-18 23:08:02 -07:00
}
]
},
{
2015-05-03 22:48:36 -07:00
"pub_key": [1, "161F61AB54194473DD018FFFB253FD3D763A92BB97B9CA731CE1E89C2B761FFE"],
2015-05-01 17:26:49 -07:00
"amount": 100000000000,
"unbond_to": [
2015-04-18 23:08:02 -07:00
{
2015-05-03 22:48:36 -07:00
"address": "93E243AC8A01F723DE353A4FA1ED911529CCB6E5",
"amount": 100000000000
2015-04-18 23:08:02 -07:00
}
]
2015-04-02 20:10:37 -07:00
}
]
}`
2015-03-16 23:34:31 -07:00
// NOTE: If you change this, maybe also change defaultConfig
2015-03-16 23:16:26 -07:00
func initDefaults(rootDir string) {
app.SetDefault("network", "tendermint_testnet0")
app.SetDefault("genesis_file", rootDir+"/genesis.json")
app.SetDefault("moniker", "anonymous")
app.SetDefault("node_laddr", "0.0.0.0:46656")
app.SetDefault("seeds", "goldenalchemist.chaintest.net:46656")
app.SetDefault("fast_sync", true)
app.SetDefault("addrbook_file", rootDir+"/addrbook.json")
app.SetDefault("priv_validator_file", rootDir+"/priv_validator.json")
app.SetDefault("db_backend", "leveldb")
app.SetDefault("db_dir", rootDir+"/data")
app.SetDefault("log_level", "info")
app.SetDefault("rpc_laddr", "0.0.0.0:46657")
2015-03-16 23:34:31 -07:00
}
2015-03-16 23:16:26 -07:00
func Init(rootDir string) {
2015-03-16 23:34:31 -07:00
// Get rootdir
if rootDir == "" {
rootDir = os.Getenv("TMROOT")
}
if rootDir == "" {
rootDir = os.Getenv("HOME") + "/.tendermint"
}
2015-03-16 23:34:31 -07:00
configFile := path.Join(rootDir, "config.toml")
genesisFile := path.Join(rootDir, "genesis.json")
// Write default config file if missing.
checkWriteFile(configFile, defaultConfig)
checkWriteFile(genesisFile, DefaultGenesis)
2015-01-08 16:40:23 -08:00
// Initialize Config
2015-03-16 23:16:26 -07:00
app = confer.NewConfig()
initDefaults(rootDir)
2015-01-08 16:40:23 -08:00
paths := []string{configFile}
2015-03-16 23:16:26 -07:00
if err := app.ReadPaths(paths...); err != nil {
2015-01-08 16:40:23 -08:00
log.Warn("Error reading configuration", "paths", paths, "error", err)
}
2015-01-08 16:40:23 -08:00
// Confused?
2015-04-23 14:59:12 -07:00
//app.Debug()
2015-03-16 23:16:26 -07:00
}
// Check if a file exists; if not, ensure the directory is made and write the file
func checkWriteFile(configFile, contents string) {
if _, err := os.Stat(configFile); os.IsNotExist(err) {
if strings.Index(configFile, "/") != -1 {
err := os.MkdirAll(filepath.Dir(configFile), 0700)
if err != nil {
fmt.Printf("Could not create directory: %v", err)
os.Exit(1)
}
}
err := ioutil.WriteFile(configFile, []byte(contents), 0600)
if err != nil {
fmt.Printf("Could not write config file: %v", err)
os.Exit(1)
}
fmt.Printf("Config file written to %v.\n", configFile)
}
}
func ParseFlags(args []string) {
2015-01-08 16:40:23 -08:00
var flags = flag.NewFlagSet("main", flag.ExitOnError)
var printHelp = false
2015-01-08 16:40:23 -08:00
// Declare flags
flags.BoolVar(&printHelp, "help", false, "Print this help message.")
flags.String("moniker", app.GetString("moniker"), "Node Name")
flags.String("node_laddr", app.GetString("node_laddr"), "Node listen address. (0.0.0.0:0 means any interface, any port)")
flags.String("seeds", app.GetString("seeds"), "Comma delimited seed nodes")
flags.Bool("fast_sync", app.GetBool("fast_sync"), "Fast blockchain syncing")
flags.String("rpc_laddr", app.GetString("rpc_laddr"), "RPC listen address. Port required")
flags.String("log_level", app.GetString("log_level"), "Log level")
2015-01-08 16:40:23 -08:00
flags.Parse(args)
if printHelp {
flags.PrintDefaults()
os.Exit(0)
}
2015-01-08 16:40:23 -08:00
2015-03-16 23:16:26 -07:00
// Merge parsed flag values onto app.
app.BindPFlag("moniker", flags.Lookup("moniker"))
app.BindPFlag("node_laddr", flags.Lookup("node_laddr"))
app.BindPFlag("seeds", flags.Lookup("seeds"))
app.BindPFlag("fast_sync", flags.Lookup("fast_sync"))
app.BindPFlag("rpc_laddr", flags.Lookup("rpc_laddr"))
app.BindPFlag("log_level", flags.Lookup("log_level"))
2015-01-08 16:40:23 -08:00
// Confused?
2015-03-16 23:16:26 -07:00
//app.Debug()
}