From 2bc8a5dda440eb18adf7170dd21b4044d437deca Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Wed, 9 Sep 2026 18:33:59 +0000 Subject: [PATCH] minor fixes and cleanups --- mmgen/proto/eth/tx/unsigned.py | 6 +++++- mmgen/tx/completed.py | 4 +--- mmgen/tx/unsigned.py | 2 +- test/include/common.py | 18 ++++++++++++------ test/modtest_d/tx.py | 31 +++++++++++++++++-------------- 5 files changed, 36 insertions(+), 25 deletions(-) diff --git a/mmgen/proto/eth/tx/unsigned.py b/mmgen/proto/eth/tx/unsigned.py index fb114f05..e2d1969c 100755 --- a/mmgen/proto/eth/tx/unsigned.py +++ b/mmgen/proto/eth/tx/unsigned.py @@ -27,7 +27,11 @@ from .completed import Completed, TokenCompleted class Unsigned(VmUnsigned, Completed, TxBase.Unsigned): def parse_txfile_serialized_data(self): - d = self.serialized if isinstance(self.serialized, dict) else json.loads(self.serialized) + if isinstance(self.serialized, dict): + d = self.serialized + else: + d = json.loads(self.serialized) + o = { 'from': CoinAddr(self.proto, d['from']), # NB: for token, 'to' is sendto address diff --git a/mmgen/tx/completed.py b/mmgen/tx/completed.py index 5fe6f494..0b15a4db 100755 --- a/mmgen/tx/completed.py +++ b/mmgen/tx/completed.py @@ -12,6 +12,7 @@ tx.completed: completed transaction class """ +from ..util import msg, ymsg, die from .base import Base class Completed(Base): @@ -36,7 +37,6 @@ class Completed(Base): self.check_serialized_integrity() except Exception: from ..color import orange - from ..util import msg msg(orange( f'Something is wrong with transaction file ‘{filename}’\n' 'To fix this problem, please move or delete the file')) @@ -46,7 +46,6 @@ class Completed(Base): self.check_correct_chain() if self.check_sigs() != self.signed: - from ..util import die die(1, 'Transaction is {}signed!'.format('not ' if self.signed else '')) self.infile = filename @@ -95,7 +94,6 @@ class Completed(Base): if mmid := getattr(self, 'swap_recv_addr_mmid', None): pass elif self.cfg.allow_non_wallet_swap: - from ..util import ymsg ymsg('Warning: allowing swap to non-wallet address (--allow-non-wallet-swap)') else: raise ValueError('Swap to non-wallet address forbidden (override with --allow-non-wallet-swap)') diff --git a/mmgen/tx/unsigned.py b/mmgen/tx/unsigned.py index b148e441..2dd6c68d 100755 --- a/mmgen/tx/unsigned.py +++ b/mmgen/tx/unsigned.py @@ -12,8 +12,8 @@ tx.unsigned: unsigned transaction class """ -from .completed import Completed from ..util import remove_dups +from .completed import Completed class Unsigned(Completed): desc = 'unsigned transaction' diff --git a/test/include/common.py b/test/include/common.py index 347f5795..1915235a 100755 --- a/test/include/common.py +++ b/test/include/common.py @@ -195,21 +195,27 @@ def clean(cfgs, tmpdir_ids=None, extra_dirs=[]): def get_tmpfile(cfg, fn): return os.path.join(cfg['tmpdir'], fn) -def write_to_file(fn, data, binary=False): +def write_to_file(fn, data, **kwargs): write_data_to_file( cfg, fn, data, quiet = True, no_stdout = True, - binary = binary, - ignore_opt_outdir = True) + ignore_opt_outdir = True, + **kwargs) + +def write_to_cfgfile(lines, **kwargs): + return write_to_file( + os.path.join(cfg.test_datadir, 'mmgen.cfg'), + '\n'.join(lines) + ('\n' if lines else ''), + ask_overwrite = False) def write_to_tmpfile(cfg, fn, data, binary=False): - write_to_file(os.path.join(cfg['tmpdir'], fn), data=data, binary=binary) + write_to_file(os.path.join(cfg['tmpdir'], fn), data, binary=binary) -def read_from_file(fn, binary=False): - return get_data_from_file(cfg, fn, quiet=True, binary=binary) +def read_from_file(fn, **kwargs): + return get_data_from_file(cfg, fn, quiet=True, **kwargs) def read_from_tmpfile(cfg, fn, binary=False): return read_from_file(os.path.join(cfg['tmpdir'], fn), binary=binary) diff --git a/test/modtest_d/tx.py b/test/modtest_d/tx.py index 70387a68..6766a0ed 100755 --- a/test/modtest_d/tx.py +++ b/test/modtest_d/tx.py @@ -17,8 +17,8 @@ async def do_txfile_test(desc, fns, cfg=cfg, do_format=True): qmsg(f'\n Testing CompletedTX initializer ({desc})') for fn in fns: qmsg(f' parsing: {os.path.basename(fn)}') - fpath = os.path.join('test', 'ref', fn) - tx = await CompletedTX(cfg=cfg, filename=fpath, quiet_open=True) + ref_tx_path = os.path.join('test', 'ref', fn) + tx = await CompletedTX(cfg=cfg, filename=ref_tx_path, quiet_open=True) vmsg('\n' + tx.info.format()) @@ -34,16 +34,20 @@ async def do_txfile_test(desc, fns, cfg=cfg, do_format=True): import json from mmgen.tx.file import txfile_json_dumps from mmgen.util import make_chksum_6 - text = f.format() - with open(fpath) as fh: - text_chk = fh.read() - data_chk = json.loads(text_chk) - outputs = data_chk['MMGenTransaction']['outputs'] - for n, o in enumerate(outputs): - outputs[n] = {k:v for k,v in o.items() if not (type(v) is bool and v is False)} - data_chk['chksum'] = make_chksum_6(txfile_json_dumps(data_chk['MMGenTransaction'])) - text_chk_fixed = txfile_json_dumps(data_chk) - assert text == text_chk_fixed, f'\nformatted text:\n{text}\n !=\noriginal file:\n{text_chk_fixed}' + + # process reference file, fixing up deprecated outputs: + with open(ref_tx_path) as fh: + ref_data = json.loads(fh.read()) + ref_outputs = ref_data['MMGenTransaction']['outputs'] + for n, o in enumerate(ref_outputs): + ref_outputs[n] = {k:v for k,v in o.items() if not (type(v) is bool and v is False)} + ref_data['chksum'] = make_chksum_6(txfile_json_dumps(ref_data['MMGenTransaction'])) + ref_text = txfile_json_dumps(ref_data) + + # process newly-formatted data: + new_text = f.format() + + assert new_text == ref_text, f'\nformatted text:\n{new_text}\n !=\noriginal file:\n{ref_text}' qmsg(' OK') return True @@ -58,8 +62,7 @@ class unit_tests: 'tx/7A8157[6.65227,34].rawtx', 'tx/B498CE[5.55788,38].rawtx', 'tx/BB3FD2[7.57134314,123].sigtx', - 'tx/0A869F[1.23456,32].regtest.asubtx', - )) + 'tx/0A869F[1.23456,32].regtest.asubtx')) async def txfile_alt(self, name, ut, desc='displaying and formatting transaction files (LTC, BCH, ETH)'): return await do_txfile_test(