Merge branch '0.4.x'
This commit is contained in:
13
blkmaker.c
13
blkmaker.c
@@ -158,14 +158,17 @@ bool blkmk_hash_transactions(blktemplate_t * const tmpl)
|
||||
for (unsigned long i = 0; i < tmpl->txncount; ++i)
|
||||
{
|
||||
struct blktxn_t * const txn = &tmpl->txns[i];
|
||||
if (txn->hash_)
|
||||
if (txn->hash)
|
||||
continue;
|
||||
txn->hash_ = malloc(sizeof(*txn->hash_));
|
||||
if (!dblsha256(txn->hash_, txn->data, txn->datasz))
|
||||
txn->hash = malloc(sizeof(*txn->hash) * 2);
|
||||
if (!dblsha256(&txn->hash[1], txn->data, txn->datasz))
|
||||
{
|
||||
free(txn->hash_);
|
||||
free(txn->hash);
|
||||
txn->hash = NULL;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
blkmk_flip(&txn->hash[0], &txn->hash[1], sizeof(*txn->hash));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -196,7 +199,7 @@ bool blkmk_build_merkle_branches(blktemplate_t * const tmpl)
|
||||
unsigned char hashes[(hashcount + 1) * 32];
|
||||
|
||||
for (i = 0; i < tmpl->txncount; ++i)
|
||||
memcpy(&hashes[0x20 * (i + 1)], tmpl->txns[i].hash_, 0x20);
|
||||
memcpy(&hashes[0x20 * (i + 1)], &tmpl->txns[i].hash[1], 0x20);
|
||||
|
||||
for (i = 0; i < branchcount; ++i)
|
||||
{
|
||||
|
||||
@@ -124,8 +124,6 @@ err:
|
||||
tmpl->skey = true; \
|
||||
} while(0)
|
||||
|
||||
static void my_flip(void *, size_t);
|
||||
|
||||
static
|
||||
const char *parse_txn(struct blktxn_t *txn, json_t *txnj) {
|
||||
json_t *vv;
|
||||
@@ -142,14 +140,14 @@ const char *parse_txn(struct blktxn_t *txn, json_t *txnj) {
|
||||
if ((vv = json_object_get(txnj, "hash")) && json_is_string(vv))
|
||||
{
|
||||
hexdata = json_string_value(vv);
|
||||
txn->hash_ = malloc(sizeof(*txn->hash_));
|
||||
if (!my_hex2bin(*txn->hash_, hexdata, sizeof(*txn->hash_)))
|
||||
txn->hash = malloc(sizeof(*txn->hash) * 2);
|
||||
if (!my_hex2bin(txn->hash, hexdata, sizeof(*txn->hash)))
|
||||
{
|
||||
free(txn->hash_);
|
||||
txn->hash_ = NULL;
|
||||
free(txn->hash);
|
||||
txn->hash = NULL;
|
||||
}
|
||||
else
|
||||
my_flip(*txn->hash_, sizeof(*txn->hash_));
|
||||
blkmk_flip(&txn->hash[1], &txn->hash[0], sizeof(*txn->hash));
|
||||
}
|
||||
|
||||
// TODO: dependcount/depends, fee, required, sigops
|
||||
@@ -157,19 +155,7 @@ const char *parse_txn(struct blktxn_t *txn, json_t *txnj) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static
|
||||
void my_flip(void *data, size_t datasz) {
|
||||
char *cdata = (char*)data;
|
||||
--datasz;
|
||||
size_t hds = datasz / 2;
|
||||
for (size_t i = 0; i <= hds; ++i)
|
||||
{
|
||||
int altp = datasz - i;
|
||||
char c = cdata[i];
|
||||
cdata[i] = cdata[altp];
|
||||
cdata[altp] = c;
|
||||
}
|
||||
}
|
||||
#define my_flip(data, datasz) blkmk_flip(data, data, datasz)
|
||||
|
||||
const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t time_rcvd) {
|
||||
if (tmpl->version)
|
||||
|
||||
@@ -96,7 +96,6 @@ bool blktmpl_get_submitold(blktemplate_t *tmpl) {
|
||||
void _blktxn_free(struct blktxn_t *bt) {
|
||||
free(bt->data);
|
||||
free(bt->hash);
|
||||
free(bt->hash_);
|
||||
free(bt->depends);
|
||||
}
|
||||
#define blktxn_free _blktxn_free
|
||||
|
||||
@@ -27,7 +27,7 @@ typedef uint32_t blknonce_t;
|
||||
struct blktxn_t {
|
||||
unsigned char *data;
|
||||
size_t datasz;
|
||||
// NOTE: The byte order of hash is backward; use hash_ instead
|
||||
// NOTE: The byte order of hash is backward
|
||||
txnhash_t *hash;
|
||||
|
||||
signed long dependcount;
|
||||
@@ -36,8 +36,6 @@ struct blktxn_t {
|
||||
uint64_t fee;
|
||||
bool required;
|
||||
int16_t sigops;
|
||||
|
||||
txnhash_t *hash_;
|
||||
};
|
||||
|
||||
struct blkaux_t {
|
||||
@@ -90,6 +88,7 @@ extern gbt_capabilities_t blktmpl_getcapability(const char *);
|
||||
|
||||
typedef gbt_capabilities_t blkmutations_t;
|
||||
|
||||
// WARNING: Do not allocate this (ABI is not guaranteed to remain fixed-size)
|
||||
typedef struct {
|
||||
uint32_t version;
|
||||
unsigned char diffbits[4];
|
||||
|
||||
15
private.h
15
private.h
@@ -30,4 +30,19 @@ int blkmk_flsl(unsigned long n)
|
||||
return i;
|
||||
}
|
||||
|
||||
static inline
|
||||
void blkmk_flip(void * const out, void * const data, size_t datasz) {
|
||||
char * const cout = out;
|
||||
char * const cdata = data;
|
||||
--datasz;
|
||||
size_t hds = datasz / 2;
|
||||
for (size_t i = 0; i <= hds; ++i)
|
||||
{
|
||||
int altp = datasz - i;
|
||||
char c = cdata[i];
|
||||
cout[i] = cdata[altp];
|
||||
cout[altp] = c;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user