NewNode returns a new, ready to go, Tendermint Node.
(config *cfg.Config, privValidator types.PrivValidator, nodeKey *p2p.NodeKey, clientCreator proxy.ClientCreator, genesisDocProvider GenesisDocProvider, dbProvider DBProvider, metricsProvider MetricsProvider, logger log.Logger, options ...Option, )
| 704 | |
| 705 | // NewNode returns a new, ready to go, Tendermint Node. |
| 706 | func NewNode(config *cfg.Config, |
| 707 | privValidator types.PrivValidator, |
| 708 | nodeKey *p2p.NodeKey, |
| 709 | clientCreator proxy.ClientCreator, |
| 710 | genesisDocProvider GenesisDocProvider, |
| 711 | dbProvider DBProvider, |
| 712 | metricsProvider MetricsProvider, |
| 713 | logger log.Logger, |
| 714 | options ...Option, |
| 715 | ) (*Node, error) { |
| 716 | blockStore, stateDB, err := initDBs(config, dbProvider) |
| 717 | if err != nil { |
| 718 | return nil, err |
| 719 | } |
| 720 | |
| 721 | stateStore := sm.NewStore(stateDB, sm.StoreOptions{ |
| 722 | DiscardABCIResponses: config.Storage.DiscardABCIResponses, |
| 723 | }) |
| 724 | |
| 725 | state, genDoc, err := LoadStateFromDBOrGenesisDocProvider(stateDB, genesisDocProvider) |
| 726 | if err != nil { |
| 727 | return nil, err |
| 728 | } |
| 729 | |
| 730 | // Create the proxyApp and establish connections to the ABCI app (consensus, mempool, query). |
| 731 | proxyApp, err := createAndStartProxyAppConns(clientCreator, logger) |
| 732 | if err != nil { |
| 733 | return nil, err |
| 734 | } |
| 735 | |
| 736 | // EventBus and IndexerService must be started before the handshake because |
| 737 | // we might need to index the txs of the replayed block as this might not have happened |
| 738 | // when the node stopped last time (i.e. the node stopped after it saved the block |
| 739 | // but before it indexed the txs, or, endblocker panicked) |
| 740 | eventBus, err := createAndStartEventBus(logger) |
| 741 | if err != nil { |
| 742 | return nil, err |
| 743 | } |
| 744 | |
| 745 | indexerService, txIndexer, blockIndexer, err := createAndStartIndexerService(config, |
| 746 | genDoc.ChainID, dbProvider, eventBus, logger) |
| 747 | if err != nil { |
| 748 | return nil, err |
| 749 | } |
| 750 | |
| 751 | // If an address is provided, listen on the socket for a connection from an |
| 752 | // external signing process. |
| 753 | if config.PrivValidatorListenAddr != "" { |
| 754 | // FIXME: we should start services inside OnStart |
| 755 | privValidator, err = createAndStartPrivValidatorSocketClient(config.PrivValidatorListenAddr, genDoc.ChainID, logger) |
| 756 | if err != nil { |
| 757 | return nil, fmt.Errorf("error with private validator socket client: %w", err) |
| 758 | } |
| 759 | } |
| 760 | |
| 761 | pubKey, err := privValidator.GetPubKey() |
| 762 | if err != nil { |
| 763 | return nil, fmt.Errorf("can't get pubkey: %w", err) |