mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-14 13:51:21 +00:00
new config
This commit is contained in:
@ -20,12 +20,12 @@ var RootCmd = &cobra.Command{
|
|||||||
Short: "Tendermint Core (BFT Consensus) in Go",
|
Short: "Tendermint Core (BFT Consensus) in Go",
|
||||||
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
PersistentPreRun: func(cmd *cobra.Command, args []string) {
|
||||||
// set the log level in the config and logger
|
// set the log level in the config and logger
|
||||||
config.Set("log_level", logLevel)
|
config.Set("node.log_level", logLevel)
|
||||||
logger.SetLogLevel(logLevel)
|
logger.SetLogLevel(logLevel)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
//parse flag and set config
|
//parse flag and set config
|
||||||
RootCmd.PersistentFlags().StringVar(&logLevel, "log_level", config.GetString("log_level"), "Log level")
|
RootCmd.PersistentFlags().StringVar(&logLevel, "log_level", config.GetString("node.log_level"), "Log level")
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
//cfg "github.com/tendermint/tendermint/config/tendermint"
|
||||||
"github.com/tendermint/tendermint/node"
|
"github.com/tendermint/tendermint/node"
|
||||||
"github.com/tendermint/tendermint/types"
|
"github.com/tendermint/tendermint/types"
|
||||||
cmn "github.com/tendermint/tmlibs/common"
|
cmn "github.com/tendermint/tmlibs/common"
|
||||||
@ -36,23 +37,23 @@ var (
|
|||||||
func init() {
|
func init() {
|
||||||
|
|
||||||
// configuration options
|
// configuration options
|
||||||
runNodeCmd.Flags().StringVar(&moniker, "moniker", config.GetString("moniker"),
|
runNodeCmd.Flags().StringVar(&moniker, "moniker", config.GetString("node.moniker"),
|
||||||
"Node Name")
|
"Node Name")
|
||||||
runNodeCmd.Flags().StringVar(&nodeLaddr, "node_laddr", config.GetString("node_laddr"),
|
runNodeCmd.Flags().StringVar(&nodeLaddr, "node_laddr", config.GetString("node.listen_addr"),
|
||||||
"Node listen address. (0.0.0.0:0 means any interface, any port)")
|
"Node listen address. (0.0.0.0:0 means any interface, any port)")
|
||||||
runNodeCmd.Flags().StringVar(&seeds, "seeds", config.GetString("seeds"),
|
runNodeCmd.Flags().StringVar(&seeds, "seeds", config.GetString("network.seeds"),
|
||||||
"Comma delimited host:port seed nodes")
|
"Comma delimited host:port seed nodes")
|
||||||
runNodeCmd.Flags().BoolVar(&fastSync, "fast_sync", config.GetBool("fast_sync"),
|
runNodeCmd.Flags().BoolVar(&fastSync, "fast_sync", config.GetBool("blockchain.fast_sync"),
|
||||||
"Fast blockchain syncing")
|
"Fast blockchain syncing")
|
||||||
runNodeCmd.Flags().BoolVar(&skipUPNP, "skip_upnp", config.GetBool("skip_upnp"),
|
runNodeCmd.Flags().BoolVar(&skipUPNP, "skip_upnp", config.GetBool("network.skip_upnp"),
|
||||||
"Skip UPNP configuration")
|
"Skip UPNP configuration")
|
||||||
runNodeCmd.Flags().StringVar(&rpcLaddr, "rpc_laddr", config.GetString("rpc_laddr"),
|
runNodeCmd.Flags().StringVar(&rpcLaddr, "rpc_laddr", config.GetString("rpc.listen_addr"),
|
||||||
"RPC listen address. Port required")
|
"RPC listen address. Port required")
|
||||||
runNodeCmd.Flags().StringVar(&grpcLaddr, "grpc_laddr", config.GetString("grpc_laddr"),
|
runNodeCmd.Flags().StringVar(&grpcLaddr, "grpc_laddr", config.GetString("grpc.listen_addr"),
|
||||||
"GRPC listen address (BroadcastTx only). Port required")
|
"GRPC listen address (BroadcastTx only). Port required")
|
||||||
runNodeCmd.Flags().StringVar(&proxyApp, "proxy_app", config.GetString("proxy_app"),
|
runNodeCmd.Flags().StringVar(&proxyApp, "proxy_app", config.GetString("abci.proxy_app"),
|
||||||
"Proxy app address, or 'nilapp' or 'dummy' for local testing.")
|
"Proxy app address, or 'nilapp' or 'dummy' for local testing.")
|
||||||
runNodeCmd.Flags().StringVar(&abciTransport, "abci", config.GetString("abci"),
|
runNodeCmd.Flags().StringVar(&abciTransport, "abci", config.GetString("abci.mode"),
|
||||||
"Specify abci transport (socket | grpc)")
|
"Specify abci transport (socket | grpc)")
|
||||||
|
|
||||||
// feature flags
|
// feature flags
|
||||||
@ -65,16 +66,16 @@ func init() {
|
|||||||
func setConfigFlags(cmd *cobra.Command, args []string) {
|
func setConfigFlags(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
// Merge parsed flag values onto config
|
// Merge parsed flag values onto config
|
||||||
config.Set("moniker", moniker)
|
config.Set("node.moniker", moniker)
|
||||||
config.Set("node_laddr", nodeLaddr)
|
config.Set("node.listen_addr", nodeLaddr)
|
||||||
config.Set("seeds", seeds)
|
config.Set("network.seeds", seeds)
|
||||||
config.Set("fast_sync", fastSync)
|
config.Set("network.skip_upnp", skipUPNP)
|
||||||
config.Set("skip_upnp", skipUPNP)
|
config.Set("network.pex_reactor", pex)
|
||||||
config.Set("rpc_laddr", rpcLaddr)
|
config.Set("blockchain.fast_sync", fastSync)
|
||||||
config.Set("grpc_laddr", grpcLaddr)
|
config.Set("rpc.listen_addr", rpcLaddr)
|
||||||
config.Set("proxy_app", proxyApp)
|
config.Set("rpc.grpc_listen_addr", grpcLaddr)
|
||||||
config.Set("abci", abciTransport)
|
config.Set("abci.proxy_app", proxyApp)
|
||||||
config.Set("pex_reactor", pex)
|
config.Set("abci.mode", abciTransport)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Users wishing to:
|
// Users wishing to:
|
||||||
@ -113,7 +114,7 @@ func runNode(cmd *cobra.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create & start node
|
// Create & start node
|
||||||
n := node.NewNodeDefault(config)
|
n := node.NewNodeDefault(config) //tmConfig)
|
||||||
if _, err := n.Start(); err != nil {
|
if _, err := n.Start(); err != nil {
|
||||||
return fmt.Errorf("Failed to start node: %v", err)
|
return fmt.Errorf("Failed to start node: %v", err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -53,59 +53,54 @@ func GetConfig(rootDir string) *viper.Viper {
|
|||||||
//config.WatchConfig()
|
//config.WatchConfig()
|
||||||
|
|
||||||
// Set defaults or panic
|
// Set defaults or panic
|
||||||
if config.IsSet("chain_id") {
|
if config.IsSet("chain.chain_id") {
|
||||||
cmn.Exit("Cannot set 'chain_id' via config.toml")
|
cmn.Exit("Cannot set 'chain_id' via config.toml")
|
||||||
}
|
}
|
||||||
if config.IsSet("revision_file") {
|
|
||||||
cmn.Exit("Cannot set 'revision_file' via config.toml. It must match what's in the Makefile")
|
|
||||||
}
|
|
||||||
//mapConfig.SetRequired("chain_id") // blows up if you try to use it before setting.
|
//mapConfig.SetRequired("chain_id") // blows up if you try to use it before setting.
|
||||||
config.SetDefault("genesis_file", rootDir+"/genesis.json")
|
config.SetDefault("node.moniker", "anonymous")
|
||||||
config.SetDefault("proxy_app", "tcp://127.0.0.1:46658")
|
config.SetDefault("node.log_level", "info")
|
||||||
config.SetDefault("abci", "socket")
|
config.SetDefault("node.prof_laddr", "")
|
||||||
config.SetDefault("moniker", "anonymous")
|
config.SetDefault("chain.genesis_file", rootDir+"/genesis.json")
|
||||||
config.SetDefault("node_laddr", "tcp://0.0.0.0:46656")
|
config.SetDefault("abci.proxy_app", "tcp://127.0.0.1:46658")
|
||||||
config.SetDefault("seeds", "")
|
config.SetDefault("abci.mode", "socket")
|
||||||
// config.SetDefault("seeds", "goldenalchemist.chaintest.net:46656")
|
config.SetDefault("abci.filter_peers", false)
|
||||||
config.SetDefault("fast_sync", true)
|
config.SetDefault("network.listen_addr", "tcp://0.0.0.0:46656")
|
||||||
config.SetDefault("skip_upnp", false)
|
config.SetDefault("network.seeds", "")
|
||||||
config.SetDefault("addrbook_file", rootDir+"/addrbook.json")
|
config.SetDefault("network.skip_upnp", false)
|
||||||
config.SetDefault("addrbook_strict", true) // disable to allow connections locally
|
config.SetDefault("blockchain.fast_sync", true)
|
||||||
config.SetDefault("pex_reactor", false) // enable for peer exchange
|
config.SetDefault("network.addrbook_file", rootDir+"/addrbook.json")
|
||||||
config.SetDefault("priv_validator_file", rootDir+"/priv_validator.json")
|
config.SetDefault("network.addrbook_strict", true) // disable to allow connections locally
|
||||||
config.SetDefault("db_backend", "leveldb")
|
config.SetDefault("network.pex_reactor", false) // enable for peer exchange
|
||||||
config.SetDefault("db_dir", rootDir+"/data")
|
config.SetDefault("node.priv_validator_file", rootDir+"/priv_validator.json")
|
||||||
config.SetDefault("log_level", "info")
|
config.SetDefault("db.backend", "leveldb")
|
||||||
config.SetDefault("rpc_laddr", "tcp://0.0.0.0:46657")
|
config.SetDefault("db.dir", rootDir+"/data")
|
||||||
config.SetDefault("grpc_laddr", "")
|
config.SetDefault("rpc.listen_addr", "tcp://0.0.0.0:46657")
|
||||||
config.SetDefault("prof_laddr", "")
|
config.SetDefault("rpc.grpc_listen_addr", "")
|
||||||
config.SetDefault("revision_file", rootDir+"/revision")
|
config.SetDefault("consensus.wal_file", rootDir+"/data/cs.wal/wal")
|
||||||
config.SetDefault("cs_wal_file", rootDir+"/data/cs.wal/wal")
|
config.SetDefault("consensus.wal_light", false)
|
||||||
config.SetDefault("cs_wal_light", false)
|
|
||||||
config.SetDefault("filter_peers", false)
|
|
||||||
|
|
||||||
config.SetDefault("block_size", 10000) // max number of txs
|
config.SetDefault("block.max_txs", 10000) // max number of txs
|
||||||
config.SetDefault("block_part_size", 65536) // part size 64K
|
config.SetDefault("block.part_size", 65536) // part size 64K
|
||||||
config.SetDefault("disable_data_hash", false)
|
config.SetDefault("block.disable_data_hash", false)
|
||||||
|
|
||||||
// all timeouts are in ms
|
// all timeouts are in ms
|
||||||
config.SetDefault("timeout_handshake", 10000)
|
config.SetDefault("consensus.timeout_handshake", 10000)
|
||||||
config.SetDefault("timeout_propose", 3000)
|
config.SetDefault("consensus.timeout_propose", 3000)
|
||||||
config.SetDefault("timeout_propose_delta", 500)
|
config.SetDefault("consensus.timeout_propose_delta", 500)
|
||||||
config.SetDefault("timeout_prevote", 1000)
|
config.SetDefault("consensus.timeout_prevote", 1000)
|
||||||
config.SetDefault("timeout_prevote_delta", 500)
|
config.SetDefault("consensus.timeout_prevote_delta", 500)
|
||||||
config.SetDefault("timeout_precommit", 1000)
|
config.SetDefault("consensus.timeout_precommit", 1000)
|
||||||
config.SetDefault("timeout_precommit_delta", 500)
|
config.SetDefault("consensus.timeout_precommit_delta", 500)
|
||||||
config.SetDefault("timeout_commit", 1000)
|
config.SetDefault("consensus.timeout_commit", 1000)
|
||||||
|
|
||||||
// make progress asap (no `timeout_commit`) on full precommit votes
|
// make progress asap (no `timeout_commit`) on full precommit votes
|
||||||
config.SetDefault("skip_timeout_commit", false)
|
config.SetDefault("consensus.skip_timeout_commit", false)
|
||||||
config.SetDefault("mempool_recheck", true)
|
config.SetDefault("mempool.recheck", true)
|
||||||
config.SetDefault("mempool_recheck_empty", true)
|
config.SetDefault("mempool.recheck_empty", true)
|
||||||
config.SetDefault("mempool_broadcast", true)
|
config.SetDefault("mempool.broadcast", true)
|
||||||
config.SetDefault("mempool_wal_dir", rootDir+"/data/mempool.wal")
|
config.SetDefault("mempool.wal_dir", rootDir+"/data/mempool.wal")
|
||||||
|
|
||||||
config.SetDefault("tx_index", "kv")
|
config.SetDefault("db.tx_index", "kv")
|
||||||
|
|
||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
|
89
config/tendermint/types.go
Normal file
89
config/tendermint/types.go
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
package tendermint
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
Node NodeConfig `mapstructure:"node"`
|
||||||
|
Chain ChainConfig `mapstructure:"chain"`
|
||||||
|
ABCI ABCIConfig `mapstructure:"abci"`
|
||||||
|
Network NetworkConfig `mapstructure:"network"`
|
||||||
|
Blockchain BlockchainConfig `mapstructure:"blockchain"`
|
||||||
|
Consensus ConsensusConfig `mapstructure:"consensus"`
|
||||||
|
Block BlockConfig `mapstructure:"block"`
|
||||||
|
Mempool MempoolConfig `mapstructure:"mempool"`
|
||||||
|
RPC RPCConfig `mapstructure:"rpc"`
|
||||||
|
DB DBConfig `mapstructure:"db"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type NodeConfig struct {
|
||||||
|
Moniker string `mapstructure:"moniker"` // "anonymous"
|
||||||
|
PrivValidatorFile string `mapstructure:"priv_validator_file"` // rootDir+"/priv_validator.json")
|
||||||
|
|
||||||
|
LogLevel string `mapstructure:"log_level"` // info
|
||||||
|
ProfListenAddr string `mapstructure:"prof_laddr"` // ""
|
||||||
|
}
|
||||||
|
|
||||||
|
type ChainConfig struct {
|
||||||
|
ChainID string `mapstructure:"chain_id"`
|
||||||
|
GenesisFile string `mapstructure:"genesis_file"` // rootDir/genesis.json
|
||||||
|
}
|
||||||
|
|
||||||
|
type ABCIConfig struct {
|
||||||
|
ProxyApp string `mapstructure:"proxy_app"` // tcp://0.0.0.0:46658
|
||||||
|
Mode string `mapstructure:"mode"` // socket
|
||||||
|
|
||||||
|
FilterPeers bool `mapstructure:"filter_peers"` // false
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetworkConfig struct {
|
||||||
|
ListenAddr string `mapstructure:"listen_adddr"` // "tcp://0.0.0.0:46656")
|
||||||
|
Seeds string `mapstructure:"seeds"` // []string ...
|
||||||
|
SkipUPNP bool `mapstructure:"skip_upnp"`
|
||||||
|
AddrBookFile string `mapstructure:"addr_book_file"` // rootDir+"/addrbook.json")
|
||||||
|
AddrBookString bool `mapstructure:"addr_book_string"` // true
|
||||||
|
PexReactor bool `mapstructure:"pex_reactor"` // false
|
||||||
|
}
|
||||||
|
|
||||||
|
type BlockchainConfig struct {
|
||||||
|
FastSync bool `mapstructure:"fast_sync"` // true
|
||||||
|
}
|
||||||
|
|
||||||
|
type ConsensusConfig struct {
|
||||||
|
WalFile string `mapstructure:"wal_file"` //rootDir+"/data/cs.wal/wal")
|
||||||
|
WalLight bool `mapstructure:"wal_light"` // false
|
||||||
|
|
||||||
|
// all timeouts are in ms
|
||||||
|
TimeoutPropose int `mapstructure:"timeout_propose"` // 3000
|
||||||
|
TimeoutProposeDelta int `mapstructure:"timeout_propose_delta"` // 500
|
||||||
|
TimeoutPrevote int `mapstructure:"timeout_prevote"` // 1000
|
||||||
|
TimeoutPrevoteDelta int `mapstructure:"timeout_prevote_delta"` // 500
|
||||||
|
TimeoutPrecommit int `mapstructure:"timeout_precommit"` // 1000
|
||||||
|
TimeoutPrecommitDelta int `mapstructure:"timeout_precommit_delta"` // 500
|
||||||
|
TimeoutCommit int `mapstructure:"timeout_commit"` // 1000
|
||||||
|
|
||||||
|
// make progress asap (no `timeout_commit`) on full precommit votes
|
||||||
|
SkipTimeoutCommit bool `mapstructure:"skip_timeout_commit"` // false
|
||||||
|
}
|
||||||
|
|
||||||
|
type BlockConfig struct {
|
||||||
|
MaxTxs int `mapstructure:"max_txs"` // 10000
|
||||||
|
PartSize int `mapstructure:"part_size"` // 65536
|
||||||
|
DisableDataHash bool `mapstructure:"disable_data_hash"` // false
|
||||||
|
}
|
||||||
|
|
||||||
|
type MempoolConfig struct {
|
||||||
|
Recheck bool `mapstructure:"recheck"` // true
|
||||||
|
RecheckEmpty bool `mapstructure:"recheck_empty"` // true
|
||||||
|
Broadcast bool `mapstructure:"broadcast"` // true
|
||||||
|
WalDir string `mapstructure:"wal_dir"` // rootDir+"/data/mempool.wal")
|
||||||
|
}
|
||||||
|
|
||||||
|
type RPCConfig struct {
|
||||||
|
RPCListenAddress string `mapstructure:"rpc_listen_addr"` // "tcp://0.0.0.0:46657")
|
||||||
|
GRPCListenAddress string `mapstructure:"grpc_listen_addr"` // ""
|
||||||
|
}
|
||||||
|
|
||||||
|
type DBConfig struct {
|
||||||
|
Backend string `mapstructure:"backend"` // leveldb
|
||||||
|
Dir string `mapstructure:"dir"` // rootDir/data
|
||||||
|
|
||||||
|
TxIndex string `mapstructure:"tx_index"` // "kv"
|
||||||
|
}
|
18
node/node.go
18
node/node.go
@ -13,6 +13,7 @@ import (
|
|||||||
crypto "github.com/tendermint/go-crypto"
|
crypto "github.com/tendermint/go-crypto"
|
||||||
wire "github.com/tendermint/go-wire"
|
wire "github.com/tendermint/go-wire"
|
||||||
bc "github.com/tendermint/tendermint/blockchain"
|
bc "github.com/tendermint/tendermint/blockchain"
|
||||||
|
tmcfg "github.com/tendermint/tendermint/config/tendermint"
|
||||||
"github.com/tendermint/tendermint/consensus"
|
"github.com/tendermint/tendermint/consensus"
|
||||||
mempl "github.com/tendermint/tendermint/mempool"
|
mempl "github.com/tendermint/tendermint/mempool"
|
||||||
p2p "github.com/tendermint/tendermint/p2p"
|
p2p "github.com/tendermint/tendermint/p2p"
|
||||||
@ -67,21 +68,26 @@ func NewNodeDefault(config *viper.Viper) *Node {
|
|||||||
config.GetString("abci"),
|
config.GetString("abci"),
|
||||||
config.GetString("db_dir"),
|
config.GetString("db_dir"),
|
||||||
))
|
))
|
||||||
|
// config.ABCI.ProxyApp, config.ABCI.Mode, config.DB.Dir))
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNode(config *viper.Viper, privValidator *types.PrivValidator, clientCreator proxy.ClientCreator) *Node {
|
func NewNode(config *viper.Viper, privValidator *types.PrivValidator, clientCreator proxy.ClientCreator) *Node {
|
||||||
|
|
||||||
|
tmConfig := new(tmcfg.Config)
|
||||||
|
if err := config.Unmarshal(tmConfig); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
// Get BlockStore
|
// Get BlockStore
|
||||||
blockStoreDB := dbm.NewDB("blockstore", config.GetString("db_backend"), config.GetString("db_dir"))
|
blockStoreDB := dbm.NewDB("blockstore", tmConfig.DB.Backend, tmConfig.DB.Dir)
|
||||||
blockStore := bc.NewBlockStore(blockStoreDB)
|
blockStore := bc.NewBlockStore(blockStoreDB)
|
||||||
|
|
||||||
// Get State
|
// Get State
|
||||||
stateDB := dbm.NewDB("state", config.GetString("db_backend"), config.GetString("db_dir"))
|
stateDB := dbm.NewDB("state", tmConfig.DB.Backend, tmConfig.DB.Dir)
|
||||||
state := sm.GetState(stateDB, config.GetString("genesis_file"))
|
state := sm.GetState(stateDB, tmConfig.Chain.GenesisFile)
|
||||||
|
|
||||||
// add the chainid and number of validators to the global config
|
// add the chainid and number of validators to the global config
|
||||||
config.Set("chain_id", state.ChainID)
|
config.Set("chain_id", state.ChainID)
|
||||||
config.Set("num_vals", state.Validators.Size())
|
|
||||||
|
|
||||||
// Create the proxyApp, which manages connections (consensus, mempool, query)
|
// Create the proxyApp, which manages connections (consensus, mempool, query)
|
||||||
// and sync tendermint and the app by replaying any necessary blocks
|
// and sync tendermint and the app by replaying any necessary blocks
|
||||||
@ -95,9 +101,9 @@ func NewNode(config *viper.Viper, privValidator *types.PrivValidator, clientCrea
|
|||||||
|
|
||||||
// Transaction indexing
|
// Transaction indexing
|
||||||
var txIndexer txindex.TxIndexer
|
var txIndexer txindex.TxIndexer
|
||||||
switch config.GetString("tx_index") {
|
switch tmConfig.DB.TxIndex {
|
||||||
case "kv":
|
case "kv":
|
||||||
store := dbm.NewDB("tx_index", config.GetString("db_backend"), config.GetString("db_dir"))
|
store := dbm.NewDB("tx_index", tmConfig.DB.Backend, tmConfig.DB.Dir)
|
||||||
txIndexer = kv.NewTxIndex(store)
|
txIndexer = kv.NewTxIndex(store)
|
||||||
default:
|
default:
|
||||||
txIndexer = &null.TxIndex{}
|
txIndexer = &null.TxIndex{}
|
||||||
|
Reference in New Issue
Block a user