public uint[] CalcDataSetItem(uint i) { uint n = Size / Ethash.HashBytes; int r = Ethash.HashBytes / Ethash.WordBytes; uint[] mixInts = new uint[Ethash.HashBytes / Ethash.WordBytes]; Data[i % n].AsUInts().CopyTo(mixInts); mixInts[0] = i ^ mixInts[0]; mixInts = Keccak512.ComputeUIntsToUInts(mixInts); for (uint j = 0; j < Ethash.DataSetParents; j++) { ulong cacheIndex = Ethash.Fnv(i ^ j, mixInts[j % r]); Ethash.Fnv(mixInts, MemoryMarshal.Cast <Bucket, uint>(MemoryMarshal.CreateSpan(ref Data[cacheIndex % n], 1))); } mixInts = Keccak512.ComputeUIntsToUInts(mixInts); return(mixInts); }
public uint[] CalcDataSetItem(uint i) { uint n = Size / Ethash.HashBytes; int r = Ethash.HashBytes / Ethash.WordBytes; uint[] mixInts = new uint[Ethash.HashBytes / Ethash.WordBytes]; Buffer.BlockCopy(Data[i % n], 0, mixInts, 0, Ethash.HashBytes); mixInts[0] = i ^ mixInts[0]; mixInts = Keccak512.ComputeUIntsToUInts(mixInts); for (uint j = 0; j < Ethash.DataSetParents; j++) { ulong cacheIndex = Ethash.Fnv(i ^ j, mixInts[j % r]); Ethash.Fnv(mixInts, Data[cacheIndex % n]); } mixInts = Keccak512.ComputeUIntsToUInts(mixInts); return(mixInts); }