func cacheSize(block uint64) uint64 {
	epoch := int(block / epochLength)
	if epoch < maxEpoch {
		return cacheSizes[epoch]
	}
	return calcCacheSize(epoch)
}
cacheSize returns the size of the ethash verification cache that belongs to a certain
block number.
package types
import (
	"encoding/binary"
	"hash"
	"math/big"
	"reflect"
	"runtime"
	"sync"
	"sync/atomic"
	"time"
	"unsafe"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/common/bitutil"
	"github.com/ethereum/go-ethereum/crypto"
	"github.com/ethereum/go-ethereum/log"
	"golang.org/x/crypto/sha3"
)
const (
	datasetInitBytes   = 1 << 30  
	datasetGrowthBytes = 1 << 23  
	cacheInitBytes     = 1 << 24  
	cacheGrowthBytes   = 1 << 17  
	epochLength        = 30000    
	mixBytes           = 128      
	hashBytes          = 64       
	hashWords          = 16       
	datasetParents     = 256      
	cacheRounds        = 3        
	loopAccesses       = 64       
)