@@ -8,6 +8,8 @@ use serde::{Deserialize, Serialize};
88type 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,14 +103,10 @@ 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).
113111 pub local_chain : local_chain:: ChangeSet ,
114112 /// Changes to [`TxGraph`](tx_graph::TxGraph).
@@ -117,41 +115,34 @@ pub struct ChangeSet {
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+ local_chain : Default :: default ( ) ,
126+ tx_graph : Default :: default ( ) ,
127+ indexer : Default :: default ( ) ,
144128 }
129+ }
130+ }
145131
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 ) ;
146139 Merge :: merge ( & mut self . local_chain , other. local_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 ( )
145+ self . keyring . is_empty ( )
155146 && self . local_chain . is_empty ( )
156147 && self . tx_graph . is_empty ( )
157148 && self . indexer . is_empty ( )
@@ -276,7 +267,7 @@ 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 {
282273 local_chain : chain,
@@ -285,7 +276,7 @@ impl From<local_chain::ChangeSet> for ChangeSet {
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