@@ -10,23 +10,31 @@ class InvalidAddress(Exception):
1010class Address :
1111 VERSION_MAP = {
1212 'legacy' : [
13- ('P2SH' , 5 ),
14- ('P2PKH' , 0 )
13+ ('P2SH' , 5 , False ),
14+ ('P2PKH' , 0 , False ),
15+ ('P2SH-TESTNET' , 196 , True ),
16+ ('P2PKH-TESTNET' , 111 , True )
1517 ],
1618 'cash' : [
17- ('P2SH' , 8 ),
18- ('P2PKH' , 0 )
19+ ('P2SH' , 8 , False ),
20+ ('P2PKH' , 0 , False ),
21+ ('P2SH-TESTNET' , 8 , True ),
22+ ('P2PKH-TESTNET' , 0 , True )
1923 ]
2024 }
21- DEFAULT_PREFIX = 'bitcoincash'
25+ MAINNET_PREFIX = 'bitcoincash'
26+ TESTNET_PREFIX = 'bchtest'
2227
2328 def __init__ (self , version , payload , prefix = None ):
2429 self .version = version
2530 self .payload = payload
2631 if prefix :
2732 self .prefix = prefix
2833 else :
29- self .prefix = self .DEFAULT_PREFIX
34+ if Address ._address_type ('cash' , self .version )[2 ]:
35+ self .prefix = self .TESTNET_PREFIX
36+ else :
37+ self .prefix = self .MAINNET_PREFIX
3038
3139 def __str__ (self ):
3240 return 'version: {}\n payload: {}\n prefix: {}' .format (self .version , self .payload , self .prefix )
@@ -90,13 +98,15 @@ def _cash_string(address_string):
9098 raise InvalidAddress ('Cash address contains uppercase and lowercase characters' )
9199 address_string = address_string .lower ()
92100 if ':' not in address_string :
93- address_string = Address .DEFAULT_PREFIX + ':' + address_string
101+ address_string = Address .MAINNET_PREFIX + ':' + address_string
94102 prefix , base32string = address_string .split (':' )
95103 decoded = b32decode (base32string )
96104 if not verify_checksum (prefix , decoded ):
97105 raise InvalidAddress ('Bad cash address checksum' )
98106 converted = convertbits (decoded , 5 , 8 )
99107 version = Address ._address_type ('cash' , converted [0 ])[0 ]
108+ if prefix == Address .TESTNET_PREFIX :
109+ version += '-TESTNET'
100110 payload = converted [1 :- 6 ]
101111 return Address (version , payload , prefix )
102112
0 commit comments