@ -35,7 +35,7 @@ import (
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp"
"github.com/hashicorp/golang-lru"
lru "github.com/hashicorp/golang-lru"
)
var (
@ -50,6 +50,7 @@ type LightChain struct {
hc * core . HeaderChain
indexerConfig * IndexerConfig
chainDb ethdb . Database
engine consensus . Engine
odr OdrBackend
chainFeed event . Feed
chainSideFeed event . Feed
@ -57,21 +58,18 @@ type LightChain struct {
scope event . SubscriptionScope
genesisBlock * types . Block
chainmu sync . RWMutex
bodyCache * lru . Cache // Cache for the most recent block bodies
bodyRLPCache * lru . Cache // Cache for the most recent block bodies in RLP encoded format
blockCache * lru . Cache // Cache for the most recent entire blocks
chainmu sync . RWMutex // protects header inserts
quit chan struct { }
running int32 // running must be called automically
// procInterrupt must be atomically called
procInterrupt int32 // interrupt signaler for block processing
wg sync . WaitGroup
engine consensus . Engine
wg sync . WaitGroup
disableCheckFreq bool
// Atomic boolean switches:
running int32 // whether LightChain is running or stopped
procInterrupt int32 // interrupts chain insert
disableCheckFreq int32 // disables header verification
}
// NewLightChain returns a fully initialised light chain using information
@ -356,7 +354,7 @@ func (self *LightChain) postChainEvents(events []interface{}) {
// In the case of a light chain, InsertHeaderChain also creates and posts light
// chain events when necessary.
func ( self * LightChain ) InsertHeaderChain ( chain [ ] * types . Header , checkFreq int ) ( int , error ) {
if self . disableCheckFreq {
if atomic . LoadInt32 ( & self . disableCheckFreq ) == 1 {
checkFreq = 0
}
start := time . Now ( )
@ -532,16 +530,12 @@ func (self *LightChain) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEven
return self . scope . Track ( new ( event . Feed ) . Subscribe ( ch ) )
}
//DisableCheckFreq disables header validation. It needs for ULC
// DisableCheckFreq disables header validation. This is used for ultralight mode.
func ( self * LightChain ) DisableCheckFreq ( ) {
self . mu . Lock ( )
defer self . mu . Unlock ( )
self . disableCheckFreq = true
atomic . StoreInt32 ( & self . disableCheckFreq , 1 )
}
//EnableCheckFreq enables header validation
// EnableCheckFreq enables header validation.
func ( self * LightChain ) EnableCheckFreq ( ) {
self . mu . Lock ( )
defer self . mu . Unlock ( )
self . disableCheckFreq = false
atomic . StoreInt32 ( & self . disableCheckFreq , 0 )
}