Skip to content

Commit 111ee78

Browse files
committed
f Add serialization version byte for top-level types
1 parent 18d9953 commit 111ee78

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

src/wallet/ser.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,26 @@ use std::collections::{BTreeMap, BTreeSet};
2626
use std::str::FromStr;
2727
use std::sync::Arc;
2828

29+
const CHANGESET_SERIALIZATION_VERSION: u8 = 1;
30+
2931
pub(crate) struct ChangeSetSerWrapper<'a, T>(pub &'a T);
3032
pub(crate) struct ChangeSetDeserWrapper<T>(pub T);
3133

3234
impl<'a> Writeable for ChangeSetSerWrapper<'a, Descriptor<DescriptorPublicKey>> {
3335
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), lightning::io::Error> {
36+
CHANGESET_SERIALIZATION_VERSION.write(writer)?;
37+
3438
self.0.to_string().write(writer)
3539
}
3640
}
3741

3842
impl Readable for ChangeSetDeserWrapper<Descriptor<DescriptorPublicKey>> {
3943
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+
4049
let descriptor_str: String = Readable::read(reader)?;
4150
let descriptor = Descriptor::<DescriptorPublicKey>::from_str(&descriptor_str)
4251
.map_err(|_| DecodeError::InvalidValue)?;
@@ -46,12 +55,19 @@ impl Readable for ChangeSetDeserWrapper<Descriptor<DescriptorPublicKey>> {
4655

4756
impl<'a> Writeable for ChangeSetSerWrapper<'a, Network> {
4857
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), lightning::io::Error> {
58+
CHANGESET_SERIALIZATION_VERSION.write(writer)?;
59+
4960
self.0.magic().to_bytes().write(writer)
5061
}
5162
}
5263

5364
impl Readable for ChangeSetDeserWrapper<Network> {
5465
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+
5571
let buf: [u8; 4] = Readable::read(reader)?;
5672
let magic = Magic::from_bytes(buf);
5773
let network = Network::from_magic(magic).ok_or(DecodeError::InvalidValue)?;
@@ -61,6 +77,8 @@ impl Readable for ChangeSetDeserWrapper<Network> {
6177

6278
impl<'a> Writeable for ChangeSetSerWrapper<'a, BdkLocalChainChangeSet> {
6379
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), lightning::io::Error> {
80+
CHANGESET_SERIALIZATION_VERSION.write(writer)?;
81+
6482
encode_tlv_stream!(writer, {
6583
(0, self.0.blocks, required),
6684
});
@@ -70,6 +88,11 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BdkLocalChainChangeSet> {
7088

7189
impl Readable for ChangeSetDeserWrapper<BdkLocalChainChangeSet> {
7290
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+
7396
let mut blocks = RequiredWrapper(None);
7497
decode_tlv_stream!(reader, {
7598
(0, blocks, required),
@@ -80,6 +103,8 @@ impl Readable for ChangeSetDeserWrapper<BdkLocalChainChangeSet> {
80103

81104
impl<'a> Writeable for ChangeSetSerWrapper<'a, BdkTxGraphChangeSet<ConfirmationBlockTime>> {
82105
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), lightning::io::Error> {
106+
CHANGESET_SERIALIZATION_VERSION.write(writer)?;
107+
83108
encode_tlv_stream!(writer, {
84109
(0, ChangeSetSerWrapper(&self.0.txs), required),
85110
(2, self.0.txouts, required),
@@ -92,6 +117,11 @@ impl<'a> Writeable for ChangeSetSerWrapper<'a, BdkTxGraphChangeSet<ConfirmationB
92117

93118
impl Readable for ChangeSetDeserWrapper<BdkTxGraphChangeSet<ConfirmationBlockTime>> {
94119
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+
95125
let mut txs: RequiredWrapper<ChangeSetDeserWrapper<BTreeSet<Arc<Transaction>>>> =
96126
RequiredWrapper(None);
97127
let mut txouts: RequiredWrapper<BTreeMap<OutPoint, TxOut>> = RequiredWrapper(None);
@@ -228,13 +258,20 @@ impl Readable for ChangeSetDeserWrapper<BlockId> {
228258

229259
impl<'a> Writeable for ChangeSetSerWrapper<'a, BdkIndexerChangeSet> {
230260
fn write<W: Writer>(&self, writer: &mut W) -> Result<(), lightning::io::Error> {
261+
CHANGESET_SERIALIZATION_VERSION.write(writer)?;
262+
231263
encode_tlv_stream!(writer, { (0, ChangeSetSerWrapper(&self.0.last_revealed), required) });
232264
Ok(())
233265
}
234266
}
235267

236268
impl Readable for ChangeSetDeserWrapper<BdkIndexerChangeSet> {
237269
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+
238275
let mut last_revealed: RequiredWrapper<ChangeSetDeserWrapper<BTreeMap<DescriptorId, u32>>> =
239276
RequiredWrapper(None);
240277

0 commit comments

Comments
 (0)