-
Notifications
You must be signed in to change notification settings - Fork 0
/
poolApi.h
82 lines (68 loc) · 1.49 KB
/
poolApi.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#pragma once
#include <string>
#include <vector>
#include <openssl\sha.h>
using namespace std;
using namespace utility; // Common utilities like string conversions
void mySleep(unsigned milliseconds);
class Metrics
{
uint64_t hashesTried;
std::mutex mutex;
public:
Metrics() {
hashesTried = 0;
}
uint64_t getHashesTried() { return hashesTried; }
void addHashesTried(uint64_t hashCount)
{
mutex.lock();
hashesTried += hashCount;
mutex.unlock();
}
};
class WorkData
{
private:
SHA256_CTX ctx;
bool newWork = false;
public:
vector<unsigned char> bhash;
vector<unsigned char> nonce;
int blockDifficulty;
int shareDifficulty;
std::mutex mutexNewWork;
//std::mutex mutexCtx;
public:
WorkData() {
bhash = vector<unsigned char>(32);
nonce = vector<unsigned char>(15);
}
bool HasNewWork() { return newWork; }
void clearNewWork()
{
mutexNewWork.lock();
newWork = false;
mutexNewWork.unlock();
}
void getCtx(SHA256_CTX * pCtx) {
//mutexCtx.lock();
memcpy(pCtx, &ctx, 0x70);
//mutexCtx.unlock();
}
void setCtx(SHA256_CTX * pCtx)
{
//mutexCtx.lock();
memcpy(&ctx, pCtx, 0x70);
//mutexCtx.unlock();
mutexNewWork.lock();
newWork = true;
mutexNewWork.unlock();
}
};
class PoolApi
{
public:
void GetWork(string_t poolUrl, WorkData * pMinerThreadData, string minerPublicKeyBase64);
void SubmitWork(string_t poolUrl, string nonceBase64, string minerPublicKeyBase64);
};