proto.addr_fmt_to_ver_bytes(): reimplement as dict

This commit is contained in:
The MMGen Project 2022-09-26 15:00:31 +00:00
commit c647e48959
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
5 changed files with 11 additions and 14 deletions

View file

@ -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 )

View file

@ -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

View file

@ -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:

View file

@ -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'

View file

@ -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