MCPcopy Create free account
hub / github.com/SmartPool/smartpool-client / generate

Method generate

ethereum/ethash/ethash.go:89–102  ·  view source on GitHub ↗

generate creates the actual cache. it can be called from multiple goroutines. the first call will generate the cache, subsequent calls wait until it is generated.

()

Source from the content-addressed store, hash-verified

87// goroutines. the first call will generate the cache, subsequent
88// calls wait until it is generated.
89func (cache *cache) generate() {
90 cache.gen.Do(func() {
91 started := time.Now()
92 seedHash := makeSeedHash(cache.epoch)
93 log.Debug(fmt.Sprintf("Generating cache for epoch %d (%x)", cache.epoch, seedHash))
94 size := C.ethash_get_cachesize(C.uint64_t(cache.epoch * epochLength))
95 if cache.test {
96 size = cacheSizeForTesting
97 }
98 cache.ptr = C.ethash_light_new_internal(size, (*C.ethash_h256_t)(unsafe.Pointer(&seedHash[0])))
99 runtime.SetFinalizer(cache, freeCache)
100 log.Debug(fmt.Sprintf("Done generating cache for epoch %d, it took %v", cache.epoch, time.Since(started)))
101 })
102}
103
104func freeCache(cache *cache) {
105 C.ethash_light_delete(cache.ptr)

Callers 1

getCacheMethod · 0.95

Calls 1

makeSeedHashFunction · 0.85

Tested by

no test coverage detected