Merge branch '0.4.x' into 0.5.x

This commit is contained in:
Luke Dashjr
2016-08-11 07:43:37 +00:00
5 changed files with 32 additions and 4 deletions

1
.gitignore vendored
View File

@@ -23,3 +23,4 @@ autom4te.cache
config.*
ii
ar-lib
compile

View File

@@ -411,6 +411,17 @@ size_t blkmk_get_data(blktemplate_t *tmpl, void *buf, size_t bufsz, time_t useti
if (bufsz < 76)
return 76;
if (tmpl->cbtxn->datasz > cbScriptSigLen && tmpl->cbtxn->data[cbScriptSigLen] + sizeof(*out_dataid) < libblkmaker_coinbase_size_minimum) {
// Add some padding
const size_t padding_required = libblkmaker_coinbase_size_minimum - (tmpl->cbtxn->data[cbScriptSigLen] + sizeof(*out_dataid));
uint8_t padding[padding_required];
static const uint8_t opcode_nop = '\x61';
memset(padding, opcode_nop, padding_required);
if (padding_required != blkmk_append_coinbase_safe2(tmpl, padding, padding_required, 0, false)) {
return 0;
}
}
unsigned char *cbuf = buf;
*out_dataid = tmpl->next_dataid++;
@@ -428,6 +439,7 @@ bool blkmk_get_mdata(blktemplate_t * const tmpl, void * const buf, const size_t
&& tmpl->cbtxn
&& blkmk_build_merkle_branches(tmpl)
&& bufsz >= 76
&& (tmpl->mutations & (BMM_CBAPPEND | BMM_CBSET))
))
return false;
@@ -435,6 +447,10 @@ bool blkmk_get_mdata(blktemplate_t * const tmpl, void * const buf, const size_t
// Avoid overlapping with blkmk_get_data use
++extranoncesz;
if (tmpl->cbtxn->datasz > cbScriptSigLen && tmpl->cbtxn->data[cbScriptSigLen] + extranoncesz < libblkmaker_coinbase_size_minimum) {
extranoncesz = libblkmaker_coinbase_size_minimum - tmpl->cbtxn->data[cbScriptSigLen];
}
void ** const out_branches = _out_branches;
void ** const out_cbtxn = _out_cbtxn;
unsigned char *cbuf = buf;
@@ -481,9 +497,8 @@ unsigned long blkmk_work_left(const blktemplate_t *tmpl) {
if (!tmpl->version)
return 0;
if (!(tmpl->mutations & (BMM_CBAPPEND | BMM_CBSET)))
return 1;
return (tmpl->next_dataid) ? 0 : 1;
return UINT_MAX - tmpl->next_dataid;
return BLKMK_UNLIMITED_WORK_COUNT;
}
static

View File

@@ -286,6 +286,8 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
tmpl->cbtxn = calloc(1, sizeof(*tmpl->cbtxn));
if ((s = parse_txn(tmpl->cbtxn, v)))
return s;
} else if (!tmpl->cbvalue) {
return "Missing either coinbasetxn or coinbasevalue";
}
if ((v = json_object_get(json, "coinbaseaux")) && json_is_object(v))
@@ -383,7 +385,11 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
v = json_object_get(json, "vbrequired");
if (v && json_is_number(v)) {
tmpl->vbrequired = json_number_value(v);
double tmpd = json_number_value(v);
tmpl->vbrequired = tmpd;
if (tmpl->vbrequired != tmpd) {
return "Unparsable vbrequired";
}
}
}
else

View File

@@ -26,7 +26,7 @@ static const char *capnames[] = {
"coinbase/append",
"coinbase",
"generate",
"generation",
"time/increment",
"time/decrement",
"transactions/add",
@@ -53,6 +53,10 @@ gbt_capabilities_t blktmpl_getcapability(const char *n) {
for (unsigned int i = 0; i < GBT_CAPABILITY_COUNT; ++i)
if (capnames[i] && !strcasecmp(n, capnames[i]))
return 1 << i;
if (!strcasecmp(n, "time")) {
// multi-capability
return BMM_TIMEINC | BMM_TIMEDEC;
}
if (!strcasecmp(n, "transactions"))
return BMM_TXNADD; // Odd one as it's overloaded w/"transactions/add" per spec
return 0;

View File

@@ -25,6 +25,7 @@ typedef int16_t blktime_diff_t;
typedef uint32_t blknonce_t;
#define libblkmaker_blkheader_size (80)
#define libblkmaker_coinbase_size_minimum (4)
#define libblkmaker_coinbase_size_limit (100)
struct blktxn_t {
@@ -88,6 +89,7 @@ typedef enum {
extern const char *blktmpl_capabilityname(gbt_capabilities_t);
#define BLKTMPL_LONGEST_CAPABILITY_NAME (16)
// ABI FIXME: return uint32_t since "time" can yield a combination gbt_capabilities_t
extern gbt_capabilities_t blktmpl_getcapability(const char *);