Browse Source

proto.addr_fmt_to_ver_bytes(): reimplement as dict

The MMGen Project 2 years ago
parent
commit
c647e48959
5 changed files with 11 additions and 14 deletions
  1. 3 3
      mmgen/addrgen.py
  2. 2 2
      mmgen/altcoin.py
  3. 1 1
      mmgen/proto/btc.py
  4. 2 2
      mmgen/proto/ltc.py
  5. 3 6
      mmgen/protocol.py

+ 3 - 3
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 )

+ 2 - 2
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

+ 1 - 1
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:

+ 2 - 2
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'
 

+ 3 - 6
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