Skip to content

Commit 7c976e1

Browse files
committed
feat!: modify Wallet struct to hold a KeyRing
Modified the `ChangeSet` accordingly.
1 parent 7ff9e16 commit 7c976e1

File tree

2 files changed

+200
-196
lines changed

2 files changed

+200
-196
lines changed

wallet/src/wallet/changeset.rs

Lines changed: 34 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ use serde::{Deserialize, Serialize};
88
type IndexedTxGraphChangeSet =
99
indexed_tx_graph::ChangeSet<ConfirmationBlockTime, keychain_txout::ChangeSet>;
1010

11+
use crate::keyring;
12+
1113
/// A change set for [`Wallet`]
1214
///
1315
/// ## Definition
@@ -101,58 +103,47 @@ type IndexedTxGraphChangeSet =
101103
/// [`WalletPersister`]: crate::WalletPersister
102104
/// [`Wallet::staged`]: crate::Wallet::staged
103105
/// [`Wallet`]: crate::Wallet
104-
#[derive(Default, Debug, Clone, PartialEq, Deserialize, Serialize)]
105-
pub struct ChangeSet {
106-
/// Descriptor for recipient addresses.
107-
pub descriptor: Option<Descriptor<DescriptorPublicKey>>,
108-
/// Descriptor for change addresses.
109-
pub change_descriptor: Option<Descriptor<DescriptorPublicKey>>,
110-
/// Stores the network type of the transaction data.
111-
pub network: Option<bitcoin::Network>,
106+
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
107+
pub struct ChangeSet<K: Ord> {
108+
/// Stores the `KeyRing` containing the network and descriptor data.
109+
pub keyring: keyring::changeset::ChangeSet<K>,
112110
/// Changes to the [`LocalChain`](local_chain::LocalChain).
113-
pub local_chain: local_chain::ChangeSet,
111+
pub chain: local_chain::ChangeSet,
114112
/// Changes to [`TxGraph`](tx_graph::TxGraph).
115113
pub tx_graph: tx_graph::ChangeSet<ConfirmationBlockTime>,
116114
/// Changes to [`KeychainTxOutIndex`](keychain_txout::KeychainTxOutIndex).
117115
pub indexer: keychain_txout::ChangeSet,
118116
}
119117

120-
impl Merge for ChangeSet {
121-
/// Merge another [`ChangeSet`] into itself.
122-
fn merge(&mut self, other: Self) {
123-
if other.descriptor.is_some() {
124-
debug_assert!(
125-
self.descriptor.is_none() || self.descriptor == other.descriptor,
126-
"descriptor must never change"
127-
);
128-
self.descriptor = other.descriptor;
129-
}
130-
if other.change_descriptor.is_some() {
131-
debug_assert!(
132-
self.change_descriptor.is_none()
133-
|| self.change_descriptor == other.change_descriptor,
134-
"change descriptor must never change"
135-
);
136-
self.change_descriptor = other.change_descriptor;
137-
}
138-
if other.network.is_some() {
139-
debug_assert!(
140-
self.network.is_none() || self.network == other.network,
141-
"network must never change"
142-
);
143-
self.network = other.network;
118+
impl<K> Default for ChangeSet<K>
119+
where
120+
K: Ord,
121+
{
122+
fn default() -> Self {
123+
Self {
124+
keyring: Default::default(),
125+
chain: Default::default(),
126+
tx_graph: Default::default(),
127+
indexer: Default::default(),
144128
}
129+
}
130+
}
145131

146-
Merge::merge(&mut self.local_chain, other.local_chain);
132+
impl<K> Merge for ChangeSet<K>
133+
where
134+
K: Ord,
135+
{
136+
/// Merge another [`ChangeSet`] into itself.
137+
fn merge(&mut self, other: Self) {
138+
Merge::merge(&mut self.keyring, other.keyring);
139+
Merge::merge(&mut self.chain, other.chain);
147140
Merge::merge(&mut self.tx_graph, other.tx_graph);
148141
Merge::merge(&mut self.indexer, other.indexer);
149142
}
150143

151144
fn is_empty(&self) -> bool {
152-
self.descriptor.is_none()
153-
&& self.change_descriptor.is_none()
154-
&& self.network.is_none()
155-
&& self.local_chain.is_empty()
145+
self.keyring.is_empty()
146+
&& self.chain.is_empty()
156147
&& self.tx_graph.is_empty()
157148
&& self.indexer.is_empty()
158149
}
@@ -276,16 +267,16 @@ impl Merge for ChangeSet {
276267
// }
277268
// }
278269

279-
impl From<local_chain::ChangeSet> for ChangeSet {
270+
impl<K: Ord> From<local_chain::ChangeSet> for ChangeSet<K> {
280271
fn from(chain: local_chain::ChangeSet) -> Self {
281272
Self {
282-
local_chain: chain,
273+
chain: chain,
283274
..Default::default()
284275
}
285276
}
286277
}
287278

288-
impl From<IndexedTxGraphChangeSet> for ChangeSet {
279+
impl<K: Ord> From<IndexedTxGraphChangeSet> for ChangeSet<K> {
289280
fn from(indexed_tx_graph: IndexedTxGraphChangeSet) -> Self {
290281
Self {
291282
tx_graph: indexed_tx_graph.tx_graph,
@@ -295,7 +286,7 @@ impl From<IndexedTxGraphChangeSet> for ChangeSet {
295286
}
296287
}
297288

298-
impl From<tx_graph::ChangeSet<ConfirmationBlockTime>> for ChangeSet {
289+
impl<K: Ord> From<tx_graph::ChangeSet<ConfirmationBlockTime>> for ChangeSet<K> {
299290
fn from(tx_graph: tx_graph::ChangeSet<ConfirmationBlockTime>) -> Self {
300291
Self {
301292
tx_graph,
@@ -304,7 +295,7 @@ impl From<tx_graph::ChangeSet<ConfirmationBlockTime>> for ChangeSet {
304295
}
305296
}
306297

307-
impl From<keychain_txout::ChangeSet> for ChangeSet {
298+
impl<K: Ord> From<keychain_txout::ChangeSet> for ChangeSet<K> {
308299
fn from(indexer: keychain_txout::ChangeSet) -> Self {
309300
Self {
310301
indexer,

0 commit comments

Comments
 (0)