From 3d62ff8211215127a57e7cfd1842dca225115b6c Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Fri, 11 Feb 2022 09:48:08 +0000 Subject: [PATCH] use mmgen launcher; init fixes; blocks-info: improve miner string parsing --- README.md | 2 ++ cmds/mmnode-blocks-info | 17 +++++++++++++++++ cmds/mmnode-feeview | 17 +++++++++++++++++ cmds/mmnode-halving-calculator | 17 +++++++++++++++++ cmds/mmnode-netrate | 17 +++++++++++++++++ cmds/mmnode-peerblocks | 17 +++++++++++++++++ cmds/mmnode-txfind | 17 +++++++++++++++++ mmgen_node_tools/BlocksInfo.py | 13 +++++++++++-- mmgen_node_tools/Sound.py | 0 mmgen_node_tools/Term.py | 0 mmgen_node_tools/Util.py | 0 mmgen_node_tools/__init__.py | 0 mmgen_node_tools/data/version | 2 +- .../main_blocks_info.py | 2 +- .../main_feeview.py | 8 ++++++-- .../main_halving_calculator.py | 2 +- .../main_netrate.py | 0 .../main_peerblocks.py | 0 .../main_txfind.py | 0 setup.cfg | 12 ++++++------ 20 files changed, 130 insertions(+), 13 deletions(-) create mode 100755 cmds/mmnode-blocks-info create mode 100755 cmds/mmnode-feeview create mode 100755 cmds/mmnode-halving-calculator create mode 100755 cmds/mmnode-netrate create mode 100755 cmds/mmnode-peerblocks create mode 100755 cmds/mmnode-txfind mode change 100644 => 100755 mmgen_node_tools/BlocksInfo.py mode change 100644 => 100755 mmgen_node_tools/Sound.py mode change 100644 => 100755 mmgen_node_tools/Term.py mode change 100644 => 100755 mmgen_node_tools/Util.py mode change 100644 => 100755 mmgen_node_tools/__init__.py rename mmnode-blocks-info => mmgen_node_tools/main_blocks_info.py (98%) rename mmnode-feeview => mmgen_node_tools/main_feeview.py (98%) rename mmnode-halving-calculator => mmgen_node_tools/main_halving_calculator.py (99%) rename mmnode-netrate => mmgen_node_tools/main_netrate.py (100%) rename mmnode-peerblocks => mmgen_node_tools/main_peerblocks.py (100%) rename mmnode-txfind => mmgen_node_tools/main_txfind.py (100%) diff --git a/README.md b/README.md index 904c4d4..e8ac441 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ Then, $ python3 -m build --no-isolation $ python3 -m pip install --user dist/*.whl +Also make sure that `~/.local/bin` is in `PATH`. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [**Forum**][4] | diff --git a/cmds/mmnode-blocks-info b/cmds/mmnode-blocks-info new file mode 100755 index 0000000..a1c855e --- /dev/null +++ b/cmds/mmnode-blocks-info @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# Licensed under the GNU General Public License, Version 3: +# https://www.gnu.org/licenses +# Public project repositories: +# https://github.com/mmgen/mmgen https://github.com/mmgen/mmgen-node-tools +# https://gitlab.com/mmgen/mmgen https://gitlab.com/mmgen/mmgen-node-tools + +""" +mmnode-blocks-info: Display information about a block or range of blocks +""" + +from mmgen.main import launch + +launch('blocks_info',package='mmgen_node_tools') diff --git a/cmds/mmnode-feeview b/cmds/mmnode-feeview new file mode 100755 index 0000000..5a4625e --- /dev/null +++ b/cmds/mmnode-feeview @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# Licensed under the GNU General Public License, Version 3: +# https://www.gnu.org/licenses +# Public project repositories: +# https://github.com/mmgen/mmgen https://github.com/mmgen/mmgen-node-tools +# https://gitlab.com/mmgen/mmgen https://gitlab.com/mmgen/mmgen-node-tools + +""" +mmnode-feeview: Visualize the fee structure of a node’s mempool +""" + +from mmgen.main import launch + +launch('feeview',package='mmgen_node_tools') diff --git a/cmds/mmnode-halving-calculator b/cmds/mmnode-halving-calculator new file mode 100755 index 0000000..ebf1f6d --- /dev/null +++ b/cmds/mmnode-halving-calculator @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# Licensed under the GNU General Public License, Version 3: +# https://www.gnu.org/licenses +# Public project repositories: +# https://github.com/mmgen/mmgen https://github.com/mmgen/mmgen-node-tools +# https://gitlab.com/mmgen/mmgen https://gitlab.com/mmgen/mmgen-node-tools + +""" +mmnode-halving-calculator: Estimate date(s) of future block subsidy halving(s) +""" + +from mmgen.main import launch + +launch('halving_calculator',package='mmgen_node_tools') diff --git a/cmds/mmnode-netrate b/cmds/mmnode-netrate new file mode 100755 index 0000000..cfefab2 --- /dev/null +++ b/cmds/mmnode-netrate @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# Licensed under the GNU General Public License, Version 3: +# https://www.gnu.org/licenses +# Public project repositories: +# https://github.com/mmgen/mmgen https://github.com/mmgen/mmgen-node-tools +# https://gitlab.com/mmgen/mmgen https://gitlab.com/mmgen/mmgen-node-tools + +""" +mmnode-netrate: Bitcoin daemon network rate monitor +""" + +from mmgen.main import launch + +launch('netrate',package='mmgen_node_tools') diff --git a/cmds/mmnode-peerblocks b/cmds/mmnode-peerblocks new file mode 100755 index 0000000..be4bb41 --- /dev/null +++ b/cmds/mmnode-peerblocks @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# Licensed under the GNU General Public License, Version 3: +# https://www.gnu.org/licenses +# Public project repositories: +# https://github.com/mmgen/mmgen https://github.com/mmgen/mmgen-node-tools +# https://gitlab.com/mmgen/mmgen https://gitlab.com/mmgen/mmgen-node-tools + +""" +mmnode-peerblocks: List blocks in flight, disconnect stalling nodes +""" + +from mmgen.main import launch + +launch('peerblocks',package='mmgen_node_tools') diff --git a/cmds/mmnode-txfind b/cmds/mmnode-txfind new file mode 100755 index 0000000..05213a8 --- /dev/null +++ b/cmds/mmnode-txfind @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# +# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet +# Copyright (C)2013-2022 The MMGen Project +# Licensed under the GNU General Public License, Version 3: +# https://www.gnu.org/licenses +# Public project repositories: +# https://github.com/mmgen/mmgen https://github.com/mmgen/mmgen-node-tools +# https://gitlab.com/mmgen/mmgen https://gitlab.com/mmgen/mmgen-node-tools + +""" +mmnode-txfind: Find a transaction in the blockchain or mempool +""" + +from mmgen.main import launch + +launch('txfind',package='mmgen_node_tools') diff --git a/mmgen_node_tools/BlocksInfo.py b/mmgen_node_tools/BlocksInfo.py old mode 100644 new mode 100755 index 3dde787..28395b4 --- a/mmgen_node_tools/BlocksInfo.py +++ b/mmgen_node_tools/BlocksInfo.py @@ -226,15 +226,18 @@ class BlocksInfo: ) if 'miner' in self.fnames: + # capturing parens must contain only ASCII chars! self.miner_pats = [re.compile(pat) for pat in ( rb'`/([_a-zA-Z0-9&. #/-]+)/', - rb'[\xe3\xe4\xe5][\^/](.*?)\xfa', + rb'[\xe3\xe4\xe5][\^/]([\x20-\x7e]+?)\xfa', rb'([a-zA-Z0-9&. -]+/Mined by [a-zA-Z0-9. ]+)', rb'\x08/(.*Mined by [a-zA-Z0-9. ]+)', rb'Mined by ([a-zA-Z0-9. ]+)', rb'[`]([_a-zA-Z0-9&. #/-]+)[/\xfa]', + rb'([\x20-\x7e]{9,})', rb'[/^]([a-zA-Z0-9&. #/-]{5,})', rb'[/^]([_a-zA-Z0-9&. #/-]+)/', + rb'^\x03...\W{0,5}([\\_a-zA-Z0-9&. #/-]+)[/\\]', )] self.block_data = namedtuple('block_data',self.fnames) @@ -428,10 +431,16 @@ class BlocksInfo: if self.opt.raw_miner_info: return repr(cb) else: + trmap_in = { + '\\': ' ', + '/': ' ', + ',': ' ', + } + trmap = { ord(a):b for a,b in trmap_in.items() } for pat in self.miner_pats: m = pat.search(cb) if m: - return ''.join(chr(b) for b in m[1] if 31 < b < 127).strip('^').strip('/').replace('/',' ') + return re.sub( r'\s+', ' ', m[1].decode().strip('^').translate(trmap).strip() ) return '' def print_header(self): diff --git a/mmgen_node_tools/Sound.py b/mmgen_node_tools/Sound.py old mode 100644 new mode 100755 diff --git a/mmgen_node_tools/Term.py b/mmgen_node_tools/Term.py old mode 100644 new mode 100755 diff --git a/mmgen_node_tools/Util.py b/mmgen_node_tools/Util.py old mode 100644 new mode 100755 diff --git a/mmgen_node_tools/__init__.py b/mmgen_node_tools/__init__.py old mode 100644 new mode 100755 diff --git a/mmgen_node_tools/data/version b/mmgen_node_tools/data/version index 4a36342..88a447a 100644 --- a/mmgen_node_tools/data/version +++ b/mmgen_node_tools/data/version @@ -1 +1 @@ -3.0.0 +3.1.dev1 diff --git a/mmnode-blocks-info b/mmgen_node_tools/main_blocks_info.py similarity index 98% rename from mmnode-blocks-info rename to mmgen_node_tools/main_blocks_info.py index fc43706..a7dff8d 100755 --- a/mmnode-blocks-info +++ b/mmgen_node_tools/main_blocks_info.py @@ -21,7 +21,7 @@ mmnode-blocks-info: Display information about a block or range of blocks """ from mmgen.common import * -from mmgen_node_tools.BlocksInfo import BlocksInfo,JSONBlocksInfo +from .BlocksInfo import BlocksInfo,JSONBlocksInfo opts_data = { 'sets': [ diff --git a/mmnode-feeview b/mmgen_node_tools/main_feeview.py similarity index 98% rename from mmnode-feeview rename to mmgen_node_tools/main_feeview.py index c91fc34..8979e44 100755 --- a/mmnode-feeview +++ b/mmgen_node_tools/main_feeview.py @@ -125,9 +125,12 @@ def create_data(coin_amt,mempool): break # remove empty top brackets: - while out[-1].tx_bytes == 0: + while out and out[-1].tx_bytes == 0: out.pop() + if not out: + die(1,'No data!') + out.reverse() # cumulative totals and display are top-down # calculate cumulative byte totals, filter rows: @@ -197,7 +200,7 @@ def gen_body(data): async def main(): from mmgen.protocol import init_proto_from_opts - proto = init_proto_from_opts() + proto = init_proto_from_opts(need_amt=True) from mmgen.rpc import rpc_init c = await rpc_init(proto) @@ -210,6 +213,7 @@ async def main(): log(mempool,'mempool.json') data = create_data(proto.coin_amt,mempool) + (do_pager if opt.pager else print)( '\n'.join(gen_header(c.host,await c.call('getblockcount'))) + '\n' + '\n'.join(gen_body(data)) diff --git a/mmnode-halving-calculator b/mmgen_node_tools/main_halving_calculator.py similarity index 99% rename from mmnode-halving-calculator rename to mmgen_node_tools/main_halving_calculator.py index 7ddf0a1..423df0e 100755 --- a/mmnode-halving-calculator +++ b/mmgen_node_tools/main_halving_calculator.py @@ -62,7 +62,7 @@ def time_diff_warning(t_diff): async def main(): from mmgen.protocol import init_proto_from_opts - proto = init_proto_from_opts() + proto = init_proto_from_opts(need_amt=True) from mmgen.rpc import rpc_init c = await rpc_init(proto) diff --git a/mmnode-netrate b/mmgen_node_tools/main_netrate.py similarity index 100% rename from mmnode-netrate rename to mmgen_node_tools/main_netrate.py diff --git a/mmnode-peerblocks b/mmgen_node_tools/main_peerblocks.py similarity index 100% rename from mmnode-peerblocks rename to mmgen_node_tools/main_peerblocks.py diff --git a/mmnode-txfind b/mmgen_node_tools/main_txfind.py similarity index 100% rename from mmnode-txfind rename to mmgen_node_tools/main_txfind.py diff --git a/setup.cfg b/setup.cfg index eeafdef..49c64c6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,14 +23,14 @@ python_requires = >=3.7 include_package_data = True install_requires = - mmgen>=13.0.0 + mmgen>=13.1.dev19 packages = mmgen_node_tools scripts = - mmnode-blocks-info - mmnode-feeview - mmnode-halving-calculator - mmnode-netrate - mmnode-peerblocks + cmds/mmnode-blocks-info + cmds/mmnode-feeview + cmds/mmnode-halving-calculator + cmds/mmnode-netrate + cmds/mmnode-peerblocks