pool/stratum/util.h
Tanguy Pruvot 6d6fd9337f stratum: new algos, attempt to allow old sha merkleroot
blake (SFR) and whirlpool (J) tested ok with a sha256d merkleroot

So add a stratum setting to allow single sha256 merkle root...
The shares are now valid on the pool side, but remains to find
an old wallet to test... like Whirlcoin or blakecoin

keccak not tested, could have the same problem about merkle/miners
2015-10-07 05:04:04 +02:00

129 lines
3 KiB
C++

struct YAAMP_CLIENT;
struct COMMONLISTITEM
{
void *data;
struct COMMONLISTITEM *next;
struct COMMONLISTITEM *prev;
};
typedef COMMONLISTITEM *CLI;
typedef void (*LISTFREEPARAM)(void *);
class CommonList
{
public:
CommonList();
~CommonList();
CLI AddHead(void *data);
CLI AddTail(void *data);
void Delete(CLI item);
void Delete(void *data);
void DeleteAll(LISTFREEPARAM freeparam);
CLI Find(void *data);
void Swap(CLI i1, CLI i2);
void Enter();
void Leave();
pthread_mutex_t mutex;
int count;
CLI first;
CLI last;
};
void CommonLock(pthread_mutex_t *mutex);
void CommonUnlock(pthread_mutex_t *mutex);
//////////////////////////////////////////////////////////////////////////
bool json_get_bool(json_value *json, const char *name);
json_int_t json_get_int(json_value *json, const char *name);
double json_get_double(json_value *json, const char *name);
const char *json_get_string(json_value *json, const char *name);
json_value *json_get_array(json_value *json, const char *name);
json_value *json_get_object(json_value *json, const char *name);
void yaamp_create_mutex(pthread_mutex_t *mutex);
bool yaamp_error(char const *message);
const char *header_value(const char *data, const char *search, char *value);
void initlog(const char *algo);
void debuglog(const char *format, ...);
void stratumlog(const char *format, ...);
void clientlog(YAAMP_CLIENT *client, const char *format, ...);
//////////////////////////////////////////////////////////////////////////
vector<string> merkle_steps(vector<string> input);
string merkle_with_first(vector<string> steps, string f);
//////////////////////////////////////////////////////////////////////////
bool base58_decode(const char *input, char *output);
void base64_encode(char *base64, const char *normal);
void base64_decode(char *normal, const char *base64);
void ser_number(int n, char *s);
void ser_string_be(const char *input, char *output, int len);
void ser_string_be2(const char *input, char *output, int len);
void string_be(const char *input, char *output);
void string_be1(char *s);
void hexlify(char *hex, const unsigned char *bin, int len);
void binlify(unsigned char *bin, const char *hex);
unsigned int htoi(const char *s);
uint64_t htoi64(const char *s);
uint64_t decode_compact(const char *input);
uint64_t diff_to_target(double difficulty);
double target_to_diff(uint64_t target);
uint64_t get_hash_difficulty(unsigned char *input);
long long current_timestamp();
void string_lower(char *s);
void string_upper(char *s);
int getblocheight(const char *coinb1);
//////////////////////////////////////////////////////////////////////////
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
//////////////////////////////////////////////////////////////////////////
#if !HAVE_DECL_LE16DEC
static inline uint16_t le16dec(const void *pp)
{
const uint8_t *p = (uint8_t const *)pp;
return ((uint16_t)(p[0]) + ((uint16_t)(p[1]) << 8));
}
#endif