Merge branch '0.4.x'

This commit is contained in:
Luke Dashjr
2014-09-02 16:53:41 +00:00
5 changed files with 31 additions and 29 deletions

View File

@@ -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)
{

View File

@@ -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)

View File

@@ -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

View File

@@ -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];

View File

@@ -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