From 5d1c392131cde87c77ad4dd4c4cd386c56259d00 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 20 Mar 2021 12:06:14 +0000 Subject: [PATCH] mmnode-blocks-info: minor fixes, cleanups --- mmgen/node_tools/BlocksInfo.py | 34 +++++++++++++++++++----------- mmnode-blocks-info | 12 ++++++----- setup.py | 2 ++ test/unit_tests_d/nt_BlocksInfo.py | 1 + 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/mmgen/node_tools/BlocksInfo.py b/mmgen/node_tools/BlocksInfo.py index 82ed205..5bf2b3b 100644 --- a/mmgen/node_tools/BlocksInfo.py +++ b/mmgen/node_tools/BlocksInfo.py @@ -146,24 +146,25 @@ class BlocksInfo: break yield ls + self.fields[name].fs + rs - def parse_cmd_args(): + def parse_cmd_args(): # => (block_list, first, last, step) if not cmd_args: - return (None,self.tip,self.tip) + return (None,self.tip,self.tip,None) elif len(cmd_args) == 1: r = self.parse_rangespec(cmd_args[0]) return ( list(range(r.first,r.last+1,r.step)) if r.step else None, r.first, - r.last + r.last, + r.step ) else: - return ([self.conv_blkspec(a) for a in cmd_args],None,None) + return ([self.conv_blkspec(a) for a in cmd_args],None,None,None) self.rpc = rpc self.opt = opt self.tip = rpc.blockcount - self.block_list,self.first,self.last = parse_cmd_args() + self.block_list,self.first,self.last,self.step = parse_cmd_args() fnames = get_fields() if opt.fields else self.dfl_fields @@ -288,7 +289,7 @@ class BlocksInfo: return self.range_data(first,last,from_tip,nblocks,step) - async def run(self): + async def process_blocks(self): c = self.rpc heights = self.block_list or range(self.first,self.last+1) @@ -311,10 +312,11 @@ class BlocksInfo: if self.block_list: await init(n) ret = await self.process_block(heights[n],hashes[n],self.hdrs[n]) - if opt.stats_only: - continue - else: - Msg(self.fs.format(*ret)) + if not self.opt.stats_only: + self.output_block(ret,n) + + def output_block(self,data,n): + Msg(self.fs.format(*data)) async def process_block(self,height,H,hdr): class local_vars: pass @@ -375,7 +377,7 @@ class BlocksInfo: Msg(self.fs.format(*hdr1)) Msg(self.fs.format(*hdr2)) - def print_stats(self,name): + def process_stats(self,name): return getattr(self,f'print_{name}_stats')() async def print_range_stats(self): @@ -419,19 +421,27 @@ class BlocksInfo: if rel > bdi_avg_blks: rel_hdr = await c.call('getblockheader',await c.call('getblockhash',self.tip-rel)) bdi = ( tip_hdr['time'] - rel_hdr['time'] ) / rel + bdi_disp = bdi else: bdi_adj = float(tip_hdr['difficulty'] / bdi_avg_hdr['difficulty']) bdi = bdi_avg * ( (bdi_adj * (bdi_avg_blks-rel)) + rel ) / bdi_avg_blks + bdi_disp = bdi_avg rem = 2016 - rel Msg_r(fmt(f""" Current height: {self.tip} Next diff adjust: {self.tip+rem} (in {rem} block{suf(rem)} [{self.t_fmt((rem)*bdi_avg)}]) - BDI (cur period): {bdi/60:.2f} min + BDI (cur period): {bdi_disp/60:.2f} min Cur difficulty: {tip_hdr['difficulty']:.2e} Est. diff adjust: {((600 / bdi) - 1) * 100:+.2f}% """)) + def process_stats_pre(self,i): + if not (self.opt.stats_only and i == 0): + Msg('') + + def finalize_output(self): pass + # 'getblockstats' RPC raises exception on Genesis Block, so provide our own stats: genesis_stats = { 'avgfee': 0, diff --git a/mmnode-blocks-info b/mmnode-blocks-info index 93274d5..4b5e9c5 100755 --- a/mmnode-blocks-info +++ b/mmnode-blocks-info @@ -118,23 +118,25 @@ cmd_args = opts.init(opts_data) async def main(): from mmgen.protocol import init_proto_from_opts + from mmgen.rpc import rpc_init + proto = init_proto_from_opts() - from mmgen.rpc import rpc_init m = BlocksInfo( cmd_args, opt, await rpc_init(proto) ) if not opt.no_header: m.print_header() - await m.run() + await m.process_blocks() if m.last and m.stats: for i,stat in enumerate(m.stats): if stat == 'diff': # Display diff stats by default only if user-requested range ends with chain tip if not opt.stats and m.last != m.tip: continue - if not (opt.stats_only and i == 0): - Msg('') - await m.print_stats(stat) + m.process_stats_pre(i) + await m.process_stats(stat) + + m.finalize_output() run_session(main()) diff --git a/setup.py b/setup.py index 6f6f9a4..c5f9c17 100755 --- a/setup.py +++ b/setup.py @@ -28,6 +28,8 @@ class my_install_data(install_data): os.chmod(os.path.join(sdir,f),0o644) install_data.run(self) +os.umask(0o0022) + setup( name = 'mmgen-node-tools', description = 'Optional tools for the MMGen wallet system', diff --git a/test/unit_tests_d/nt_BlocksInfo.py b/test/unit_tests_d/nt_BlocksInfo.py index 63b6137..156620f 100755 --- a/test/unit_tests_d/nt_BlocksInfo.py +++ b/test/unit_tests_d/nt_BlocksInfo.py @@ -50,6 +50,7 @@ class dummyRPC: class dummyOpt: fields = None + stats = None miner_info = None class unit_tests: