github.com/SmartMeshFoundation/Spectrum@v0.0.0-20220621030607-452a266fee1e/consensus/ethash/algorithm_go1.7.go (about)

     1  // Copyright 2017 The Spectrum Authors
     2  // This file is part of the Spectrum library.
     3  //
     4  // The Spectrum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The Spectrum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the Spectrum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  // +build !go1.8
    18  
    19  package ethash
    20  
    21  // cacheSize calculates and returns the size of the ethash verification cache that
    22  // belongs to a certain block number. The cache size grows linearly, however, we
    23  // always take the highest prime below the linearly growing threshold in order to
    24  // reduce the risk of accidental regularities leading to cyclic behavior.
    25  func cacheSize(block uint64) uint64 {
    26  	// If we have a pre-generated value, use that
    27  	epoch := int(block / epochLength)
    28  	if epoch < len(cacheSizes) {
    29  		return cacheSizes[epoch]
    30  	}
    31  	// We don't have a way to verify primes fast before Go 1.8
    32  	panic("fast prime testing unsupported in Go < 1.8")
    33  }
    34  
    35  // datasetSize calculates and returns the size of the ethash mining dataset that
    36  // belongs to a certain block number. The dataset size grows linearly, however, we
    37  // always take the highest prime below the linearly growing threshold in order to
    38  // reduce the risk of accidental regularities leading to cyclic behavior.
    39  func datasetSize(block uint64) uint64 {
    40  	// If we have a pre-generated value, use that
    41  	epoch := int(block / epochLength)
    42  	if epoch < len(datasetSizes) {
    43  		return datasetSizes[epoch]
    44  	}
    45  	// We don't have a way to verify primes fast before Go 1.8
    46  	panic("fast prime testing unsupported in Go < 1.8")
    47  }