@@ -140,6 +140,8 @@ pub struct AddressInfo {
140
140
pub index : u32 ,
141
141
/// Address
142
142
pub address : Address ,
143
+ /// Type of keychain
144
+ pub keychain : KeychainKind ,
143
145
}
144
146
145
147
impl Deref for AddressInfo {
@@ -246,6 +248,7 @@ where
246
248
. map ( |address| AddressInfo {
247
249
address,
248
250
index : incremented_index,
251
+ keychain,
249
252
} )
250
253
. map_err ( |_| Error :: ScriptDoesntHaveAddressForm )
251
254
}
@@ -276,6 +279,7 @@ where
276
279
. map ( |address| AddressInfo {
277
280
address,
278
281
index : current_index,
282
+ keychain,
279
283
} )
280
284
. map_err ( |_| Error :: ScriptDoesntHaveAddressForm )
281
285
}
@@ -286,7 +290,11 @@ where
286
290
self . get_descriptor_for_keychain ( keychain)
287
291
. as_derived ( index, & self . secp )
288
292
. address ( self . network )
289
- . map ( |address| AddressInfo { index, address } )
293
+ . map ( |address| AddressInfo {
294
+ index,
295
+ address,
296
+ keychain,
297
+ } )
290
298
. map_err ( |_| Error :: ScriptDoesntHaveAddressForm )
291
299
}
292
300
@@ -298,7 +306,11 @@ where
298
306
self . get_descriptor_for_keychain ( keychain)
299
307
. as_derived ( index, & self . secp )
300
308
. address ( self . network )
301
- . map ( |address| AddressInfo { index, address } )
309
+ . map ( |address| AddressInfo {
310
+ index,
311
+ address,
312
+ keychain,
313
+ } )
302
314
. map_err ( |_| Error :: ScriptDoesntHaveAddressForm )
303
315
}
304
316
@@ -3924,6 +3936,7 @@ pub(crate) mod test {
3924
3936
AddressInfo {
3925
3937
index: 0 ,
3926
3938
address: Address :: from_str( "tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a" ) . unwrap( ) ,
3939
+ keychain: KeychainKind :: External ,
3927
3940
}
3928
3941
) ;
3929
3942
@@ -3932,7 +3945,8 @@ pub(crate) mod test {
3932
3945
wallet. get_address( New ) . unwrap( ) ,
3933
3946
AddressInfo {
3934
3947
index: 1 ,
3935
- address: Address :: from_str( "tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7" ) . unwrap( )
3948
+ address: Address :: from_str( "tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7" ) . unwrap( ) ,
3949
+ keychain: KeychainKind :: External ,
3936
3950
}
3937
3951
) ;
3938
3952
@@ -3941,7 +3955,8 @@ pub(crate) mod test {
3941
3955
wallet. get_address( Peek ( 25 ) ) . unwrap( ) ,
3942
3956
AddressInfo {
3943
3957
index: 25 ,
3944
- address: Address :: from_str( "tb1qsp7qu0knx3sl6536dzs0703u2w2ag6ppl9d0c2" ) . unwrap( )
3958
+ address: Address :: from_str( "tb1qsp7qu0knx3sl6536dzs0703u2w2ag6ppl9d0c2" ) . unwrap( ) ,
3959
+ keychain: KeychainKind :: External ,
3945
3960
}
3946
3961
) ;
3947
3962
@@ -3950,7 +3965,8 @@ pub(crate) mod test {
3950
3965
wallet. get_address( New ) . unwrap( ) ,
3951
3966
AddressInfo {
3952
3967
index: 2 ,
3953
- address: Address :: from_str( "tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2" ) . unwrap( )
3968
+ address: Address :: from_str( "tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2" ) . unwrap( ) ,
3969
+ keychain: KeychainKind :: External ,
3954
3970
}
3955
3971
) ;
3956
3972
@@ -3959,7 +3975,8 @@ pub(crate) mod test {
3959
3975
wallet. get_address( Reset ( 1 ) ) . unwrap( ) ,
3960
3976
AddressInfo {
3961
3977
index: 1 ,
3962
- address: Address :: from_str( "tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7" ) . unwrap( )
3978
+ address: Address :: from_str( "tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7" ) . unwrap( ) ,
3979
+ keychain: KeychainKind :: External ,
3963
3980
}
3964
3981
) ;
3965
3982
@@ -3968,7 +3985,8 @@ pub(crate) mod test {
3968
3985
wallet. get_address( New ) . unwrap( ) ,
3969
3986
AddressInfo {
3970
3987
index: 2 ,
3971
- address: Address :: from_str( "tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2" ) . unwrap( )
3988
+ address: Address :: from_str( "tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2" ) . unwrap( ) ,
3989
+ keychain: KeychainKind :: External ,
3972
3990
}
3973
3991
) ;
3974
3992
}
@@ -3997,15 +4015,21 @@ pub(crate) mod test {
3997
4015
. unwrap ( ) ;
3998
4016
3999
4017
assert_eq ! (
4000
- wallet. get_address( AddressIndex :: New ) . unwrap( ) . address,
4001
- Address :: from_str( "bcrt1qkmvk2nadgplmd57ztld8nf8v2yxkzmdvwtjf8s" ) . unwrap( )
4018
+ wallet. get_address( AddressIndex :: New ) . unwrap( ) ,
4019
+ AddressInfo {
4020
+ index: 0 ,
4021
+ address: Address :: from_str( "bcrt1qkmvk2nadgplmd57ztld8nf8v2yxkzmdvwtjf8s" ) . unwrap( ) ,
4022
+ keychain: KeychainKind :: External ,
4023
+ }
4002
4024
) ;
4025
+
4003
4026
assert_eq ! (
4004
- wallet
4005
- . get_internal_address( AddressIndex :: New )
4006
- . unwrap( )
4007
- . address,
4008
- Address :: from_str( "bcrt1qtrwtz00wxl69e5xex7amy4xzlxkaefg3gfdkxa" ) . unwrap( )
4027
+ wallet. get_internal_address( AddressIndex :: New ) . unwrap( ) ,
4028
+ AddressInfo {
4029
+ index: 0 ,
4030
+ address: Address :: from_str( "bcrt1qtrwtz00wxl69e5xex7amy4xzlxkaefg3gfdkxa" ) . unwrap( ) ,
4031
+ keychain: KeychainKind :: Internal ,
4032
+ }
4009
4033
) ;
4010
4034
4011
4035
let wallet = Wallet :: new (
@@ -4017,11 +4041,12 @@ pub(crate) mod test {
4017
4041
. unwrap ( ) ;
4018
4042
4019
4043
assert_eq ! (
4020
- wallet
4021
- . get_internal_address( AddressIndex :: New )
4022
- . unwrap( )
4023
- . address,
4024
- Address :: from_str( "bcrt1qkmvk2nadgplmd57ztld8nf8v2yxkzmdvwtjf8s" ) . unwrap( ) ,
4044
+ wallet. get_internal_address( AddressIndex :: New ) . unwrap( ) ,
4045
+ AddressInfo {
4046
+ index: 0 ,
4047
+ address: Address :: from_str( "bcrt1qkmvk2nadgplmd57ztld8nf8v2yxkzmdvwtjf8s" ) . unwrap( ) ,
4048
+ keychain: KeychainKind :: Internal ,
4049
+ } ,
4025
4050
"when there's no internal descriptor it should just use external"
4026
4051
) ;
4027
4052
}
0 commit comments