|
|
- // 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)
- }
- }
|