@@ -26,17 +26,26 @@ use std::collections::{BTreeMap, BTreeSet};
26
26
use std:: str:: FromStr ;
27
27
use std:: sync:: Arc ;
28
28
29
+ const CHANGESET_SERIALIZATION_VERSION : u8 = 1 ;
30
+
29
31
pub ( crate ) struct ChangeSetSerWrapper < ' a , T > ( pub & ' a T ) ;
30
32
pub ( crate ) struct ChangeSetDeserWrapper < T > ( pub T ) ;
31
33
32
34
impl < ' a > Writeable for ChangeSetSerWrapper < ' a , Descriptor < DescriptorPublicKey > > {
33
35
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
36
+ CHANGESET_SERIALIZATION_VERSION . write ( writer) ?;
37
+
34
38
self . 0 . to_string ( ) . write ( writer)
35
39
}
36
40
}
37
41
38
42
impl Readable for ChangeSetDeserWrapper < Descriptor < DescriptorPublicKey > > {
39
43
fn read < R : lightning:: io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
44
+ let version: u8 = Readable :: read ( reader) ?;
45
+ if version != CHANGESET_SERIALIZATION_VERSION {
46
+ return Err ( DecodeError :: UnknownVersion ) ;
47
+ }
48
+
40
49
let descriptor_str: String = Readable :: read ( reader) ?;
41
50
let descriptor = Descriptor :: < DescriptorPublicKey > :: from_str ( & descriptor_str)
42
51
. map_err ( |_| DecodeError :: InvalidValue ) ?;
@@ -46,12 +55,19 @@ impl Readable for ChangeSetDeserWrapper<Descriptor<DescriptorPublicKey>> {
46
55
47
56
impl < ' a > Writeable for ChangeSetSerWrapper < ' a , Network > {
48
57
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
58
+ CHANGESET_SERIALIZATION_VERSION . write ( writer) ?;
59
+
49
60
self . 0 . magic ( ) . to_bytes ( ) . write ( writer)
50
61
}
51
62
}
52
63
53
64
impl Readable for ChangeSetDeserWrapper < Network > {
54
65
fn read < R : lightning:: io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
66
+ let version: u8 = Readable :: read ( reader) ?;
67
+ if version != CHANGESET_SERIALIZATION_VERSION {
68
+ return Err ( DecodeError :: UnknownVersion ) ;
69
+ }
70
+
55
71
let buf: [ u8 ; 4 ] = Readable :: read ( reader) ?;
56
72
let magic = Magic :: from_bytes ( buf) ;
57
73
let network = Network :: from_magic ( magic) . ok_or ( DecodeError :: InvalidValue ) ?;
@@ -61,6 +77,8 @@ impl Readable for ChangeSetDeserWrapper<Network> {
61
77
62
78
impl < ' a > Writeable for ChangeSetSerWrapper < ' a , BdkLocalChainChangeSet > {
63
79
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
80
+ CHANGESET_SERIALIZATION_VERSION . write ( writer) ?;
81
+
64
82
encode_tlv_stream ! ( writer, {
65
83
( 0 , self . 0 . blocks, required) ,
66
84
} ) ;
@@ -70,6 +88,11 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BdkLocalChainChangeSet> {
70
88
71
89
impl Readable for ChangeSetDeserWrapper < BdkLocalChainChangeSet > {
72
90
fn read < R : lightning:: io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
91
+ let version: u8 = Readable :: read ( reader) ?;
92
+ if version != CHANGESET_SERIALIZATION_VERSION {
93
+ return Err ( DecodeError :: UnknownVersion ) ;
94
+ }
95
+
73
96
let mut blocks = RequiredWrapper ( None ) ;
74
97
decode_tlv_stream ! ( reader, {
75
98
( 0 , blocks, required) ,
@@ -80,6 +103,8 @@ impl Readable for ChangeSetDeserWrapper<BdkLocalChainChangeSet> {
80
103
81
104
impl < ' a > Writeable for ChangeSetSerWrapper < ' a , BdkTxGraphChangeSet < ConfirmationBlockTime > > {
82
105
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
106
+ CHANGESET_SERIALIZATION_VERSION . write ( writer) ?;
107
+
83
108
encode_tlv_stream ! ( writer, {
84
109
( 0 , ChangeSetSerWrapper ( & self . 0 . txs) , required) ,
85
110
( 2 , self . 0 . txouts, required) ,
@@ -92,6 +117,11 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BdkTxGraphChangeSet<ConfirmationB
92
117
93
118
impl Readable for ChangeSetDeserWrapper < BdkTxGraphChangeSet < ConfirmationBlockTime > > {
94
119
fn read < R : lightning:: io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
120
+ let version: u8 = Readable :: read ( reader) ?;
121
+ if version != CHANGESET_SERIALIZATION_VERSION {
122
+ return Err ( DecodeError :: UnknownVersion ) ;
123
+ }
124
+
95
125
let mut txs: RequiredWrapper < ChangeSetDeserWrapper < BTreeSet < Arc < Transaction > > > > =
96
126
RequiredWrapper ( None ) ;
97
127
let mut txouts: RequiredWrapper < BTreeMap < OutPoint , TxOut > > = RequiredWrapper ( None ) ;
@@ -228,13 +258,20 @@ impl Readable for ChangeSetDeserWrapper<BlockId> {
228
258
229
259
impl < ' a > Writeable for ChangeSetSerWrapper < ' a , BdkIndexerChangeSet > {
230
260
fn write < W : Writer > ( & self , writer : & mut W ) -> Result < ( ) , lightning:: io:: Error > {
261
+ CHANGESET_SERIALIZATION_VERSION . write ( writer) ?;
262
+
231
263
encode_tlv_stream ! ( writer, { ( 0 , ChangeSetSerWrapper ( & self . 0 . last_revealed) , required) } ) ;
232
264
Ok ( ( ) )
233
265
}
234
266
}
235
267
236
268
impl Readable for ChangeSetDeserWrapper < BdkIndexerChangeSet > {
237
269
fn read < R : lightning:: io:: Read > ( reader : & mut R ) -> Result < Self , DecodeError > {
270
+ let version: u8 = Readable :: read ( reader) ?;
271
+ if version != CHANGESET_SERIALIZATION_VERSION {
272
+ return Err ( DecodeError :: UnknownVersion ) ;
273
+ }
274
+
238
275
let mut last_revealed: RequiredWrapper < ChangeSetDeserWrapper < BTreeMap < DescriptorId , u32 > > > =
239
276
RequiredWrapper ( None ) ;
240
277
0 commit comments