blkmk_init_generation3 capable of overriding a provided coinbasetxn if the generation mutation is allowed
This commit is contained in:
23
blkmaker.c
23
blkmaker.c
@@ -41,16 +41,14 @@ bool _blkmk_dblsha256(void *hash, const void *data, size_t datasz) {
|
|||||||
|
|
||||||
#define dblsha256 _blkmk_dblsha256
|
#define dblsha256 _blkmk_dblsha256
|
||||||
|
|
||||||
uint64_t blkmk_init_generation2(blktemplate_t *tmpl, void *script, size_t scriptsz, bool *out_newcb) {
|
uint64_t blkmk_init_generation3(blktemplate_t * const tmpl, const void * const script, const size_t scriptsz, bool * const inout_newcb) {
|
||||||
if (tmpl->cbtxn)
|
if (tmpl->cbtxn && !(*inout_newcb && (tmpl->mutations & BMM_GENERATE)))
|
||||||
{
|
{
|
||||||
if (out_newcb)
|
*inout_newcb = false;
|
||||||
*out_newcb = false;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (out_newcb)
|
*inout_newcb = true;
|
||||||
*out_newcb = true;
|
|
||||||
|
|
||||||
size_t datasz = 62 + sizeof(blkheight_t) + scriptsz;
|
size_t datasz = 62 + sizeof(blkheight_t) + scriptsz;
|
||||||
unsigned char *data = malloc(datasz);
|
unsigned char *data = malloc(datasz);
|
||||||
@@ -101,6 +99,11 @@ uint64_t blkmk_init_generation2(blktemplate_t *tmpl, void *script, size_t script
|
|||||||
txn->data = data;
|
txn->data = data;
|
||||||
txn->datasz = off;
|
txn->datasz = off;
|
||||||
|
|
||||||
|
if (tmpl->cbtxn)
|
||||||
|
{
|
||||||
|
_blktxn_free(tmpl->cbtxn);
|
||||||
|
free(tmpl->cbtxn);
|
||||||
|
}
|
||||||
tmpl->cbtxn = txn;
|
tmpl->cbtxn = txn;
|
||||||
|
|
||||||
tmpl->mutations |= BMM_CBAPPEND | BMM_CBSET | BMM_GENERATE;
|
tmpl->mutations |= BMM_CBAPPEND | BMM_CBSET | BMM_GENERATE;
|
||||||
@@ -108,6 +111,14 @@ uint64_t blkmk_init_generation2(blktemplate_t *tmpl, void *script, size_t script
|
|||||||
return tmpl->cbvalue;
|
return tmpl->cbvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t blkmk_init_generation2(blktemplate_t *tmpl, void *script, size_t scriptsz, bool *out_newcb) {
|
||||||
|
bool tmp;
|
||||||
|
if (!out_newcb)
|
||||||
|
out_newcb = &tmp;
|
||||||
|
*out_newcb = false;
|
||||||
|
blkmk_init_generation3(tmpl, script, scriptsz, out_newcb);
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t blkmk_init_generation(blktemplate_t *tmpl, void *script, size_t scriptsz) {
|
uint64_t blkmk_init_generation(blktemplate_t *tmpl, void *script, size_t scriptsz) {
|
||||||
return blkmk_init_generation2(tmpl, script, scriptsz, NULL);
|
return blkmk_init_generation2(tmpl, script, scriptsz, NULL);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ extern bool (*blkmk_sha256_impl)(void *hash_out, const void *data, size_t datasz
|
|||||||
|
|
||||||
extern uint64_t blkmk_init_generation(blktemplate_t *, void *script, size_t scriptsz);
|
extern uint64_t blkmk_init_generation(blktemplate_t *, void *script, size_t scriptsz);
|
||||||
extern uint64_t blkmk_init_generation2(blktemplate_t *, void *script, size_t scriptsz, bool *out_newcb);
|
extern uint64_t blkmk_init_generation2(blktemplate_t *, void *script, size_t scriptsz, bool *out_newcb);
|
||||||
|
extern uint64_t blkmk_init_generation3(blktemplate_t *, const void *script, size_t scriptsz, bool *inout_newcb);
|
||||||
extern ssize_t blkmk_append_coinbase_safe(blktemplate_t *, const void *append, size_t appendsz);
|
extern ssize_t blkmk_append_coinbase_safe(blktemplate_t *, const void *append, size_t appendsz);
|
||||||
extern bool _blkmk_extranonce(blktemplate_t *tmpl, void *vout, unsigned int workid, size_t *offs);
|
extern bool _blkmk_extranonce(blktemplate_t *tmpl, void *vout, unsigned int workid, size_t *offs);
|
||||||
extern size_t blkmk_get_data(blktemplate_t *, void *buf, size_t bufsz, time_t usetime, int16_t *out_expire, unsigned int *out_dataid);
|
extern size_t blkmk_get_data(blktemplate_t *, void *buf, size_t bufsz, time_t usetime, int16_t *out_expire, unsigned int *out_dataid);
|
||||||
|
|||||||
@@ -93,12 +93,12 @@ bool blktmpl_get_submitold(blktemplate_t *tmpl) {
|
|||||||
return tmpl->submitold;
|
return tmpl->submitold;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
void _blktxn_free(struct blktxn_t *bt) {
|
||||||
void blktxn_free(struct blktxn_t *bt) {
|
|
||||||
free(bt->data);
|
free(bt->data);
|
||||||
free(bt->hash);
|
free(bt->hash);
|
||||||
free(bt->depends);
|
free(bt->depends);
|
||||||
}
|
}
|
||||||
|
#define blktxn_free _blktxn_free
|
||||||
|
|
||||||
void blktmpl_free(blktemplate_t *tmpl) {
|
void blktmpl_free(blktemplate_t *tmpl) {
|
||||||
for (unsigned long i = 0; i < tmpl->txncount; ++i)
|
for (unsigned long i = 0; i < tmpl->txncount; ++i)
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
// blkmaker.c
|
// blkmaker.c
|
||||||
extern bool _blkmk_dblsha256(void *hash, const void *data, size_t datasz);
|
extern bool _blkmk_dblsha256(void *hash, const void *data, size_t datasz);
|
||||||
|
|
||||||
|
// blktemplate.c
|
||||||
|
extern void _blktxn_free(struct blktxn_t *);
|
||||||
|
|
||||||
// hex.c
|
// hex.c
|
||||||
extern void _blkmk_bin2hex(char *out, const void *data, size_t datasz);
|
extern void _blkmk_bin2hex(char *out, const void *data, size_t datasz);
|
||||||
extern bool _blkmk_hex2bin(void *o, const char *x, size_t len);
|
extern bool _blkmk_hex2bin(void *o, const char *x, size_t len);
|
||||||
|
|||||||
Reference in New Issue
Block a user