getblocktemplate: version/force, version/reduce

This commit is contained in:
pooler 2014-05-06 22:07:13 +02:00
parent 35d8fd82c4
commit 9c8cad615a

View file

@ -352,6 +352,8 @@ static bool gbt_work_decode(const json_t *val, struct work *work)
unsigned char txc_vi[9]; unsigned char txc_vi[9];
unsigned char (*merkle_tree)[32] = NULL; unsigned char (*merkle_tree)[32] = NULL;
bool submit_coinbase = false; bool submit_coinbase = false;
bool version_force = false;
bool version_reduce = false;
json_t *tmp, *txa; json_t *tmp, *txa;
bool rc = false; bool rc = false;
@ -360,8 +362,14 @@ static bool gbt_work_decode(const json_t *val, struct work *work)
n = json_array_size(tmp); n = json_array_size(tmp);
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
const char *s = json_string_value(json_array_get(tmp, i)); const char *s = json_string_value(json_array_get(tmp, i));
if (s && !strcmp(s, "submit/coinbase")) if (!s)
continue;
if (!strcmp(s, "submit/coinbase"))
submit_coinbase = true; submit_coinbase = true;
else if (!strcmp(s, "version/force"))
version_force = true;
else if (!strcmp(s, "version/reduce"))
version_reduce = true;
} }
} }
@ -378,16 +386,27 @@ static bool gbt_work_decode(const json_t *val, struct work *work)
goto out; goto out;
} }
version = json_integer_value(tmp); version = json_integer_value(tmp);
if (version > 2) {
if (version_reduce) {
version = 2;
} else if (!version_force) {
applog(LOG_ERR, "Unrecognized block version: %u", version);
goto out;
}
}
if (unlikely(!jobj_binary(val, "previousblockhash", prevhash, sizeof(prevhash)))) { if (unlikely(!jobj_binary(val, "previousblockhash", prevhash, sizeof(prevhash)))) {
applog(LOG_ERR, "JSON invalid previousblockhash"); applog(LOG_ERR, "JSON invalid previousblockhash");
goto out; goto out;
} }
tmp = json_object_get(val, "curtime"); tmp = json_object_get(val, "curtime");
if (!tmp || !json_is_integer(tmp)) { if (!tmp || !json_is_integer(tmp)) {
applog(LOG_ERR, "JSON invalid curtime"); applog(LOG_ERR, "JSON invalid curtime");
goto out; goto out;
} }
curtime = json_integer_value(tmp); curtime = json_integer_value(tmp);
if (unlikely(!jobj_binary(val, "bits", &bits, sizeof(bits)))) { if (unlikely(!jobj_binary(val, "bits", &bits, sizeof(bits)))) {
applog(LOG_ERR, "JSON invalid bits"); applog(LOG_ERR, "JSON invalid bits");
goto out; goto out;