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); }
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 Task Init(INethermindApi nethermindApi) { _nethermindApi = nethermindApi; if (_nethermindApi !.SealEngineType != SealEngineType.Ethash) { return(Task.CompletedTask); } var(getFromApi, setInApi) = _nethermindApi.ForInit; setInApi.RewardCalculatorSource = new RewardCalculator(getFromApi.SpecProvider); DifficultyCalculator difficultyCalculator = new DifficultyCalculator(getFromApi.SpecProvider); Ethash ethash = new Ethash(getFromApi.LogManager); setInApi.Sealer = getFromApi.Config <IMiningConfig>().Enabled ? (ISealer) new EthashSealer(ethash, getFromApi.EngineSigner, getFromApi.LogManager) : NullSealEngine.Instance; setInApi.SealValidator = new EthashSealValidator( getFromApi.LogManager, difficultyCalculator, getFromApi.CryptoRandom, ethash); return(Task.CompletedTask); }