@@ -146,6 +146,15 @@ impl AddressParams {
146
146
bech_hrp : "ert" ,
147
147
blech_hrp : "el" ,
148
148
} ;
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
+ } ;
149
158
}
150
159
151
160
/// The method used to produce an address
@@ -439,7 +448,7 @@ impl Address {
439
448
if data. len ( ) < 2 || data. len ( ) > 40 + if blinded { 33 } else { 0 } {
440
449
return Err ( AddressError :: InvalidWitnessProgramLength ( data. len ( ) - if blinded { 33 } else { 0 } ) ) ;
441
450
}
442
-
451
+
443
452
// Specific segwit v0 check.
444
453
if !blinded && version. to_u8 ( ) == 0 && data. len ( ) != 20 && data. len ( ) != 32 {
445
454
return Err ( AddressError :: InvalidSegwitV0ProgramLength ( data. len ( ) ) ) ;
@@ -649,20 +658,19 @@ impl FromStr for Address {
649
658
// shorthands
650
659
let liq = & AddressParams :: LIQUID ;
651
660
let ele = & AddressParams :: ELEMENTS ;
661
+ let liq_test = & AddressParams :: LIQUID_TESTNET ;
662
+
663
+ let net_arr = [ liq, ele, liq_test] ;
652
664
653
- // Bech32.
654
665
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
+ }
666
674
}
667
675
668
676
// Base58.
@@ -675,11 +683,10 @@ impl FromStr for Address {
675
683
}
676
684
677
685
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
+ }
683
690
}
684
691
685
692
Err ( AddressError :: InvalidAddress ( s. to_owned ( ) ) )
0 commit comments