API break: Represent unknown txn {dependscount,fee_,sigops_} as -1 instead of 0

Also renamed the fields to break code relying on old interpretation
This commit is contained in:
Luke Dashjr
2016-07-26 00:31:45 +00:00
parent 7e7f376aa3
commit 12db22114d
5 changed files with 30 additions and 14 deletions

View File

@@ -125,19 +125,20 @@ uint64_t blkmk_init_generation3(blktemplate_t * const tmpl, const void * const s
return 0;
}
struct blktxn_t *txn = calloc(1, sizeof(*tmpl->cbtxn));
struct blktxn_t *txn = malloc(sizeof(*tmpl->cbtxn));
if (!txn)
{
free(data);
return 0;
}
blktxn_init(txn);
txn->data = data;
txn->datasz = off;
if (tmpl->cbtxn)
{
_blktxn_free(tmpl->cbtxn);
blktxn_clean(tmpl->cbtxn);
free(tmpl->cbtxn);
}
tmpl->cbtxn = txn;

View File

@@ -142,6 +142,8 @@ static
const char *parse_txn(struct blktxn_t *txn, json_t *txnj) {
json_t *vv;
blktxn_init(txn);
if (!((vv = json_object_get(txnj, "data")) && json_is_string(vv)))
return "Missing or invalid type for transaction data";
const char *hexdata = json_string_value(vv);
@@ -224,7 +226,7 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
v = json_object_get(json, "transactions");
size_t txns = tmpl->txncount = json_array_size(v);
tmpl->txns = calloc(txns, sizeof(*tmpl->txns));
tmpl->txns = malloc(txns * sizeof(*tmpl->txns));
tmpl->txns_datasz = 0;
for (size_t i = 0; i < txns; ++i)
{
@@ -237,7 +239,7 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
if ((v = json_object_get(json, "coinbasetxn")) && json_is_object(v))
{
tmpl->cbtxn = calloc(1, sizeof(*tmpl->cbtxn));
tmpl->cbtxn = malloc(sizeof(*tmpl->cbtxn));
if ((s = parse_txn(tmpl->cbtxn, v)))
return s;
}

View File

@@ -58,6 +58,20 @@ gbt_capabilities_t blktmpl_getcapability(const char *n) {
return 0;
}
void blktxn_init(struct blktxn_t * const txn) {
txn->data = NULL;
txn->datasz = 0;
txn->hash = NULL;
txn->hash_ = NULL;
txn->dependscount = -1;
txn->depends = NULL;
txn->fee_ = -1;
txn->required = false;
txn->sigops_ = -1;
}
blktemplate_t *blktmpl_create() {
blktemplate_t *tmpl;
tmpl = calloc(1, sizeof(*tmpl));
@@ -94,13 +108,12 @@ bool blktmpl_get_submitold(blktemplate_t *tmpl) {
return tmpl->submitold;
}
void _blktxn_free(struct blktxn_t *bt) {
void blktxn_clean(struct blktxn_t * const bt) {
free(bt->data);
free(bt->hash);
free(bt->hash_);
free(bt->depends);
}
#define blktxn_free _blktxn_free
static
void blkaux_clean(struct blkaux_t * const aux) {
@@ -110,11 +123,11 @@ void blkaux_clean(struct blkaux_t * const aux) {
void blktmpl_free(blktemplate_t *tmpl) {
for (unsigned long i = 0; i < tmpl->txncount; ++i)
blktxn_free(&tmpl->txns[i]);
blktxn_clean(&tmpl->txns[i]);
free(tmpl->txns);
if (tmpl->cbtxn)
{
blktxn_free(tmpl->cbtxn);
blktxn_clean(tmpl->cbtxn);
free(tmpl->cbtxn);
}
free(tmpl->_mrklbranch);

View File

@@ -33,12 +33,12 @@ struct blktxn_t {
// NOTE: The byte order of hash is backward; use hash_ instead
txnhash_t *hash;
signed long dependcount;
signed long dependscount;
unsigned long *depends;
uint64_t fee;
int64_t fee_;
bool required;
int16_t sigops;
int16_t sigops_;
txnhash_t *hash_;
};
@@ -141,6 +141,9 @@ typedef struct {
unsigned long txns_datasz;
} blktemplate_t;
extern void blktxn_init(struct blktxn_t *);
extern void blktxn_clean(struct blktxn_t *);
extern blktemplate_t *blktmpl_create();
extern uint32_t blktmpl_addcaps(const blktemplate_t *);
extern const struct blktmpl_longpoll_req *blktmpl_get_longpoll(blktemplate_t *);

View File

@@ -11,9 +11,6 @@ extern bool _blkmk_dblsha256(void *hash, const void *data, size_t datasz);
extern bool blkmk_sample_data_(blktemplate_t *, uint8_t *, unsigned int dataid);
extern char *blkmk_assemble_submission2_(blktemplate_t *, const unsigned char *data, const void *extranonce, size_t extranoncesz, unsigned int dataid, blknonce_t nonce, bool foreign);
// blktemplate.c
extern void _blktxn_free(struct blktxn_t *);
// hex.c
extern void _blkmk_bin2hex(char *out, const void *data, size_t datasz);
extern bool _blkmk_hex2bin(void *o, const char *x, size_t len);