Export BIP 22 long polling information (and accept lpid to make requests)
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
# error "Jansson 2.0 with long long support required!"
|
||||
#endif
|
||||
|
||||
json_t *blktmpl_request_jansson(gbt_capabilities_t caps) {
|
||||
json_t *blktmpl_request_jansson(gbt_capabilities_t caps, const char *lpid) {
|
||||
json_t *req, *jcaps, *jstr, *reqf, *reqa;
|
||||
if (!(req = json_object()))
|
||||
return NULL;
|
||||
@@ -46,6 +46,13 @@ json_t *blktmpl_request_jansson(gbt_capabilities_t caps) {
|
||||
goto err;
|
||||
if (json_object_set_new(req, "maxversion", jstr))
|
||||
goto err;
|
||||
if (lpid)
|
||||
{
|
||||
if (!(jstr = json_string(lpid)))
|
||||
goto err;
|
||||
if (json_object_set_new(req, "longpollid", jstr))
|
||||
goto err;
|
||||
}
|
||||
if (!(jstr = json_string("getblocktemplate")))
|
||||
goto err;
|
||||
if (json_object_set_new(reqf, "method", jstr))
|
||||
@@ -120,6 +127,20 @@ static bool my_hex2bin(void *o, const char *x, size_t len) {
|
||||
tmpl->key = json_integer_value(v); \
|
||||
} while(0)
|
||||
|
||||
#define GETSTR(key, skey) do { \
|
||||
if ((v = json_object_get(json, #key)) && json_is_string(v)) \
|
||||
if (!(tmpl->skey = strdup(json_string_value(v)))) \
|
||||
return "Error copying '" #key "'"; \
|
||||
} while(0)
|
||||
|
||||
#define GETBOOL(key, skey, def) do { \
|
||||
if ((v = json_object_get(json, #key)) && json_is_boolean(v)) \
|
||||
tmpl->skey = json_is_true(v); \
|
||||
else \
|
||||
if (def) \
|
||||
tmpl->skey = true; \
|
||||
} while(0)
|
||||
|
||||
static
|
||||
const char *parse_txn(struct blktxn_t *txn, json_t *txnj) {
|
||||
json_t *vv;
|
||||
@@ -191,9 +212,11 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
|
||||
if ((v = json_object_get(json, "coinbasevalue")) && json_is_number(v))
|
||||
tmpl->cbvalue = json_integer_value(v);
|
||||
|
||||
if ((v = json_object_get(json, "workid")) && json_is_string(v))
|
||||
if (!(tmpl->workid = strdup(json_string_value(v))))
|
||||
return "Error copying 'workid'";
|
||||
GETSTR(workid, workid);
|
||||
|
||||
GETSTR(longpollid, lp.id);
|
||||
GETSTR(longpolluri, lp.uri);
|
||||
GETBOOL(submitold, submitold, true);
|
||||
|
||||
v = json_object_get(json, "transactions");
|
||||
size_t txns = tmpl->txncount = json_array_size(v);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
#include <blktemplate.h>
|
||||
|
||||
extern json_t *blktmpl_request_jansson(gbt_capabilities_t extracaps);
|
||||
extern json_t *blktmpl_request_jansson(gbt_capabilities_t extracaps, const char *lpid);
|
||||
extern const char *blktmpl_add_jansson(blktemplate_t *, const json_t *, time_t time_rcvd);
|
||||
extern json_t *blkmk_submit_jansson(blktemplate_t *, const unsigned char *data, unsigned int dataid, blknonce_t);
|
||||
|
||||
|
||||
@@ -70,6 +70,16 @@ gbt_capabilities_t blktmpl_addcaps(const blktemplate_t *tmpl) {
|
||||
return GBT_CBTXN | GBT_WORKID | BMM_TIMEINC | BMM_CBAPPEND;
|
||||
}
|
||||
|
||||
const struct blktmpl_longpoll_req *blktmpl_get_longpoll(blktemplate_t *tmpl) {
|
||||
if (!tmpl->lp.id)
|
||||
return NULL;
|
||||
return &tmpl->lp;
|
||||
}
|
||||
|
||||
bool blktmpl_get_submitold(blktemplate_t *tmpl) {
|
||||
return tmpl->submitold;
|
||||
}
|
||||
|
||||
static
|
||||
void blktxn_free(struct blktxn_t *bt) {
|
||||
free(bt->data);
|
||||
@@ -90,5 +100,7 @@ void blktmpl_free(blktemplate_t *tmpl) {
|
||||
free(tmpl->auxnames);
|
||||
free(tmpl->auxdata);
|
||||
free(tmpl->workid);
|
||||
free(tmpl->lp.id);
|
||||
free(tmpl->lp.uri);
|
||||
free(tmpl);
|
||||
}
|
||||
|
||||
@@ -116,6 +116,8 @@ typedef struct {
|
||||
|
||||
extern blktemplate_t *blktmpl_create();
|
||||
extern gbt_capabilities_t blktmpl_addcaps(const blktemplate_t *);
|
||||
extern const struct blktmpl_longpoll_req *blktmpl_get_longpoll(blktemplate_t *);
|
||||
extern bool blktmpl_get_submitold(blktemplate_t *tmpl);
|
||||
extern void blktmpl_free(blktemplate_t *);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user