Beispiel #1
0
        /// <summary>
        /// Spy address event
        /// </summary>
        /// <param name="address"></param>
        private protected override void OnSpyAddress(uint address)
        {
            // read 256 bytes of the current context area
            byte[] data = ReadProcessMemory(m_ContextBuffer.Ecx, 256);

            // initialize the data length
            int length = 0;

            // find the data
            for (int i = 0; i < data.Length && length == 0; i++)
            {
                if (data[i] == 0)
                {
                    length = i;
                }
            }

            // build the string of the file name
            string name = m_Encoding.GetString(data, 0, length);

            // get the file hash
            ulong hash = ((ulong)m_ContextBuffer.Edx << 32) | m_ContextBuffer.Eax;

            // if we found the hash we store it into the dictionary
            HashFound?.Invoke(hash, name);
        }
Beispiel #2
0
 /// <summary>
 /// Метод выполняющий майнинг.
 /// </summary>
 private void Mine(IAlgorithm algorithm)
 {
     while (true)
     {
         var hashResult = algorithm.Hash();
         HashFound?.Invoke(this, hashResult);
     }
 }
        public async override Task <BenchmarkResult> StartBenchmark(CancellationToken stop, BenchmarkPerformanceType benchmarkType = BenchmarkPerformanceType.Standard)
        {
            var numOfGpus = 2; //MUST BE SET CORRECTLY OTHERWISE BENCHMARKING WON't WORK (all cards are combined currently)
            var avgRet    = 0.0;
            var counter   = 0;
            var maxCheck  = 0;
            var after     = "Avr";

            // determine benchmark time
            // settup times
            var benchmarkTime = 20; // in seconds

            switch (benchmarkType)
            {
            case BenchmarkPerformanceType.Quick:
                benchmarkTime = 20;
                maxCheck      = 1 * numOfGpus;
                break;

            case BenchmarkPerformanceType.Standard:
                benchmarkTime = 60;
                maxCheck      = 2 * numOfGpus;
                break;

            case BenchmarkPerformanceType.Precise:
                benchmarkTime = 120;
                maxCheck      = 3 * numOfGpus;
                break;
            }

            var url  = GetLocationUrl(_algorithmType, _miningLocation, NhmConectionType.STRATUM_TCP);
            var algo = AlgorithmName(_algorithmType);

            var commandLine = $"--algo {algo} --url {url} --user {_username} --api-bind 127.0.0.1:{_apiPort} --no-watchdog --device {_devices} {_extraLaunchParameters}";

            var binPathBinCwdPair = GetBinAndCwdPaths();
            var binPath           = binPathBinCwdPair.Item1;
            var binCwd            = binPathBinCwdPair.Item2;

            Logger.Info(_logGroup, $"Benchmarking started with command: {commandLine}");
            var bp = new BenchmarkProcess(binPath, binCwd, commandLine, GetEnvironmentVariables());

            bp.CheckData = (string data) =>
            {
                var s   = data;
                var ret = new HashFound();
                ret.hashrate = default(double);
                ret.found    = false;

                if (s.Contains(after))
                {
                    var afterString      = s.GetStringAfter(after).ToLower();
                    var afterStringArray = afterString.Split(' ');
                    var hashRate         = afterStringArray[1];
                    var numString        = new string(hashRate
                                                      .ToCharArray()
                                                      .SkipWhile(c => !char.IsDigit(c))
                                                      .TakeWhile(c => char.IsDigit(c) || c == ',')
                                                      .ToArray());

                    numString.Replace(',', '.');
                    if (!double.TryParse(numString, NumberStyles.Float, CultureInfo.InvariantCulture, out var hash))
                    {
                        return(new BenchmarkResult {
                            AlgorithmTypeSpeeds = new List <AlgorithmTypeSpeedPair> {
                                new AlgorithmTypeSpeedPair(_algorithmType, ret.hashrate)
                            }, Success = ret.found
                        });
                    }

                    counter++;
                    if (hashRate.Contains("kh"))
                    {
                        avgRet += hash * 1000;
                    }
                    else if (hashRate.Contains("mh"))
                    {
                        avgRet += hash * 1000000;
                    }
                    else if (hashRate.Contains("gh"))
                    {
                        avgRet += hash * 1000000000;
                    }
                    else
                    {
                        avgRet += hash;
                    }

                    maxCheck--;
                    if (maxCheck == 0)
                    {
                        ret.hashrate = avgRet / counter;
                        ret.found    = true;
                    }
                }
                return(new BenchmarkResult {
                    AlgorithmTypeSpeeds = new List <AlgorithmTypeSpeedPair> {
                        new AlgorithmTypeSpeedPair(_algorithmType, ret.hashrate)
                    }, Success = ret.found
                });
            };

            var benchmarkTimeout = TimeSpan.FromSeconds(300);
            var benchmarkWait    = TimeSpan.FromMilliseconds(500);
            var t = MinerToolkit.WaitBenchmarkResult(bp, benchmarkTimeout, benchmarkWait, stop);

            return(await t);
        }