From ae59f3164370ecdfd2d95ae86d8a7d67111c5d03 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Sat, 1 Oct 2022 13:39:14 +1000 Subject: [PATCH] signet/miner: add --prefer-gbt-cli option --- contrib/signet/miner | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/contrib/signet/miner b/contrib/signet/miner index 5754408d627804..00d610cfbdd35f 100755 --- a/contrib/signet/miner +++ b/contrib/signet/miner @@ -375,6 +375,11 @@ def do_generate(args): ultimate_target = nbits_to_target(int(args.nbits,16)) + if args.prefer_gbt_cli is not None: + gbtcli = lambda *a, input=b"", **kwargs: bitcoin_cli(args.prefer_gbt_cli.split(" "), list(a), input=input, **kwargs) + else: + gbtcli = None + gen = Generate(multiminer=my_blocks, ultimate_target=ultimate_target, poisson=args.poisson, max_interval=args.max_interval, standby_delay=args.standby_delay, backup_delay=args.backup_delay, set_block_time=args.set_block_time) @@ -421,6 +426,23 @@ def do_generate(args): # mine and submit mined_blocks += 1 done = False + + if gbtcli is not None: + # gbt via prefered bcli + tmpl = gen.gbt(gbtcli, bci["bestblockhash"], now) + if tmpl is not None: + logging.debug("Prefered GBT template: %s", tmpl) + + # mine block + logging.debug("Mining block delta=%s start=%s mine=%s", seconds_to_hms(gen.mine_time-bestheader["time"]), gen.mine_time, gen.is_mine) + block = gen.mine(args.bcli, args.grind_cmd, tmpl, reward_spk) + if block is not None: + r = args.bcli("-stdin", "submitblock", input=block.serialize().hex().encode('utf8')) + if r is None or r == "": + done = True + else: + logging.warning("submitblock based on prefered template returned %r" % (r,)) + if not done: # gbt tmpl = gen.gbt(args.bcli, bci["bestblockhash"], now) @@ -519,6 +541,7 @@ def main(): generate.add_argument("--backup-delay", default=300, type=int, help="Seconds to delay before mining blocks reserved for other miners (default=300)") generate.add_argument("--standby-delay", default=0, type=int, help="Seconds to delay before mining blocks (default=0)") generate.add_argument("--max-interval", default=1800, type=int, help="Maximum interblock interval (seconds)") + generate.add_argument("--prefer-gbt-cli", default=None, type=str, help="Alternative bitcoin-cli invocation for getblocktemplate (optional)") calibrate = cmds.add_parser("calibrate", help="Calibrate difficulty") calibrate.set_defaults(fn=do_calibrate)