blkmaker_jansson: Support for constructing BIP 23 block proposals

This commit is contained in:
Luke Dashjr
2014-08-24 20:01:14 +00:00
parent 75d4da0d9b
commit b549d6ce6b
4 changed files with 64 additions and 10 deletions

View File

@@ -247,6 +247,50 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
return NULL;
}
json_t *blktmpl_propose_jansson(blktemplate_t * const tmpl, const gbt_capabilities_t caps, const bool foreign) {
json_t *jreq = blktmpl_request_jansson(caps, NULL), *ja = NULL, *jparams;
if (!(jreq && json_is_object(jreq)))
goto err;
jparams = json_array_get(json_object_get(jreq, "params"), 0);
if (!(jparams && json_is_object(jparams)))
goto err;
if (!(ja = json_string("proposal")))
goto err;
if (json_object_set_new(jparams, "mode", ja))
goto err;
if (tmpl->workid && !foreign)
{
if (!(ja = json_string(tmpl->workid)))
goto err;
if (json_object_set_new(jparams, "workid", ja))
goto err;
}
ja = NULL;
unsigned int dataid = (tmpl->mutations & (BMM_CBAPPEND | BMM_CBSET) ? 1 : 0);
uint8_t sdata[0x4c];
if (!blkmk_sample_data_(tmpl, sdata, dataid))
goto err;
char *blkhex = blkmk_assemble_submission_(tmpl, sdata, dataid, 0, foreign);
if (!blkhex)
goto err;
if (!(ja = json_string(blkhex)))
goto err;
if (json_object_set_new(jparams, "data", ja))
goto err;
return jreq;
err:
if (jreq) json_decref(jreq);
if (ja) json_decref(ja);
return NULL;
}
static
json_t *_blkmk_submit_jansson(blktemplate_t *tmpl, const unsigned char *data, unsigned int dataid, blknonce_t nonce, bool foreign) {
char *blkhex = blkmk_assemble_submission_(tmpl, data, dataid, nonce, foreign);