Skip to content

Commit 9c0141b

Browse files
committed
Merge #563: update AddressInfo struct
2698fc0 update AddressInfo struct (eunoia_1729) Pull request description: ### Description Resolves #541. - Updates `AddressInfo` struct to include `keychainKind` - Updates the related `get_address` functions to pass in this field - Updates corresponding tests ### Checklists #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing Top commit has no ACKs. Tree-SHA512: b1d22e5f322e1a35390fb06a5185457bd53af7c4a9c4e6e2fd5e93b967fa3f56af5848ac314e63e2b0becd60dbc8a4eeb761a2bdebfe8ba43ce49b13da4190b2
2 parents bac15bb + 2698fc0 commit 9c0141b

File tree

1 file changed

+44
-19
lines changed

1 file changed

+44
-19
lines changed

src/wallet/mod.rs

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ pub struct AddressInfo {
140140
pub index: u32,
141141
/// Address
142142
pub address: Address,
143+
/// Type of keychain
144+
pub keychain: KeychainKind,
143145
}
144146

145147
impl Deref for AddressInfo {
@@ -246,6 +248,7 @@ where
246248
.map(|address| AddressInfo {
247249
address,
248250
index: incremented_index,
251+
keychain,
249252
})
250253
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
251254
}
@@ -276,6 +279,7 @@ where
276279
.map(|address| AddressInfo {
277280
address,
278281
index: current_index,
282+
keychain,
279283
})
280284
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
281285
}
@@ -286,7 +290,11 @@ where
286290
self.get_descriptor_for_keychain(keychain)
287291
.as_derived(index, &self.secp)
288292
.address(self.network)
289-
.map(|address| AddressInfo { index, address })
293+
.map(|address| AddressInfo {
294+
index,
295+
address,
296+
keychain,
297+
})
290298
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
291299
}
292300

@@ -298,7 +306,11 @@ where
298306
self.get_descriptor_for_keychain(keychain)
299307
.as_derived(index, &self.secp)
300308
.address(self.network)
301-
.map(|address| AddressInfo { index, address })
309+
.map(|address| AddressInfo {
310+
index,
311+
address,
312+
keychain,
313+
})
302314
.map_err(|_| Error::ScriptDoesntHaveAddressForm)
303315
}
304316

@@ -3924,6 +3936,7 @@ pub(crate) mod test {
39243936
AddressInfo {
39253937
index: 0,
39263938
address: Address::from_str("tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a").unwrap(),
3939+
keychain: KeychainKind::External,
39273940
}
39283941
);
39293942

@@ -3932,7 +3945,8 @@ pub(crate) mod test {
39323945
wallet.get_address(New).unwrap(),
39333946
AddressInfo {
39343947
index: 1,
3935-
address: Address::from_str("tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7").unwrap()
3948+
address: Address::from_str("tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7").unwrap(),
3949+
keychain: KeychainKind::External,
39363950
}
39373951
);
39383952

@@ -3941,7 +3955,8 @@ pub(crate) mod test {
39413955
wallet.get_address(Peek(25)).unwrap(),
39423956
AddressInfo {
39433957
index: 25,
3944-
address: Address::from_str("tb1qsp7qu0knx3sl6536dzs0703u2w2ag6ppl9d0c2").unwrap()
3958+
address: Address::from_str("tb1qsp7qu0knx3sl6536dzs0703u2w2ag6ppl9d0c2").unwrap(),
3959+
keychain: KeychainKind::External,
39453960
}
39463961
);
39473962

@@ -3950,7 +3965,8 @@ pub(crate) mod test {
39503965
wallet.get_address(New).unwrap(),
39513966
AddressInfo {
39523967
index: 2,
3953-
address: Address::from_str("tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2").unwrap()
3968+
address: Address::from_str("tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2").unwrap(),
3969+
keychain: KeychainKind::External,
39543970
}
39553971
);
39563972

@@ -3959,7 +3975,8 @@ pub(crate) mod test {
39593975
wallet.get_address(Reset(1)).unwrap(),
39603976
AddressInfo {
39613977
index: 1,
3962-
address: Address::from_str("tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7").unwrap()
3978+
address: Address::from_str("tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7").unwrap(),
3979+
keychain: KeychainKind::External,
39633980
}
39643981
);
39653982

@@ -3968,7 +3985,8 @@ pub(crate) mod test {
39683985
wallet.get_address(New).unwrap(),
39693986
AddressInfo {
39703987
index: 2,
3971-
address: Address::from_str("tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2").unwrap()
3988+
address: Address::from_str("tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2").unwrap(),
3989+
keychain: KeychainKind::External,
39723990
}
39733991
);
39743992
}
@@ -3997,15 +4015,21 @@ pub(crate) mod test {
39974015
.unwrap();
39984016

39994017
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+
}
40024024
);
4025+
40034026
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+
}
40094033
);
40104034

40114035
let wallet = Wallet::new(
@@ -4017,11 +4041,12 @@ pub(crate) mod test {
40174041
.unwrap();
40184042

40194043
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+
},
40254050
"when there's no internal descriptor it should just use external"
40264051
);
40274052
}

0 commit comments

Comments
 (0)