You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.9 KiB
101 lines
2.9 KiB
/* |
|
* Copyright 2014-2018 Con Kolivas |
|
* |
|
* 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 the Free |
|
* Software Foundation; either version 3 of the License, or (at your option) |
|
* any later version. See COPYING for more details. |
|
*/ |
|
|
|
#ifndef STRATIFIER_H |
|
#define STRATIFIER_H |
|
|
|
/* Generic structure for both workbase in stratifier and gbtbase in generator */ |
|
struct genwork { |
|
/* Hash table data */ |
|
UT_hash_handle hh; |
|
|
|
/* The next two fields need to be consecutive as both of them are |
|
* used as the key for their hashtable entry in remote_workbases */ |
|
int64_t id; |
|
/* The client id this workinfo came from if remote */ |
|
int64_t client_id; |
|
|
|
char idstring[20]; |
|
|
|
/* How many readers we currently have of this workbase, set |
|
* under write workbase_lock */ |
|
int readcount; |
|
|
|
/* The id a remote workinfo is mapped to locally */ |
|
int64_t mapped_id; |
|
|
|
ts_t gentime; |
|
tv_t retired; |
|
|
|
/* GBT/shared variables */ |
|
char target[68]; |
|
double diff; |
|
double network_diff; |
|
uint32_t version; |
|
uint32_t curtime; |
|
char prevhash[68]; |
|
char ntime[12]; |
|
uint32_t ntime32; |
|
char bbversion[12]; |
|
char nbit[12]; |
|
uint64_t coinbasevalue; |
|
int height; |
|
char *flags; |
|
int txns; |
|
char *txn_data; |
|
char *txn_hashes; |
|
char witnessdata[80]; //null-terminated ascii |
|
bool insert_witness; |
|
int merkles; |
|
char merklehash[16][68]; |
|
char merklebin[16][32]; |
|
json_t *merkle_array; |
|
|
|
/* Template variables, lengths are binary lengths! */ |
|
char *coinb1; // coinbase1 |
|
uchar *coinb1bin; |
|
int coinb1len; // length of above |
|
|
|
char enonce1const[32]; // extranonce1 section that is constant |
|
uchar enonce1constbin[16]; |
|
int enonce1constlen; // length of above - usually zero unless proxying |
|
int enonce1varlen; // length of unique extranonce1 string for each worker - usually 8 |
|
|
|
int enonce2varlen; // length of space left for extranonce2 - usually 8 unless proxying |
|
|
|
char *coinb2; // coinbase2 |
|
uchar *coinb2bin; |
|
int coinb2len; // length of above |
|
|
|
/* Cached header binary */ |
|
char headerbin[112]; |
|
|
|
char *logdir; |
|
|
|
ckpool_t *ckp; |
|
bool proxy; /* This workbase is proxied work */ |
|
|
|
bool incomplete; /* This is a remote workinfo without all the txn data */ |
|
|
|
json_t *json; /* getblocktemplate json */ |
|
}; |
|
|
|
void stratum_set_proxy_vmask(ckpool_t *ckp, int id, int subid, uint32_t version_mask); |
|
void parse_remote_txns(ckpool_t *ckp, const json_t *val); |
|
#define parse_upstream_txns(ckp, val) parse_remote_txns(ckp, val) |
|
void parse_upstream_auth(ckpool_t *ckp, json_t *val); |
|
void parse_upstream_workinfo(ckpool_t *ckp, json_t *val); |
|
void parse_upstream_block(ckpool_t *ckp, json_t *val); |
|
void parse_upstream_reqtxns(ckpool_t *ckp, json_t *val); |
|
char *stratifier_stats(ckpool_t *ckp, void *data); |
|
void _stratifier_add_recv(ckpool_t *ckp, json_t *val, const char *file, const char *func, const int line); |
|
#define stratifier_add_recv(ckp, val) _stratifier_add_recv(ckp, val, __FILE__, __func__, __LINE__) |
|
void *stratifier(void *arg); |
|
|
|
#endif /* STRATIFIER_H */
|
|
|