Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }