consensus/ethash: use 64bit indexes for the DAG generation (#21793)

* Bit boundary fix for the DAG generation routine

* Fix unnecessary conversion warnings

Co-authored-by: Sergey Pavlov <spavlov@gmail.com>
pull/21833/head
Slava Karpenko 4 years ago committed by GitHub
parent 27d93c1848
commit d990df909d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      consensus/ethash/algorithm.go

@ -304,16 +304,16 @@ func generateDataset(dest []uint32, epoch uint64, cache []uint32) {
keccak512 := makeHasher(sha3.NewLegacyKeccak512()) keccak512 := makeHasher(sha3.NewLegacyKeccak512())
// Calculate the data segment this thread should generate // Calculate the data segment this thread should generate
batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))) batch := (size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))
first := uint32(id) * batch first := uint64(id) * batch
limit := first + batch limit := first + batch
if limit > uint32(size/hashBytes) { if limit > size/hashBytes {
limit = uint32(size / hashBytes) limit = size / hashBytes
} }
// Calculate the dataset segment // Calculate the dataset segment
percent := size / hashBytes / 100 percent := size / hashBytes / 100
for index := first; index < limit; index++ { for index := first; index < limit; index++ {
item := generateDatasetItem(cache, index, keccak512) item := generateDatasetItem(cache, uint32(index), keccak512)
if swapped { if swapped {
swap(item) swap(item)
} }

Loading…
Cancel
Save