From d2b47614c0d03e0f4714002915395df4358794df Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 6 Apr 2024 07:11:12 +0000 Subject: [PATCH] MoneroWalletOps.sweep: refactor tx creation code --- mmgen/xmrwallet.py | 61 +++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/mmgen/xmrwallet.py b/mmgen/xmrwallet.py index 9b23a4d9..8d37c86a 100755 --- a/mmgen/xmrwallet.py +++ b/mmgen/xmrwallet.py @@ -1560,27 +1560,8 @@ class MoneroWalletOps: cfg = self.cfg, daemon = wd2 ) - async def main(self): - - gmsg(f'\n{self.stem.capitalize()}ing account #{self.account} of wallet {self.source.idx}' + ( - f': {self.amount} XMR to {self.dest_addr}' if self.name == 'transfer' - else ' to new address' if self.dest is None - else f' to new account in wallet {self.dest.idx}' )) - - h = self.rpc(self,self.source) - - h.open_wallet('source') - accts_data = h.get_accts()[0] - - max_acct = len(accts_data['subaddress_accounts']) - 1 - if self.account > max_acct: - die(2, f'{self.account}: requested account index out of bounds (>{max_acct})') - - h.print_addrs(accts_data,self.account) - - if self.name == 'transfer': - dest_addr = self.dest_addr - elif self.dest is None: + def create_tx(self, h, accts_data): + if self.dest is None: dest_acct = self.account if keypress_confirm(self.cfg, f'\nCreate new address for account #{self.account}?'): dest_addr_chk = h.create_new_addr(self.account) @@ -1614,11 +1595,33 @@ class MoneroWalletOps: h.open_wallet('source', refresh=False) msg(f'\n Creating {self.name} transaction...') + return (h, h.make_sweep_tx(self.account, dest_acct, dest_addr_idx, dest_addr)) - if self.name == 'transfer': - new_tx = h.make_transfer_tx(self.account,dest_addr,self.amount) - elif self.name == 'sweep': - new_tx = h.make_sweep_tx(self.account,dest_acct,dest_addr_idx,dest_addr) + @property + def add_desc(self): + if self.dest is None: + return ' to new address' + else: + return f' to new account in wallet {self.dest.idx}' + + async def main(self): + + gmsg( + f'\n{self.stem.capitalize()}ing account #{self.account} of wallet {self.source.idx}' + + self.add_desc) + + h = self.rpc(self,self.source) + + h.open_wallet('source') + accts_data = h.get_accts()[0] + + max_acct = len(accts_data['subaddress_accounts']) - 1 + if self.account > max_acct: + die(2, f'{self.account}: requested account index out of bounds (>{max_acct})') + + h.print_addrs(accts_data,self.account) + + h, new_tx = self.create_tx(h, accts_data) msg('\n' + new_tx.get_info(indent=' ')) @@ -1650,6 +1653,14 @@ class MoneroWalletOps: spec_id = 'transfer_spec' spec_key = ( (1,'source'), ) + @property + def add_desc(self): + return f': {self.amount} XMR to {self.dest_addr}' + + def create_tx(self, h, accts_data): + msg(f'\n Creating {self.name} transaction...') + return (h, h.make_transfer_tx(self.account, self.dest_addr, self.amount)) + class new(spec): spec_id = 'newaddr_spec' spec_key = ( (1,'source'), )