X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=node%2Fnode.go;h=531ff832df9f5aeac94949016bfcb9be281a64ee;hb=refs%2Fheads%2Frevert-357-master;hp=8f05938c6f5c9d86afed9e13c3a819602e125df6;hpb=6f7fe6fd7442ddcec8ee959c09b6d45639ef045f;p=bytom%2Fvapor.git diff --git a/node/node.go b/node/node.go index 8f05938c..531ff832 100644 --- a/node/node.go +++ b/node/node.go @@ -1,7 +1,6 @@ package node import ( - "context" "encoding/hex" "errors" "net" @@ -9,6 +8,7 @@ import ( _ "net/http/pprof" "os" "path/filepath" + "reflect" "github.com/prometheus/prometheus/util/flock" log "github.com/sirupsen/logrus" @@ -20,7 +20,6 @@ import ( "github.com/vapor/api" "github.com/vapor/asset" "github.com/vapor/blockchain/pseudohsm" - "github.com/vapor/blockchain/txfeed" cfg "github.com/vapor/config" "github.com/vapor/consensus" "github.com/vapor/database" @@ -31,6 +30,7 @@ import ( "github.com/vapor/netsync" "github.com/vapor/proposal/blockproposer" "github.com/vapor/protocol" + "github.com/vapor/protocol/bc/types" w "github.com/vapor/wallet" ) @@ -52,15 +52,12 @@ type Node struct { notificationMgr *websocket.WSNotificationManager api *api.API chain *protocol.Chain - txfeed *txfeed.Tracker cpuMiner *blockproposer.BlockProposer miningEnable bool } // NewNode create bytom node func NewNode(config *cfg.Config) *Node { - ctx := context.Background() - if err := lockDataDirectory(config); err != nil { cmn.Exit("Error: " + err.Error()) } @@ -71,13 +68,16 @@ func NewNode(config *cfg.Config) *Node { log.WithFields(log.Fields{ "module": logModule, + "pubkey": config.PrivateKey().XPub(), "fed_xpubs": config.Federation.Xpubs, "fed_quorum": config.Federation.Quorum, - "fed_controlprogram": hex.EncodeToString(cfg.FederationProgrom(config)), + "fed_controlprogram": hex.EncodeToString(cfg.FederationWScript(config)), }).Info() initLogFile(config) - initActiveNetParams(config) + if err := consensus.InitActiveNetParams(config.ChainID); err != nil { + log.Fatalf("Failed to init ActiveNetParams:[%s]", err.Error()) + } initCommonConfig(config) // Get store @@ -97,18 +97,13 @@ func NewNode(config *cfg.Config) *Node { cmn.Exit(cmn.Fmt("Failed to create chain structure: %v", err)) } + if err := checkConfig(chain, config); err != nil { + panic(err) + } + var accounts *account.Manager var assets *asset.Registry var wallet *w.Wallet - var txFeed *txfeed.Tracker - - txFeedDB := dbm.NewDB("txfeeds", config.DBBackend, config.DBDir()) - txFeed = txfeed.NewTracker(txFeedDB, chain) - - if err = txFeed.Prepare(ctx); err != nil { - log.WithFields(log.Fields{"module": logModule, "error": err}).Error("start txfeed") - return nil - } hsm, err := pseudohsm.New(config.KeysDir()) if err != nil { @@ -117,9 +112,11 @@ func NewNode(config *cfg.Config) *Node { if !config.Wallet.Disable { walletDB := dbm.NewDB("wallet", config.DBBackend, config.DBDir()) - accounts = account.NewManager(walletDB, chain) + walletStore := database.NewWalletStore(walletDB) + accountStore := database.NewAccountStore(walletDB) + accounts = account.NewManager(accountStore, chain) assets = asset.NewRegistry(walletDB, chain) - wallet, err = w.NewWallet(walletDB, accounts, assets, hsm, chain, dispatcher, config.Wallet.TxIndex) + wallet, err = w.NewWallet(walletStore, accounts, assets, hsm, chain, dispatcher, config.Wallet.TxIndex) if err != nil { log.WithFields(log.Fields{"module": logModule, "error": err}).Error("init NewWallet") } @@ -129,8 +126,8 @@ func NewNode(config *cfg.Config) *Node { wallet.RescanBlocks() } } - - syncManager, err := netsync.NewSyncManager(config, chain, txPool, dispatcher) + fastSyncDB := dbm.NewDB("fastsync", config.DBBackend, config.DBDir()) + syncManager, err := netsync.NewSyncManager(config, chain, txPool, dispatcher, fastSyncDB) if err != nil { cmn.Exit(cmn.Fmt("Failed to create sync manager: %v", err)) } @@ -140,7 +137,7 @@ func NewNode(config *cfg.Config) *Node { // run the profile server profileHost := config.ProfListenAddress if profileHost != "" { - // Profiling bytomd programs.see (https://blog.golang.org/profiling-go-programs) + // Profiling vapord programs.see (https://blog.golang.org/profiling-go-programs) // go tool pprof http://profileHose/debug/pprof/heap go func() { if err = http.ListenAndServe(profileHost, nil); err != nil { @@ -156,7 +153,6 @@ func NewNode(config *cfg.Config) *Node { accessTokens: accessTokens, wallet: wallet, chain: chain, - txfeed: txFeed, miningEnable: config.Mining, notificationMgr: notificationMgr, @@ -167,6 +163,22 @@ func NewNode(config *cfg.Config) *Node { return node } +// find whether config xpubs equal genesis block xpubs +func checkConfig(chain *protocol.Chain, config *cfg.Config) error { + fedpegScript := cfg.FederationWScript(config) + genesisBlock, err := chain.GetBlockByHeight(0) + if err != nil { + return err + } + typedInput := genesisBlock.Transactions[0].Inputs[0].TypedInput + if v, ok := typedInput.(*types.CoinbaseInput); ok { + if !reflect.DeepEqual(fedpegScript, v.Arbitrary) { + return errors.New("config xpubs don't equal genesis block xpubs.") + } + } + return nil +} + // Lock data directory after daemonization func lockDataDirectory(config *cfg.Config) error { _, _, err := flock.New(filepath.Join(config.RootDir, "LOCK")) @@ -176,14 +188,6 @@ func lockDataDirectory(config *cfg.Config) error { return nil } -func initActiveNetParams(config *cfg.Config) { - var exist bool - consensus.ActiveNetParams, exist = consensus.NetParams[config.ChainID] - if !exist { - cmn.Exit(cmn.Fmt("chain_id[%v] don't exist", config.ChainID)) - } -} - func initLogFile(config *cfg.Config) { if config.LogFile == "" { return @@ -213,7 +217,7 @@ func launchWebBrowser(port string) { } func (n *Node) initAndstartAPIServer() { - n.api = api.NewAPI(n.syncManager, n.wallet, n.txfeed, n.cpuMiner, n.chain, n.config, n.accessTokens, n.eventDispatcher, n.notificationMgr) + n.api = api.NewAPI(n.syncManager, n.wallet, n.cpuMiner, n.chain, n.config, n.accessTokens, n.eventDispatcher, n.notificationMgr) listenAddr := env.String("LISTEN", n.config.ApiAddress) env.Parse()