/// <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); }
/// <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); }