// Package node provides a high level wrapper around tendermint services. package node import ( "context" "fmt" abciclient "github.com/tendermint/tendermint/abci/client" "github.com/tendermint/tendermint/config" "github.com/tendermint/tendermint/libs/log" "github.com/tendermint/tendermint/libs/service" "github.com/tendermint/tendermint/privval" "github.com/tendermint/tendermint/types" ) // NewDefault constructs a tendermint node service for use in go // process that host their own process-local tendermint node. This is // equivalent to running tendermint in it's own process communicating // to an external ABCI application. func NewDefault( ctx context.Context, conf *config.Config, logger log.Logger, ) (service.Service, error) { return newDefaultNode(ctx, conf, logger) } // New constructs a tendermint node. The ClientCreator makes it // possible to construct an ABCI application that runs in the same // process as the tendermint node. The final option is a pointer to a // Genesis document: if the value is nil, the genesis document is read // from the file specified in the config, and otherwise the node uses // value of the final argument. func New( ctx context.Context, conf *config.Config, logger log.Logger, cf abciclient.Client, gen *types.GenesisDoc, ) (service.Service, error) { nodeKey, err := types.LoadOrGenNodeKey(conf.NodeKeyFile()) if err != nil { return nil, fmt.Errorf("failed to load or gen node key %s: %w", conf.NodeKeyFile(), err) } var genProvider genesisDocProvider switch gen { case nil: genProvider = defaultGenesisDocProviderFunc(conf) default: genProvider = func() (*types.GenesisDoc, error) { return gen, nil } } switch conf.Mode { case config.ModeFull, config.ModeValidator: pval, err := privval.LoadOrGenFilePV(conf.PrivValidator.KeyFile(), conf.PrivValidator.StateFile()) if err != nil { return nil, err } return makeNode( ctx, conf, pval, nodeKey, cf, genProvider, config.DefaultDBProvider, logger) case config.ModeSeed: return makeSeedNode(ctx, conf, config.DefaultDBProvider, nodeKey, genProvider, logger) default: return nil, fmt.Errorf("%q is not a valid mode", conf.Mode) } }