From b27da5d90ed11dc2678e5734942ddd28127ac2db Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 13 Jun 2020 10:21:01 +0000 Subject: [PATCH] CoinProtocol: remove 'daemon_name' attr --- mmgen/help.py | 14 ++++++++++++-- mmgen/main_txbump.py | 6 +++--- mmgen/main_txsign.py | 3 +-- mmgen/opts.py | 4 ++-- mmgen/protocol.py | 6 +----- mmgen/regtest.py | 2 +- mmgen/tx.py | 2 +- test/gentest.py | 5 ++--- 8 files changed, 23 insertions(+), 19 deletions(-) diff --git a/mmgen/help.py b/mmgen/help.py index 6317541a..4d5d5550 100755 --- a/mmgen/help.py +++ b/mmgen/help.py @@ -32,8 +32,17 @@ def help_notes_func(proto,k): cu = proto.coin_amt.units return ', '.join(cu[:-1]) + ('',' and ')[len(cu)>1] + cu[-1] + ('',',\nrespectively')[len(cu)>1] + def coind_exec(): + from .daemon import CoinDaemon + return ( + CoinDaemon(proto.coin).coind_exec if proto.coin.lower() in CoinDaemon.daemon_ids else + 'bitcoind' ) + class help_notes: + def coind_exec(): + return coind_exec() + def rel_fee_desc(): from .tx import MMGenTX return MMGenTX.Base().rel_fee_desc @@ -96,10 +105,11 @@ one address with no amount on the command line. """ def txsign(): + from .protocol import CoinProtocol return """ Transactions may contain both {pnm} or non-{pnm} input addresses. -To sign non-{pnm} inputs, a {dn} wallet dump or flat key list is used +To sign non-{pnm} inputs, a {wd}flat key list is used as the key source ('--keys-from-file' option). To sign {pnm} inputs, key data is generated from a seed as with the @@ -117,7 +127,7 @@ source. Therefore, seed files or a key-address file for all {pnm} outputs must also be supplied on the command line if the data can't be found in the default wallet. """.format( - dn = proto.daemon_name, + wd = (f'{coind_exec()} wallet dump or ' if isinstance(proto,CoinProtocol.Bitcoin) else ''), pnm = g.proj_name, pnu = proto.name, pnl = g.proj_name.lower() ) diff --git a/mmgen/main_txbump.py b/mmgen/main_txbump.py index 06503f3e..dd2692cb 100755 --- a/mmgen/main_txbump.py +++ b/mmgen/main_txbump.py @@ -64,7 +64,7 @@ opts_data = { -O, --old-incog-fmt Specify old-format incognito input -p, --hash-preset= p Use the scrypt hash parameters defined by preset 'p' for password hashing (default: '{g.dfl_hash_preset}') --P, --passwd-file= f Get {pnm} wallet or {dn} passphrase from file 'f' +-P, --passwd-file= f Get {pnm} wallet passphrase from file 'f' -q, --quiet Suppress warnings; overwrite files without prompting -s, --send Sign and send the transaction (the default if seed data is provided) @@ -85,8 +85,8 @@ column below: g=g, pnm=g.proj_name, pnl=g.proj_name.lower(), - dn=proto.daemon_name, - fu=help_notes('rel_fee_desc'),fl=help_notes('fee_spec_letters'), + fu=help_notes('rel_fee_desc'), + fl=help_notes('fee_spec_letters'), kgs=' '.join(['{}:{}'.format(n,k) for n,k in enumerate(g.key_generators,1)]), kg=g.key_generator, cu=proto.coin), diff --git a/mmgen/main_txsign.py b/mmgen/main_txsign.py index a5a91d35..e5a960dc 100755 --- a/mmgen/main_txsign.py +++ b/mmgen/main_txsign.py @@ -57,7 +57,7 @@ opts_data = { online signing without an {pnm} seed source. The key-address file is also used to verify {pnm}-to-{cu} mappings, so the user should record its checksum. --P, --passwd-file= f Get {pnm} wallet or {dn} passphrase from file 'f' +-P, --passwd-file= f Get {pnm} wallet passphrase from file 'f' -q, --quiet Suppress warnings; overwrite files without prompting -I, --info Display information about the transaction and exit -t, --terse-info Like '--info', but produce more concise output @@ -81,7 +81,6 @@ column below: g=g, pnm=g.proj_name, pnl=g.proj_name.lower(), - dn=proto.daemon_name, kgs=' '.join(['{}:{}'.format(n,k) for n,k in enumerate(g.key_generators,1)]), kg=g.key_generator, ss=g.subseeds, diff --git a/mmgen/opts.py b/mmgen/opts.py index 998762da..b68ec039 100755 --- a/mmgen/opts.py +++ b/mmgen/opts.py @@ -214,9 +214,9 @@ common_opts_data = { --, --bob Switch to user "Bob" in MMGen regtest setup --, --alice Switch to user "Alice" in MMGen regtest setup """, - 'code': lambda proto,s: s.format( + 'code': lambda help_notes,proto,s: s.format( pnm = g.proj_name, - dn = proto.daemon_name, + dn = help_notes('coind_exec'), cu_dfl = proto.coin, ) } diff --git a/mmgen/protocol.py b/mmgen/protocol.py index f3982359..6f7f9311 100755 --- a/mmgen/protocol.py +++ b/mmgen/protocol.py @@ -84,6 +84,7 @@ class CoinProtocol(MMGenObject): core_coins = tuple(coins.keys()) # coins may be added by init_genonly_altcoins(), so save class Base(MMGenObject): + base_proto = None is_fork_of = None networks = ('mainnet','testnet','regtest') @@ -201,7 +202,6 @@ class CoinProtocol(MMGenObject): All Bitcoin code and chain forks inherit from this class """ mod_clsname = 'Bitcoin' - daemon_name = 'bitcoind' daemon_family = 'bitcoind' addr_ver_bytes = { '00': 'p2pkh', '05': 'p2sh' } addr_len = 20 @@ -303,7 +303,6 @@ class CoinProtocol(MMGenObject): class BitcoinCash(Bitcoin): is_fork_of = 'Bitcoin' # TODO: assumes MSWin user installs in custom dir 'Bitcoin_ABC' - daemon_name = 'bitcoind-abc' mmtypes = ('L','C') sighash_type = 'ALL|FORKID' forks = [ @@ -325,7 +324,6 @@ class CoinProtocol(MMGenObject): class B2X(Bitcoin): is_fork_of = 'Bitcoin' - daemon_name = 'bitcoind-2x' coin_amt = B2XAmt max_tx_fee = B2XAmt('0.1') forks = [ @@ -338,7 +336,6 @@ class CoinProtocol(MMGenObject): class Litecoin(Bitcoin): block0 = '12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2' - daemon_name = 'litecoind' addr_ver_bytes = { '30': 'p2pkh', '32': 'p2sh', '05': 'p2sh' } # new p2sh ver 0x32 must come first wif_ver_num = { 'std': 'b0' } mmtypes = ('L','C','S','B') @@ -378,7 +375,6 @@ class CoinProtocol(MMGenObject): base_coin = 'ETH' pubkey_type = 'std' # required by DummyWIF - daemon_name = 'parity' daemon_family = 'parity' coin_amt = ETHAmt max_tx_fee = ETHAmt('0.005') diff --git a/mmgen/regtest.py b/mmgen/regtest.py index 0aadc925..e0571cde 100755 --- a/mmgen/regtest.py +++ b/mmgen/regtest.py @@ -159,7 +159,7 @@ class MMGenRegtest(MMGenObject): msg(err) def current_user_unix(self,quiet=False): - cmd = ['pgrep','-af','{}.*--rpcport={}.*'.format(self.proto.daemon_name,self.d.rpc_port)] + cmd = ['pgrep','-af','{}.*--rpcport={}.*'.format(self.d.coind_exec,self.d.rpc_port)] cmdout = run(cmd,stdout=PIPE).stdout.decode() if cmdout: for k in self.users: diff --git a/mmgen/tx.py b/mmgen/tx.py index ebc06644..fe8fbc1d 100755 --- a/mmgen/tx.py +++ b/mmgen/tx.py @@ -1203,7 +1203,7 @@ class MMGenTX: self.check_pubkey_scripts() - qmsg(f'Passing {len(keys)} key{suf(keys)} to {self.proto.daemon_name}') + qmsg(f'Passing {len(keys)} key{suf(keys)} to {self.rpc.daemon.coind_exec}') if self.has_segwit_inputs(): from .addr import KeyGenerator,AddrGenerator diff --git a/test/gentest.py b/test/gentest.py index 59920059..9ec1bfae 100755 --- a/test/gentest.py +++ b/test/gentest.py @@ -78,7 +78,7 @@ EXAMPLES: Test speed of mmgen-secp256k1 address generation, 10,000 rounds: $ {prog} 2 10000 - Compare mmgen-secp256k1-generated bech32 addrs to {dn} wallet dump: + Compare mmgen-secp256k1-generated bech32 addrs to coin daemon wallet dump: $ {prog} --type=bech32 2 bech32wallet.dump Supported external tools: @@ -105,8 +105,7 @@ Supported external tools: 'notes': lambda s: s.format( prog='test/gentest.py', pnm=g.proj_name, - snum=rounds, - dn=proto.daemon_name) + snum=rounds ) } }