@@ -146,6 +146,15 @@ impl AddressParams {
146146 bech_hrp : "ert" ,
147147 blech_hrp : "el" ,
148148 } ;
149+
150+ /// The default liquid testnet network address parameters.
151+ pub const LIQUID_TESTNET : AddressParams = AddressParams {
152+ p2pkh_prefix : 36 ,
153+ p2sh_prefix : 19 ,
154+ blinded_prefix : 23 ,
155+ bech_hrp : "tex" ,
156+ blech_hrp : "tlq" ,
157+ } ;
149158}
150159
151160/// The method used to produce an address
@@ -439,7 +448,7 @@ impl Address {
439448 if data. len ( ) < 2 || data. len ( ) > 40 + if blinded { 33 } else { 0 } {
440449 return Err ( AddressError :: InvalidWitnessProgramLength ( data. len ( ) - if blinded { 33 } else { 0 } ) ) ;
441450 }
442-
451+
443452 // Specific segwit v0 check.
444453 if !blinded && version. to_u8 ( ) == 0 && data. len ( ) != 20 && data. len ( ) != 32 {
445454 return Err ( AddressError :: InvalidSegwitV0ProgramLength ( data. len ( ) ) ) ;
@@ -649,20 +658,19 @@ impl FromStr for Address {
649658 // shorthands
650659 let liq = & AddressParams :: LIQUID ;
651660 let ele = & AddressParams :: ELEMENTS ;
661+ let liq_test = & AddressParams :: LIQUID_TESTNET ;
662+
663+ let net_arr = [ liq, ele, liq_test] ;
652664
653- // Bech32.
654665 let prefix = find_prefix ( s) ;
655- if match_prefix ( prefix, liq. bech_hrp ) {
656- return Address :: from_bech32 ( s, false , liq) ;
657- }
658- if match_prefix ( prefix, liq. blech_hrp ) {
659- return Address :: from_bech32 ( s, true , liq) ;
660- }
661- if match_prefix ( prefix, ele. bech_hrp ) {
662- return Address :: from_bech32 ( s, false , ele) ;
663- }
664- if match_prefix ( prefix, ele. blech_hrp ) {
665- return Address :: from_bech32 ( s, true , ele) ;
666+ for net in net_arr. iter ( ) {
667+ // Bech32.
668+ if match_prefix ( prefix, net. bech_hrp ) {
669+ return Address :: from_bech32 ( s, false , net) ;
670+ }
671+ if match_prefix ( prefix, net. blech_hrp ) {
672+ return Address :: from_bech32 ( s, true , net) ;
673+ }
666674 }
667675
668676 // Base58.
@@ -675,11 +683,10 @@ impl FromStr for Address {
675683 }
676684
677685 let p = data[ 0 ] ;
678- if p == liq. p2pkh_prefix || p == liq. p2sh_prefix || p == liq. blinded_prefix {
679- return Address :: from_base58 ( & data, liq) ;
680- }
681- if p == ele. p2pkh_prefix || p == ele. p2sh_prefix || p == ele. blinded_prefix {
682- return Address :: from_base58 ( & data, ele) ;
686+ for net in net_arr. iter ( ) {
687+ if p == net. p2pkh_prefix || p == net. p2sh_prefix || p == net. blinded_prefix {
688+ return Address :: from_base58 ( & data, net) ;
689+ }
683690 }
684691
685692 Err ( AddressError :: InvalidAddress ( s. to_owned ( ) ) )
0 commit comments