From 686fdfcc72af41d3216e39b8b39d30bb45312e28 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Tue, 18 Apr 2023 18:35:59 +0000 Subject: [PATCH] mmgen-autosign: use default wallet as autosign wallet by default --- mmgen/autosign.py | 14 ++++++++-- mmgen/data/version | 2 +- test/test_py_d/ts_autosign.py | 52 +++++++++++++++++++++++++---------- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/mmgen/autosign.py b/mmgen/autosign.py index c900f953..1b38a298 100755 --- a/mmgen/autosign.py +++ b/mmgen/autosign.py @@ -19,7 +19,9 @@ from collections import namedtuple from .cfg import Config from .util import msg,msg_r,ymsg,rmsg,gmsg,bmsg,die,suf,fmt,fmt_list from .color import yellow,red,orange -from .wallet import Wallet +from .wallet import Wallet,get_wallet_cls +from .filename import find_file_in_dir +from .ui import keypress_confirm class AutosignConfig(Config): _set_ok = ('usr_randchars','_proto','outdir','passwd_file') @@ -368,7 +370,15 @@ class Autosign: def setup(self): self.remove_wallet_dir() self.gen_key(no_unmount=True) - ss_in = Wallet( self.cfg, in_fmt=self.mn_fmts[self.cfg.mnemonic_fmt or self.dfl_mn_fmt] ) + wf = find_file_in_dir( get_wallet_cls('mmgen'), self.cfg.data_dir ) + if wf and keypress_confirm( + cfg = self.cfg, + prompt = f'Default wallet {wf!r} found.\nUse default wallet for autosigning?', + default_yes = True ): + from .cfg import Config + ss_in = Wallet( Config(), wf ) + else: + ss_in = Wallet( self.cfg, in_fmt=self.mn_fmts[self.cfg.mnemonic_fmt or self.dfl_mn_fmt] ) ss_out = Wallet( self.cfg, ss=ss_in ) ss_out.write_to_file( desc='autosign wallet', outdir=self.wallet_dir ) diff --git a/mmgen/data/version b/mmgen/data/version index 0b4ffb5c..a8b2572b 100644 --- a/mmgen/data/version +++ b/mmgen/data/version @@ -1 +1 @@ -13.3.dev45 +13.3.dev46 diff --git a/test/test_py_d/ts_autosign.py b/test/test_py_d/ts_autosign.py index 453fc42d..ea90104c 100755 --- a/test/test_py_d/ts_autosign.py +++ b/test/test_py_d/ts_autosign.py @@ -163,13 +163,24 @@ class TestSuiteAutosignBase(TestSuiteBase): t.expect_getend('Wrote key file ') return t - def make_wallet_mmgen(self): - return self.make_wallet(mn_type='mmgen') + def create_dfl_wallet(self): + t = self.spawn( 'mmgen-walletconv', [ + f'--outdir={cfg.data_dir}', + '--usr-randchars=0', '--quiet', '--hash-preset=1', '--label=foo', + 'test/ref/98831F3A.hex' + ] + ) + t.passphrase_new('new MMGen wallet','abc') + t.written_to_file('MMGen wallet') + return t + + def make_wallet_from_dfl_wallet(self): + return self.make_wallet(mn_type='default',use_dfl_wallet=True) def make_wallet_bip39(self): return self.make_wallet(mn_type='bip39') - def make_wallet(self,mn_type=None,mn_file=None): + def make_wallet(self,mn_type=None,mn_file=None,use_dfl_wallet=False): mn_desc = mn_type or 'default' mn_type = mn_type or 'mmgen' @@ -179,16 +190,23 @@ class TestSuiteAutosignBase(TestSuiteBase): ([] if mn_desc == 'default' else [f'--mnemonic-fmt={mn_type}']) + ['setup'] ) - mn_file = mn_file or { 'mmgen': dfl_words_file, 'bip39': dfl_bip39_file }[mn_type] - mn = read_from_file(mn_file).strip().split() - from mmgen.mn_entry import mn_entry - entry_mode = 'full' - mne = mn_entry( cfg, mn_type, entry_mode ) + if use_dfl_wallet: + t.expect( 'Use default wallet for autosigning? (Y/n): ', 'y' ) + t.passphrase( 'MMGen wallet', 'abc' ) + else: + if use_dfl_wallet is not None: # None => no dfl wallet present + t.expect( 'Use default wallet for autosigning? (Y/n): ', 'n' ) + mn_file = mn_file or { 'mmgen': dfl_words_file, 'bip39': dfl_bip39_file }[mn_type] + mn = read_from_file(mn_file).strip().split() + from mmgen.mn_entry import mn_entry + entry_mode = 'full' + mne = mn_entry( cfg, mn_type, entry_mode ) + + t.expect('words: ',{ 12:'1', 18:'2', 24:'3' }[len(mn)]) + t.expect('OK? (Y/n): ','\n') + t.expect('Type a number.*: ',str(mne.entry_modes.index(entry_mode)+1),regex=True) + stealth_mnemonic_entry(t,mne,mn,entry_mode) - t.expect('words: ',{ 12:'1', 18:'2', 24:'3' }[len(mn)]) - t.expect('OK? (Y/n): ','\n') - t.expect('Type a number.*: ',str(mne.entry_modes.index(entry_mode)+1),regex=True) - stealth_mnemonic_entry(t,mne,mn,entry_mode) wf = t.written_to_file('Autosign wallet') return t @@ -341,10 +359,11 @@ class TestSuiteAutosign(TestSuiteAutosignBase): ('start_daemons', 'starting daemons'), ('copy_tx_files', 'copying transaction files'), ('gen_key', 'generating key'), - ('make_wallet_mmgen', 'making wallet (MMGen native)'), + ('create_dfl_wallet', 'creating default MMGen wallet'), + ('make_wallet_from_dfl_wallet','making autosign wallet (from user’s default wallet)'), ('sign_quiet', 'signing transactions (--quiet)'), ('remove_signed_txfiles', 'removing signed transaction files'), - ('make_wallet_bip39', 'making wallet (BIP39)'), + ('make_wallet_bip39', 'making autosign wallet (from BIP39 mnemonic)'), ('create_bad_txfiles', 'creating bad transaction files'), ('sign_full_summary', 'signing transactions (--full-summary)'), ('remove_signed_txfiles_btc','removing transaction files (BTC only)'), @@ -403,7 +422,7 @@ class TestSuiteAutosignLive(TestSuiteAutosignBTC): ('start_daemons', 'starting daemons'), ('copy_tx_files', 'copying transaction files'), ('gen_key', 'generating key'), - ('make_wallet_bip39', 'making wallet (BIP39)'), + ('make_wallet_mmgen', 'making autosign wallet (from MMGen native mnemonic)'), ('sign_live', 'signing transactions'), ('create_bad_txfiles', 'creating bad transaction files'), ('sign_live_led', 'signing transactions (--led)'), @@ -412,6 +431,9 @@ class TestSuiteAutosignLive(TestSuiteAutosignBTC): ('stop_daemons', 'stopping daemons'), ) + def make_wallet_mmgen(self): + return self.make_wallet(mn_type='mmgen',use_dfl_wallet=None) + def sign_live(self): return self.do_sign_live([])