From fc5ec2bc885e2c83350c98e9e8c8f1e1c3e2949d Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 15 Feb 2025 09:54:19 +0000 Subject: [PATCH] tx.new: make get_autochg_addr() a method --- mmgen/proto/eth/tx/new.py | 2 +- mmgen/tx/new.py | 60 +++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/mmgen/proto/eth/tx/new.py b/mmgen/proto/eth/tx/new.py index 07170505..37956979 100755 --- a/mmgen/proto/eth/tx/new.py +++ b/mmgen/proto/eth/tx/new.py @@ -90,7 +90,7 @@ class New(Base, TxBase.New): if lc != 1: die(1, f'{lc} output{suf(lc)} specified, but Ethereum transactions must have exactly one') - arg = self.parse_cmdline_arg(cmd_args[0], ad_f, ad_w) + arg = self.parse_cmdline_arg(self.proto, cmd_args[0], ad_f, ad_w) self.add_output( coinaddr = arg.addr, diff --git a/mmgen/tx/new.py b/mmgen/tx/new.py index ed0a29fb..ec90f370 100755 --- a/mmgen/tx/new.py +++ b/mmgen/tx/new.py @@ -171,7 +171,7 @@ class New(Base): def process_data_output_arg(self, arg): return None - def parse_cmdline_arg(self, arg_in, ad_f, ad_w): + def parse_cmdline_arg(self, proto, arg_in, ad_f, ad_w): _pa = namedtuple('txcreate_cmdline_output', ['arg', 'mmid', 'addr', 'amt', 'data']) @@ -180,13 +180,13 @@ class New(Base): arg, amt = arg_in.split(',', 1) if ',' in arg_in else (arg_in, None) - if mmid := get_obj(MMGenID, proto=self.proto, id_str=arg, silent=True): - coin_addr = mmaddr2coinaddr(self.cfg, arg, ad_w, ad_f, self.proto) - elif is_coin_addr(self.proto, arg): - coin_addr = CoinAddr(self.proto, arg) - elif is_mmgen_addrtype(self.proto, arg) or is_addrlist_id(self.proto, arg): - if self.proto.base_proto_coin != 'BTC': - die(2, f'Change addresses not supported for {self.proto.name} protocol') + if mmid := get_obj(MMGenID, proto=proto, id_str=arg, silent=True): + coin_addr = mmaddr2coinaddr(self.cfg, arg, ad_w, ad_f, proto) + elif is_coin_addr(proto, arg): + coin_addr = CoinAddr(proto, arg) + elif is_mmgen_addrtype(proto, arg) or is_addrlist_id(proto, arg): + if proto.base_proto_coin != 'BTC': + die(2, f'Change addresses not supported for {proto.name} protocol') self.chg_autoselected = True coin_addr = None else: @@ -194,29 +194,29 @@ class New(Base): return _pa(arg, mmid, coin_addr, amt, None) + async def get_autochg_addr(self, proto, arg, parsed_args): + from ..tw.addresses import TwAddresses + al = await TwAddresses(self.cfg, proto, get_data=True) + exclude = [a.mmid for a in parsed_args if a.mmid] + + if is_mmgen_addrtype(proto, arg): + res = al.get_change_address_by_addrtype(MMGenAddrType(proto, arg), exclude=exclude) + desc = 'of address type' + else: + res = al.get_change_address(arg, exclude=exclude) + desc = 'from address list' + + if res: + return res + + die(2, 'Tracking wallet contains no {t}addresses {d} {a!r}'.format( + t = '' if res is None else 'unused ', + d = desc, + a = arg)) + async def process_cmdline_args(self, cmd_args, ad_f, ad_w): - async def get_autochg_addr(arg, parsed_args): - from ..tw.addresses import TwAddresses - al = await TwAddresses(self.cfg, self.proto, get_data=True) - exclude = [a.mmid for a in parsed_args if a.mmid] - - if is_mmgen_addrtype(self.proto, arg): - res = al.get_change_address_by_addrtype(MMGenAddrType(self.proto, arg), exclude=exclude) - desc = 'of address type' - else: - res = al.get_change_address(arg, exclude=exclude) - desc = 'from address list' - - if res: - return res - - die(2, 'Tracking wallet contains no {t}addresses {d} {a!r}'.format( - t = '' if res is None else 'unused ', - d = desc, - a = arg)) - - parsed_args = [self.parse_cmdline_arg(arg, ad_f, ad_w) for arg in cmd_args] + parsed_args = [self.parse_cmdline_arg(self.proto, arg, ad_f, ad_w) for arg in cmd_args] chg_args = [a for a in parsed_args if not ((a.amt and a.addr) or a.data)] @@ -229,7 +229,7 @@ class New(Base): self.add_output(None, self.proto.coin_amt('0'), data=a.data) else: self.add_output( - coinaddr = a.addr or (await get_autochg_addr(a.arg, parsed_args)).addr, + coinaddr = a.addr or (await self.get_autochg_addr(self.proto, a.arg, parsed_args)).addr, amt = self.proto.coin_amt(a.amt or '0'), is_chg = not a.amt)