From c647e48959bc063bb2c56f6b6c81789a7352afd0 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Mon, 26 Sep 2022 15:00:31 +0000 Subject: [PATCH] proto.addr_fmt_to_ver_bytes(): reimplement as dict --- mmgen/addrgen.py | 6 +++--- mmgen/altcoin.py | 4 ++-- mmgen/proto/btc.py | 2 +- mmgen/proto/ltc.py | 4 ++-- mmgen/protocol.py | 9 +++------ 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/mmgen/addrgen.py b/mmgen/addrgen.py index e4a935c3..f3228ef5 100755 --- a/mmgen/addrgen.py +++ b/mmgen/addrgen.py @@ -105,7 +105,7 @@ class addr_generator: @check_data def to_addr(self,data): - step1 = self.proto.addr_fmt_to_ver_bytes('monero') + data.pubkey + step1 = self.proto.addr_fmt_to_ver_bytes['monero'] + data.pubkey return CoinAddr( proto = self.proto, addr = self.b58enc( step1 + self.keccak_256(step1).digest()[:4]) ) @@ -119,13 +119,13 @@ class addr_generator: @check_data def to_addr(self,data): ret = b58chk_encode( - self.proto.addr_fmt_to_ver_bytes('zcash_z') + self.proto.addr_fmt_to_ver_bytes['zcash_z'] + data.pubkey ) return CoinAddr( self.proto, ret ) @check_data def to_viewkey(self,data): ret = b58chk_encode( - self.proto.addr_fmt_to_ver_bytes('viewkey') + self.proto.addr_fmt_to_ver_bytes['viewkey'] + data.viewkey_bytes ) return ZcashViewKey( self.proto, ret ) diff --git a/mmgen/altcoin.py b/mmgen/altcoin.py index adcc5688..aed8e638 100755 --- a/mmgen/altcoin.py +++ b/mmgen/altcoin.py @@ -460,13 +460,13 @@ class CoinInfo(object): test_equal( 'P2PKH version number', e.p2pkh_info[0], - int.from_bytes(proto.addr_fmt_to_ver_bytes('p2pkh'),'big'), + int.from_bytes(proto.addr_fmt_to_ver_bytes['p2pkh'],'big'), *cdata ) test_equal( 'P2SH version number', e.p2sh_info[0], - int.from_bytes(proto.addr_fmt_to_ver_bytes('p2sh'),'big'), + int.from_bytes(proto.addr_fmt_to_ver_bytes['p2sh'],'big'), *cdata ) @classmethod diff --git a/mmgen/proto/btc.py b/mmgen/proto/btc.py index 1ccdc8bf..a7fd2d9a 100755 --- a/mmgen/proto/btc.py +++ b/mmgen/proto/btc.py @@ -101,7 +101,7 @@ class mainnet(CoinProtocol.Secp256k1): # chainparams.cpp def pubhash2addr(self,pubhash,p2sh): assert len(pubhash) == 20, f'{len(pubhash)}: invalid length for pubkey hash' return b58chk_encode( - self.addr_fmt_to_ver_bytes(('p2pkh','p2sh')[p2sh],return_hex=False) + pubhash + self.addr_fmt_to_ver_bytes[('p2pkh','p2sh')[p2sh]] + pubhash ) # Segwit: diff --git a/mmgen/proto/ltc.py b/mmgen/proto/ltc.py index cb19e4eb..b6b23ce3 100755 --- a/mmgen/proto/ltc.py +++ b/mmgen/proto/ltc.py @@ -16,7 +16,7 @@ from .btc import mainnet class mainnet(mainnet): block0 = '12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2' - addr_ver_bytes = { '30': 'p2pkh', '32': 'p2sh', '05': 'p2sh' } # new p2sh ver 0x32 must come first + addr_ver_bytes = { '30': 'p2pkh', '05': 'p2sh', '32': 'p2sh' } # new p2sh ver 0x32 must come last wif_ver_num = { 'std': 'b0' } mmtypes = ('L','C','S','B') coin_amt = 'LTCAmt' @@ -30,7 +30,7 @@ class mainnet(mainnet): class testnet(mainnet): # addr ver nums same as Bitcoin testnet, except for 'p2sh' - addr_ver_bytes = { '6f':'p2pkh', '3a':'p2sh', 'c4':'p2sh' } + addr_ver_bytes = { '6f':'p2pkh', 'c4':'p2sh', '3a':'p2sh' } wif_ver_num = { 'std': 'ef' } # same as Bitcoin testnet bech32_hrp = 'tltc' diff --git a/mmgen/protocol.py b/mmgen/protocol.py index 7194eef4..e5ae9677 100755 --- a/mmgen/protocol.py +++ b/mmgen/protocol.py @@ -67,6 +67,9 @@ class CoinProtocol(MMGenObject): 'regtest': '_rt', }[network] + if hasattr(self,'addr_ver_bytes'): + self.addr_fmt_to_ver_bytes = {v:bytes.fromhex(k) for k,v in self.addr_ver_bytes.items()} + if 'tx' not in self.mmcaps and g.is_txprog: from .util import die die(2,f'Command {g.prog_name!r} not supported for coin {self.coin}') @@ -131,12 +134,6 @@ class CoinProtocol(MMGenObject): def cap(self,s): return s in self.caps - def addr_fmt_to_ver_bytes(self,req_fmt,return_hex=False): - for ver_hex,fmt in self.addr_ver_bytes.items(): - if req_fmt == fmt: - return ver_hex if return_hex else bytes.fromhex(ver_hex) - return False - def get_addr_len(self,addr_fmt): return self.addr_len