diff --git a/mmgen/addr.py b/mmgen/addr.py index 26998800..140bd3a5 100755 --- a/mmgen/addr.py +++ b/mmgen/addr.py @@ -145,7 +145,7 @@ class MMGenID(HiliteStr, InitErrors, MMGenObject): assert id_str.count(':') == 2, 'mmtype letter required for extended MMGen IDs' me = str.__new__(cls, id_str) idx, ext = idx.split('-', 1) - me.acct_num, me.acct_addr_num = [MoneroIdx(e) for e in ext.split('/', 1)] + me.acct_idx, me.addr_idx = [MoneroIdx(e) for e in ext.split('/', 1)] else: me = str.__new__(cls, f'{sid}:{mmtype}:{idx}') me.sid = SeedID(sid=sid) diff --git a/mmgen/main_xmrwallet.py b/mmgen/main_xmrwallet.py index 1315393f..bf238e83 100755 --- a/mmgen/main_xmrwallet.py +++ b/mmgen/main_xmrwallet.py @@ -62,7 +62,7 @@ opts_data = { -b, --rescan-blockchain Rescan the blockchain if wallet fails to sync -d, --outdir=D Save transaction files to directory 'D' instead of the working directory --D, --daemon=H:P Connect to the monerod at {D} +-D, --daemon=H:P Connect to the monerod at {dhp} -e, --skip-empty-accounts Skip display of empty accounts in wallets where applicable -E, --skip-empty-addresses Skip display of used empty addresses in @@ -73,7 +73,7 @@ opts_data = { -P, --rescan-spent Perform a rescan of spent outputs. Used only with the ‘export-outputs-sign’ operation -R, --tx-relay-daemon=H:P[:H:P] Relay transactions via a monerod specified by - {R} + {rdhp} -r, --restore-height=H Scan from height 'H' when creating wallets. Use special value ‘current’ to create empty wallet at current blockchain height. @@ -93,8 +93,8 @@ opts_data = { }, 'code': { 'options': lambda cfg, help_notes, s: s.format( - D = xmrwallet.uarg_info['daemon'].annot, - R = xmrwallet.uarg_info['tx_relay_daemon'].annot, + dhp = xmrwallet.uarg_info['daemon'].annot, + rdhp = xmrwallet.uarg_info['tx_relay_daemon'].annot, cfg = cfg, gc = gc, tw_dir = help_notes('tw_dir'), diff --git a/mmgen/tw/view.py b/mmgen/tw/view.py index 35f3d8f2..e9699421 100755 --- a/mmgen/tw/view.py +++ b/mmgen/tw/view.py @@ -718,12 +718,13 @@ class TwView(MMGenObject, metaclass=AsyncInit): # None: action aborted by user or no action performed # False: an error occurred # 'redo': user will be re-prompted for item number + # 'redraw': action successfully performed, screen will be redrawn ret = await action_method(parent, idx) if ret != 'redo': break await asyncio.sleep(0.5) - if parent.scroll and ret is False: + if parent.scroll and ret is False or ret == 'redraw': # error messages could leave screen in messy state, so do complete redraw: msg_r( CUR_HOME + ERASE_ALL + @@ -744,7 +745,7 @@ class TwView(MMGenObject, metaclass=AsyncInit): parent.oneshot_msg = yellow( f'{parent.proto.dcoin} balance for {parent.item_desc} #{idx} refreshed') if res == 0: - return False # zeroing balance may mess up display + return 'redraw' # zeroing balance may mess up display async def i_addr_delete(self, parent, idx): if not parent.keypress_confirm( diff --git a/mmgen/xmrwallet/ops/dump.py b/mmgen/xmrwallet/ops/dump.py index 79a52940..37e4353e 100755 --- a/mmgen/xmrwallet/ops/dump.py +++ b/mmgen/xmrwallet/ops/dump.py @@ -34,14 +34,13 @@ class OpDump(OpWallet): ).write() return True -class OpDumpDataBase(OpWallet): +class OpDumpDataCommon(OpWallet): wallet_offline = True - stem = 'dump' return_data = True async def process_wallet(self, d, fn, last): h = MoneroWalletRPC(self, d) - h.open_wallet('source') + h.open_wallet('source', refresh=False) return { 'seed_id': self.kal.al_id.sid, 'wallet_num': d.idx, @@ -50,10 +49,12 @@ class OpDumpDataBase(OpWallet): def post_main_success(self): pass -class OpDumpData(OpDumpDataBase): +class OpDumpData(OpDumpDataCommon): start_daemon = False + stem = 'load' -class OpDumpJson(OpDumpDataBase): +class OpDumpJson(OpDumpDataCommon): + stem = 'dump' async def main(self): import json diff --git a/test/cmdtest_d/include/runner.py b/test/cmdtest_d/include/runner.py index 1b3bc227..68f1ec79 100755 --- a/test/cmdtest_d/include/runner.py +++ b/test/cmdtest_d/include/runner.py @@ -168,7 +168,7 @@ class CmdTestRunner: if self.logging: self.log_fd.write('[{}][{}:{}] {}\n'.format( - (self.proto.coin.lower() if 'coin' in self.tg.passthru_opts else 'NONE'), + self.proto.coin.lower(), self.tg.group_name, self.tg.test_name, cmd_disp)) diff --git a/test/cmdtest_d/xmr_autosign.py b/test/cmdtest_d/xmr_autosign.py index 81edc504..19ec9e41 100755 --- a/test/cmdtest_d/xmr_autosign.py +++ b/test/cmdtest_d/xmr_autosign.py @@ -62,7 +62,7 @@ class CmdTestXMRAutosign(CmdTestXMRWallet, CmdTestAutosignThreaded): ('mine_initial_coins', 'mining initial coins'), ('autosign_setup', 'autosign setup with Alice’s seed'), ('autosign_xmr_setup', 'autosign setup (creation of Monero signing wallets)'), - ('create_watchonly_wallets', 'creating watch-only wallets from Alice’s wallet dumps'), + ('restore_watchonly_wallets', 'creating watch-only wallets from Alice’s wallet dumps'), ('delete_tmp_dump_files', 'deleting Alice’s dump files'), ('fund_alice1', 'sending funds to Alice (wallet #1)'), ('check_bal_alice1', 'mining, checking balance (wallet #1)'), @@ -261,7 +261,7 @@ class CmdTestXMRAutosign(CmdTestXMRWallet, CmdTestAutosignThreaded): self.remove_device() return t - def create_watchonly_wallets(self): + def restore_watchonly_wallets(self): return self._create_wallets('restore') def restore_wallets(self): diff --git a/test/cmdtest_d/xmrwallet.py b/test/cmdtest_d/xmrwallet.py index 67af91b7..5da0968c 100755 --- a/test/cmdtest_d/xmrwallet.py +++ b/test/cmdtest_d/xmrwallet.py @@ -59,7 +59,6 @@ class CmdTestXMRWallet(CmdTestBase): """ networks = ('xmr',) - passthru_opts = () tmpdir_nums = [29] dfl_random_txs = 3 color = True @@ -377,13 +376,23 @@ class CmdTestXMRWallet(CmdTestBase): random_txs = self.dfl_random_txs) def set_label_miner(self): - return self.set_label_user('miner', '1:0:0,"Miner’s new primary account label [1:0:0]"', 'updated') + return self.set_label_user( + 'miner', + '1:0:0,"Miner’s new primary account label [1:0:0]"', + 'updated') def remove_label_alice(self): - return self.set_label_user('alice', '4:2:2,""', 'removed', add_opts=['--full-address']) + return self.set_label_user( + 'alice', + '4:2:2,""', + 'removed', + add_opts = ['--full-address']) def set_label_alice(self): - return self.set_label_user('alice', '4:2:2,"Alice’s new subaddress label [4:2:2]"', 'set') + return self.set_label_user( + 'alice', + '4:2:2,"Alice’s new subaddress label [4:2:2]"', + 'set') def set_label_user(self, user, label_spec, expect, add_opts=[]): data = self.users[user]