mirror of
https://github.com/xmrig/xmrig.git
synced 2024-11-19 02:21:04 +00:00
Merge branch 'master' into dev
This commit is contained in:
commit
adc6adb6d5
10 changed files with 79 additions and 39 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# v2.6.2
|
||||||
|
- [#607](https://github.com/xmrig/xmrig/issues/607) Fixed donation bug.
|
||||||
|
- [#610](https://github.com/xmrig/xmrig/issues/610) Fixed ARM build.
|
||||||
|
|
||||||
# v2.6.1
|
# v2.6.1
|
||||||
- [#168](https://github.com/xmrig/xmrig-proxy/issues/168) Added support for [mining algorithm negotiation](https://github.com/xmrig/xmrig-proxy/blob/dev/doc/STRATUM_EXT.md#1-mining-algorithm-negotiation).
|
- [#168](https://github.com/xmrig/xmrig-proxy/issues/168) Added support for [mining algorithm negotiation](https://github.com/xmrig/xmrig-proxy/blob/dev/doc/STRATUM_EXT.md#1-mining-algorithm-negotiation).
|
||||||
- Added IPBC coin support, base algorithm `cn-lite` variant `ipbc`.
|
- Added IPBC coin support, base algorithm `cn-lite` variant `ipbc`.
|
||||||
|
|
10
README.md
10
README.md
|
@ -1,5 +1,7 @@
|
||||||
# XMRig
|
# XMRig
|
||||||
|
|
||||||
|
:warning: **If you mine Monero, Aeon, Sumokoin, Turtlecoin, Stellite, GRAFT, Haven Protocol, IPBC, [PLEASE READ](https://github.com/xmrig/xmrig/issues/482)!** :warning:
|
||||||
|
|
||||||
[![Github All Releases](https://img.shields.io/github/downloads/xmrig/xmrig/total.svg)](https://github.com/xmrig/xmrig/releases)
|
[![Github All Releases](https://img.shields.io/github/downloads/xmrig/xmrig/total.svg)](https://github.com/xmrig/xmrig/releases)
|
||||||
[![GitHub release](https://img.shields.io/github/release/xmrig/xmrig/all.svg)](https://github.com/xmrig/xmrig/releases)
|
[![GitHub release](https://img.shields.io/github/release/xmrig/xmrig/all.svg)](https://github.com/xmrig/xmrig/releases)
|
||||||
[![GitHub Release Date](https://img.shields.io/github/release-date-pre/xmrig/xmrig.svg)](https://github.com/xmrig/xmrig/releases)
|
[![GitHub Release Date](https://img.shields.io/github/release-date-pre/xmrig/xmrig.svg)](https://github.com/xmrig/xmrig/releases)
|
||||||
|
@ -122,10 +124,10 @@ Please note performance is highly dependent on system load. The numbers above ar
|
||||||
## Release checksums
|
## Release checksums
|
||||||
### SHA-256
|
### SHA-256
|
||||||
```
|
```
|
||||||
ca60d04204aa3195e8cd72887c7deced1a7c664e538256f138b5698d381ceb00 xmrig-2.6.2-xenial-amd64.tar.gz/xmrig-2.6.2/xmrig
|
f8e1957e8bfd7f281a76d1e42694049c67f39dea90ac36e9d589c14cdf8924bc xmrig-2.6.1-xenial-amd64.tar.gz/xmrig-2.6.1/xmrig
|
||||||
49dc64eeecdbfffb452ad3cd7a0118d8640208b0b898b2901464d0be6183c169 xmrig-2.6.2-gcc-win32.zip/xmrig.exe
|
472c7aaf5aacc1212bfd3f2f96daca4f42d64e2d0db0872891328e7d8503d0c8 xmrig-2.6.1-gcc-win32.zip/xmrig.exe
|
||||||
56141544ac6d03565909b3043fab104bf40cadb32d53a12d821e1328bc50f087 xmrig-2.6.2-gcc-win64.zip/xmrig.exe
|
d53154cef24c884b2be539ac13bfb6e7dba6bbc53b62e91f2877637d43fa4b15 xmrig-2.6.1-gcc-win64.zip/xmrig.exe
|
||||||
24661a8807f4b991c79e587e846aaea589720ed84d79afb41d14709a6fb908ce xmrig-2.6.2-msvc-win64.zip/xmrig.exe
|
a253381b617463e6e1193d49b8afbf720a1c376621da7429d97f192668cd59ad xmrig-2.6.1-msvc-win64.zip/xmrig.exe
|
||||||
```
|
```
|
||||||
|
|
||||||
## Contacts
|
## Contacts
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
|
||||||
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
|
||||||
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
|
||||||
* Copyright 2016-2017 XMRig <support@xmrig.com>
|
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
*
|
* Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -110,12 +110,12 @@ int Cpu::m_l2_cache = 0;
|
||||||
int Cpu::m_l3_cache = 0;
|
int Cpu::m_l3_cache = 0;
|
||||||
int Cpu::m_sockets = 1;
|
int Cpu::m_sockets = 1;
|
||||||
int Cpu::m_totalCores = 0;
|
int Cpu::m_totalCores = 0;
|
||||||
int Cpu::m_totalThreads = 0;
|
size_t Cpu::m_totalThreads = 0;
|
||||||
|
|
||||||
|
|
||||||
int Cpu::optimalThreadsCount(int algo, bool doubleHash, int maxCpuUsage)
|
size_t Cpu::optimalThreadsCount(size_t size, int maxCpuUsage)
|
||||||
{
|
{
|
||||||
int count = m_totalThreads / 2;
|
const size_t count = m_totalThreads / 2;
|
||||||
return count < 1 ? 1 : count;
|
return count < 1 ? 1 : count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,13 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <uv.h>
|
#include <uv.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -93,5 +93,5 @@ void FileLog::write(char *data, size_t size)
|
||||||
uv_fs_t *req = new uv_fs_t;
|
uv_fs_t *req = new uv_fs_t;
|
||||||
req->data = buf.base;
|
req->data = buf.base;
|
||||||
|
|
||||||
uv_fs_write(uv_default_loop(), req, m_file, &buf, 1, 0, FileLog::onWrite);
|
uv_fs_write(uv_default_loop(), req, m_file, &buf, 1, -1, FileLog::onWrite);
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,10 @@ Pool::Pool(const char *host, uint16_t port, const char *user, const char *passwo
|
||||||
|
|
||||||
bool Pool::isCompatible(const xmrig::Algorithm &algorithm) const
|
bool Pool::isCompatible(const xmrig::Algorithm &algorithm) const
|
||||||
{
|
{
|
||||||
|
if (m_algorithms.empty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for (const auto &a : m_algorithms) {
|
for (const auto &a : m_algorithms) {
|
||||||
if (algorithm == a) {
|
if (algorithm == a) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#define __CRYPTONIGHT_ARM_H__
|
#define __CRYPTONIGHT_ARM_H__
|
||||||
|
|
||||||
|
|
||||||
|
#include "common/crypto/keccak.h"
|
||||||
#include "common/utils/mm_malloc.h"
|
#include "common/utils/mm_malloc.h"
|
||||||
#include "crypto/CryptoNight.h"
|
#include "crypto/CryptoNight.h"
|
||||||
#include "crypto/CryptoNight_constants.h"
|
#include "crypto/CryptoNight_constants.h"
|
||||||
|
@ -36,7 +37,6 @@
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "crypto/c_keccak.h"
|
|
||||||
#include "crypto/c_groestl.h"
|
#include "crypto/c_groestl.h"
|
||||||
#include "crypto/c_blake256.h"
|
#include "crypto/c_blake256.h"
|
||||||
#include "crypto/c_jh.h"
|
#include "crypto/c_jh.h"
|
||||||
|
@ -380,6 +380,7 @@ static inline void cn_implode_scratchpad(const __m128i *input, __m128i *output)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<int SHIFT>
|
||||||
static inline void cryptonight_monero_tweak(uint64_t* mem_out, __m128i tmp)
|
static inline void cryptonight_monero_tweak(uint64_t* mem_out, __m128i tmp)
|
||||||
{
|
{
|
||||||
mem_out[0] = EXTRACT64(tmp);
|
mem_out[0] = EXTRACT64(tmp);
|
||||||
|
@ -388,7 +389,7 @@ static inline void cryptonight_monero_tweak(uint64_t* mem_out, __m128i tmp)
|
||||||
|
|
||||||
uint8_t x = vh >> 24;
|
uint8_t x = vh >> 24;
|
||||||
static const uint16_t table = 0x7531;
|
static const uint16_t table = 0x7531;
|
||||||
const uint8_t index = (((x >> 3) & 6) | (x & 1)) << 1;
|
const uint8_t index = (((x >> SHIFT) & 6) | (x & 1)) << 1;
|
||||||
vh ^= ((table >> index) & 0x3) << 28;
|
vh ^= ((table >> index) & 0x3) << 28;
|
||||||
|
|
||||||
mem_out[1] = vh;
|
mem_out[1] = vh;
|
||||||
|
@ -407,7 +408,7 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
keccak(input, (int) size, ctx[0]->state, 200);
|
xmrig::keccak(input, size, ctx[0]->state);
|
||||||
|
|
||||||
VARIANT1_INIT(0);
|
VARIANT1_INIT(0);
|
||||||
|
|
||||||
|
@ -434,7 +435,7 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VARIANT > 0) {
|
if (VARIANT > 0) {
|
||||||
cryptonight_monero_tweak((uint64_t*)&l0[idx0 & MASK], _mm_xor_si128(bx0, cx));
|
cryptonight_monero_tweak<VARIANT == xmrig::VARIANT_XTL ? 4 : 3>((uint64_t*)&l0[idx0 & MASK], _mm_xor_si128(bx0, cx));
|
||||||
} else {
|
} else {
|
||||||
_mm_store_si128((__m128i *)&l0[idx0 & MASK], _mm_xor_si128(bx0, cx));
|
_mm_store_si128((__m128i *)&l0[idx0 & MASK], _mm_xor_si128(bx0, cx));
|
||||||
}
|
}
|
||||||
|
@ -450,13 +451,22 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
al0 += hi;
|
al0 += hi;
|
||||||
ah0 += lo;
|
ah0 += lo;
|
||||||
|
|
||||||
VARIANT1_2(ah0, 0);
|
|
||||||
((uint64_t*)&l0[idx0 & MASK])[0] = al0;
|
((uint64_t*)&l0[idx0 & MASK])[0] = al0;
|
||||||
((uint64_t*)&l0[idx0 & MASK])[1] = ah0;
|
|
||||||
VARIANT1_2(ah0, 0);
|
|
||||||
|
|
||||||
ah0 ^= ch;
|
if (VARIANT > 0) {
|
||||||
|
if (VARIANT == xmrig::VARIANT_IPBC) {
|
||||||
|
((uint64_t*)&l0[idx0 & MASK])[1] = ah0 ^ tweak1_2_0 ^ al0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
((uint64_t*)&l0[idx0 & MASK])[1] = ah0 ^ tweak1_2_0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
((uint64_t*)&l0[idx0 & MASK])[1] = ah0;
|
||||||
|
}
|
||||||
|
|
||||||
al0 ^= cl;
|
al0 ^= cl;
|
||||||
|
ah0 ^= ch;
|
||||||
idx0 = al0;
|
idx0 = al0;
|
||||||
|
|
||||||
if (ALGO == xmrig::CRYPTONIGHT_HEAVY) {
|
if (ALGO == xmrig::CRYPTONIGHT_HEAVY) {
|
||||||
|
@ -471,7 +481,7 @@ inline void cryptonight_single_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
|
|
||||||
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) ctx[0]->memory, (__m128i*) ctx[0]->state);
|
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) ctx[0]->memory, (__m128i*) ctx[0]->state);
|
||||||
|
|
||||||
keccakf(h0, 24);
|
xmrig::keccakf(h0, 24);
|
||||||
extra_hashes[ctx[0]->state[0] & 3](ctx[0]->state, 200, output);
|
extra_hashes[ctx[0]->state[0] & 3](ctx[0]->state, 200, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -488,8 +498,8 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
keccak(input, (int) size, ctx[0]->state, 200);
|
xmrig::keccak(input, size, ctx[0]->state);
|
||||||
keccak(input + size, (int) size, ctx[1]->state, 200);
|
xmrig::keccak(input + size, size, ctx[1]->state);
|
||||||
|
|
||||||
VARIANT1_INIT(0);
|
VARIANT1_INIT(0);
|
||||||
VARIANT1_INIT(1);
|
VARIANT1_INIT(1);
|
||||||
|
@ -528,8 +538,8 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VARIANT > 0) {
|
if (VARIANT > 0) {
|
||||||
cryptonight_monero_tweak((uint64_t*)&l0[idx0 & MASK], _mm_xor_si128(bx0, cx0));
|
cryptonight_monero_tweak<VARIANT == xmrig::VARIANT_XTL ? 4 : 3>((uint64_t*)&l0[idx0 & MASK], _mm_xor_si128(bx0, cx0));
|
||||||
cryptonight_monero_tweak((uint64_t*)&l1[idx1 & MASK], _mm_xor_si128(bx1, cx1));
|
cryptonight_monero_tweak<VARIANT == xmrig::VARIANT_XTL ? 4 : 3>((uint64_t*)&l1[idx1 & MASK], _mm_xor_si128(bx1, cx1));
|
||||||
} else {
|
} else {
|
||||||
_mm_store_si128((__m128i *) &l0[idx0 & MASK], _mm_xor_si128(bx0, cx0));
|
_mm_store_si128((__m128i *) &l0[idx0 & MASK], _mm_xor_si128(bx0, cx0));
|
||||||
_mm_store_si128((__m128i *) &l1[idx1 & MASK], _mm_xor_si128(bx1, cx1));
|
_mm_store_si128((__m128i *) &l1[idx1 & MASK], _mm_xor_si128(bx1, cx1));
|
||||||
|
@ -549,13 +559,22 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
al0 += hi;
|
al0 += hi;
|
||||||
ah0 += lo;
|
ah0 += lo;
|
||||||
|
|
||||||
VARIANT1_2(ah0, 0);
|
((uint64_t*)&l0[idx0 & MASK])[0] = al0;
|
||||||
((uint64_t*) &l0[idx0 & MASK])[0] = al0;
|
|
||||||
((uint64_t*) &l0[idx0 & MASK])[1] = ah0;
|
if (VARIANT > 0) {
|
||||||
VARIANT1_2(ah0, 0);
|
if (VARIANT == xmrig::VARIANT_IPBC) {
|
||||||
|
((uint64_t*)&l0[idx0 & MASK])[1] = ah0 ^ tweak1_2_0 ^ al0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
((uint64_t*)&l0[idx0 & MASK])[1] = ah0 ^ tweak1_2_0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
((uint64_t*)&l0[idx0 & MASK])[1] = ah0;
|
||||||
|
}
|
||||||
|
|
||||||
ah0 ^= ch;
|
|
||||||
al0 ^= cl;
|
al0 ^= cl;
|
||||||
|
ah0 ^= ch;
|
||||||
idx0 = al0;
|
idx0 = al0;
|
||||||
|
|
||||||
if (ALGO == xmrig::CRYPTONIGHT_HEAVY) {
|
if (ALGO == xmrig::CRYPTONIGHT_HEAVY) {
|
||||||
|
@ -574,13 +593,22 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
al1 += hi;
|
al1 += hi;
|
||||||
ah1 += lo;
|
ah1 += lo;
|
||||||
|
|
||||||
VARIANT1_2(ah1, 1);
|
((uint64_t*)&l1[idx1 & MASK])[0] = al1;
|
||||||
((uint64_t*) &l1[idx1 & MASK])[0] = al1;
|
|
||||||
((uint64_t*) &l1[idx1 & MASK])[1] = ah1;
|
if (VARIANT > 0) {
|
||||||
VARIANT1_2(ah1, 1);
|
if (VARIANT == xmrig::VARIANT_IPBC) {
|
||||||
|
((uint64_t*)&l1[idx1 & MASK])[1] = ah1 ^ tweak1_2_1 ^ al1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
((uint64_t*)&l1[idx1 & MASK])[1] = ah1 ^ tweak1_2_1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
((uint64_t*)&l1[idx1 & MASK])[1] = ah1;
|
||||||
|
}
|
||||||
|
|
||||||
ah1 ^= ch;
|
|
||||||
al1 ^= cl;
|
al1 ^= cl;
|
||||||
|
ah1 ^= ch;
|
||||||
idx1 = al1;
|
idx1 = al1;
|
||||||
|
|
||||||
if (ALGO == xmrig::CRYPTONIGHT_HEAVY) {
|
if (ALGO == xmrig::CRYPTONIGHT_HEAVY) {
|
||||||
|
@ -596,8 +624,8 @@ inline void cryptonight_double_hash(const uint8_t *__restrict__ input, size_t si
|
||||||
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) l0, (__m128i*) h0);
|
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) l0, (__m128i*) h0);
|
||||||
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) l1, (__m128i*) h1);
|
cn_implode_scratchpad<ALGO, MEM, SOFT_AES>((__m128i*) l1, (__m128i*) h1);
|
||||||
|
|
||||||
keccakf(h0, 24);
|
xmrig::keccakf(h0, 24);
|
||||||
keccakf(h1, 24);
|
xmrig::keccakf(h1, 24);
|
||||||
|
|
||||||
extra_hashes[ctx[0]->state[0] & 3](ctx[0]->state, 200, output);
|
extra_hashes[ctx[0]->state[0] & 3](ctx[0]->state, 200, output);
|
||||||
extra_hashes[ctx[1]->state[0] & 3](ctx[1]->state, 200, output + 32);
|
extra_hashes[ctx[1]->state[0] & 3](ctx[1]->state, 200, output + 32);
|
||||||
|
|
|
@ -68,7 +68,7 @@ DonateStrategy::DonateStrategy(int level, const char *user, xmrig::Algo algo, IS
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Pool &pool : m_pools) {
|
for (Pool &pool : m_pools) {
|
||||||
pool.algorithm().setAlgo(algo);
|
pool.adjust(algo);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pools.size() > 1) {
|
if (m_pools.size() > 1) {
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#define APP_ID "xmrig"
|
#define APP_ID "xmrig"
|
||||||
#define APP_NAME "XMRig"
|
#define APP_NAME "XMRig"
|
||||||
#define APP_DESC "XMRig CPU miner"
|
#define APP_DESC "XMRig CPU miner"
|
||||||
#define APP_VERSION "2.6.1"
|
#define APP_VERSION "2.6.2"
|
||||||
#define APP_DOMAIN "xmrig.com"
|
#define APP_DOMAIN "xmrig.com"
|
||||||
#define APP_SITE "www.xmrig.com"
|
#define APP_SITE "www.xmrig.com"
|
||||||
#define APP_COPYRIGHT "Copyright (C) 2016-2018 xmrig.com"
|
#define APP_COPYRIGHT "Copyright (C) 2016-2018 xmrig.com"
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
#define APP_VER_MAJOR 2
|
#define APP_VER_MAJOR 2
|
||||||
#define APP_VER_MINOR 6
|
#define APP_VER_MINOR 6
|
||||||
#define APP_VER_PATCH 1
|
#define APP_VER_PATCH 2
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# if (_MSC_VER >= 1910)
|
# if (_MSC_VER >= 1910)
|
||||||
|
|
|
@ -307,7 +307,7 @@ void Workers::start(IWorker *worker)
|
||||||
m_status.hugePages, m_status.pages, percent, memory);
|
m_status.hugePages, m_status.pages, percent, memory);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LOG_INFO("READY (CPU) threads %zu(%zu) huge pages %zu/%zu %f%% memory %zu.0 MB",
|
LOG_INFO("READY (CPU) threads %zu(%zu) huge pages %zu/%zu %1.0f%% memory %zu.0 MB",
|
||||||
m_status.threads, m_status.ways, m_status.hugePages, m_status.pages, percent, memory);
|
m_status.threads, m_status.ways, m_status.hugePages, m_status.pages, percent, memory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue