diff options
author | Péter Szilágyi <peterke@gmail.com> | 2017-09-06 18:00:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-06 18:00:35 +0800 |
commit | c4d21bc8e548d909d5b2940cb00d3d068f5697ec (patch) | |
tree | 1747315b32a6c9d9158fb9f36cfbd2277672ddfb /eth/backend.go | |
parent | 160add8570ea1653b46cc1f7c21cb6eb69220f7d (diff) | |
parent | 564c8f3ae6f80d039ef27479e5ad15145f488710 (diff) | |
download | dexon-c4d21bc8e548d909d5b2940cb00d3d068f5697ec.tar dexon-c4d21bc8e548d909d5b2940cb00d3d068f5697ec.tar.gz dexon-c4d21bc8e548d909d5b2940cb00d3d068f5697ec.tar.bz2 dexon-c4d21bc8e548d909d5b2940cb00d3d068f5697ec.tar.lz dexon-c4d21bc8e548d909d5b2940cb00d3d068f5697ec.tar.xz dexon-c4d21bc8e548d909d5b2940cb00d3d068f5697ec.tar.zst dexon-c4d21bc8e548d909d5b2940cb00d3d068f5697ec.zip |
Merge pull request #14631 from zsfelfoldi/bloombits2
core/bloombits, eth/filter: transformed bloom bitmap based log search
Diffstat (limited to 'eth/backend.go')
-rw-r--r-- | eth/backend.go | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/eth/backend.go b/eth/backend.go index 5837c8564..99a1928fe 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -32,6 +32,7 @@ import ( "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/bloombits" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/eth/downloader" @@ -77,6 +78,9 @@ type Ethereum struct { engine consensus.Engine accountManager *accounts.Manager + bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests + bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports + ApiBackend *EthApiBackend miner *miner.Miner @@ -125,11 +129,10 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { networkId: config.NetworkId, gasPrice: config.GasPrice, etherbase: config.Etherbase, + bloomRequests: make(chan chan *bloombits.Retrieval), + bloomIndexer: NewBloomIndexer(chainDb, params.BloomBitsBlocks), } - if err := addMipmapBloomBins(chainDb); err != nil { - return nil, err - } log.Info("Initialising Ethereum protocol", "versions", ProtocolVersions, "network", config.NetworkId) if !config.SkipBcVersionCheck { @@ -151,6 +154,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { eth.blockchain.SetHead(compat.RewindTo) core.WriteChainConfig(chainDb, genesisHash, chainConfig) } + eth.bloomIndexer.Start(eth.blockchain.CurrentHeader(), eth.blockchain.SubscribeChainEvent) if config.TxPool.Journal != "" { config.TxPool.Journal = ctx.ResolvePath(config.TxPool.Journal) @@ -358,14 +362,17 @@ func (s *Ethereum) Downloader() *downloader.Downloader { return s.protocolManage func (s *Ethereum) Protocols() []p2p.Protocol { if s.lesServer == nil { return s.protocolManager.SubProtocols - } else { - return append(s.protocolManager.SubProtocols, s.lesServer.Protocols()...) } + return append(s.protocolManager.SubProtocols, s.lesServer.Protocols()...) } // Start implements node.Service, starting all internal goroutines needed by the // Ethereum protocol implementation. func (s *Ethereum) Start(srvr *p2p.Server) error { + // Start the bloom bits servicing goroutines + s.startBloomHandlers() + + // Start the RPC service s.netRPCService = ethapi.NewPublicNetAPI(srvr, s.NetVersion()) // Figure out a max peers count based on the server limits @@ -376,6 +383,7 @@ func (s *Ethereum) Start(srvr *p2p.Server) error { maxPeers = srvr.MaxPeers / 2 } } + // Start the networking layer and the light server if requested s.protocolManager.Start(maxPeers) if s.lesServer != nil { s.lesServer.Start(srvr) @@ -389,6 +397,7 @@ func (s *Ethereum) Stop() error { if s.stopDbUpgrade != nil { s.stopDbUpgrade() } + s.bloomIndexer.Close() s.blockchain.Stop() s.protocolManager.Stop() if s.lesServer != nil { |