Merge pull request #2310 from karalabe/ethash-future-cache
Godeps: pull in ethash future cache generator
This commit is contained in:
commit
31b4ff8cc1
4
Godeps/Godeps.json
generated
4
Godeps/Godeps.json
generated
@ -20,8 +20,8 @@
|
||||
},
|
||||
{
|
||||
"ImportPath": "github.com/ethereum/ethash",
|
||||
"Comment": "v23.1-240-ga524c9f",
|
||||
"Rev": "a524c9f7d55cb8925567dc201b44ba555862056d"
|
||||
"Comment": "v23.1-242-gbc9ba4d",
|
||||
"Rev": "bc9ba4d6a83a0fe308fefd8c6001b8ed1607137f"
|
||||
},
|
||||
{
|
||||
"ImportPath": "github.com/fatih/color",
|
||||
|
28
Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go
generated
vendored
28
Godeps/_workspace/src/github.com/ethereum/ethash/ethash.go
generated
vendored
@ -108,10 +108,13 @@ func freeCache(cache *cache) {
|
||||
// Light implements the Verify half of the proof of work. It uses a few small
|
||||
// in-memory caches to verify the nonces found by Full.
|
||||
type Light struct {
|
||||
test bool // if set use a smaller cache size
|
||||
mu sync.Mutex // protects the per-epoch map of DAGs
|
||||
caches map[uint64]*cache // currently cached verification DAGs
|
||||
NumCaches int // Maximum number of DAGs to cache before eviction (only init, don't modify)
|
||||
test bool // If set, use a smaller cache size
|
||||
|
||||
mu sync.Mutex // Protects the per-epoch map of verification caches
|
||||
caches map[uint64]*cache // Currently maintained verification caches
|
||||
future *cache // Pre-generated cache for the estimated future DAG
|
||||
|
||||
NumCaches int // Maximum number of caches to keep before eviction (only init, don't modify)
|
||||
}
|
||||
|
||||
// Verify checks whether the block's nonce is valid.
|
||||
@ -192,12 +195,25 @@ func (l *Light) getCache(blockNum uint64) *cache {
|
||||
evict = cache
|
||||
}
|
||||
}
|
||||
glog.V(logger.Info).Infof("Evicting DAG for epoch %d in favour of epoch %d", evict.epoch, epoch)
|
||||
glog.V(logger.Debug).Infof("Evicting DAG for epoch %d in favour of epoch %d", evict.epoch, epoch)
|
||||
delete(l.caches, evict.epoch)
|
||||
}
|
||||
// Create and return a new DAG for the epoch
|
||||
// If we have the new DAG pre-generated, use that, otherwise create a new one
|
||||
if l.future != nil && l.future.epoch == epoch {
|
||||
glog.V(logger.Debug).Infof("Using pre-generated DAG for epoch %d", epoch)
|
||||
c, l.future = l.future, nil
|
||||
} else {
|
||||
glog.V(logger.Debug).Infof("No pre-generated DAG available, creating new for epoch %d", epoch)
|
||||
c = &cache{epoch: epoch, test: l.test}
|
||||
}
|
||||
l.caches[epoch] = c
|
||||
|
||||
// If we just used up the future cache, or need a refresh, regenerate
|
||||
if l.future == nil || l.future.epoch <= epoch {
|
||||
glog.V(logger.Debug).Infof("Pre-generating DAG for epoch %d", epoch+1)
|
||||
l.future = &cache{epoch: epoch + 1, test: l.test}
|
||||
go l.future.generate()
|
||||
}
|
||||
}
|
||||
c.used = time.Now()
|
||||
l.mu.Unlock()
|
||||
|
Loading…
Reference in New Issue
Block a user