diff --git a/src/blockdata/witness.rs b/src/blockdata/witness.rs index c1fa40f47a..109fefd5e3 100644 --- a/src/blockdata/witness.rs +++ b/src/blockdata/witness.rs @@ -13,6 +13,8 @@ use crate::VarInt; #[cfg(feature = "serde")] use serde; +use serde::ser::SerializeSeq; + /// The Witness is the data used to unlock bitcoins since the [segwit upgrade](https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki) /// @@ -282,8 +284,13 @@ impl serde::Serialize for Witness { where S: serde::Serializer, { - let vec: Vec<_> = self.to_vec(); - serde::Serialize::serialize(&vec, serializer) + let mut seq = serializer.serialize_seq(Some(self.witness_elements))?; + + for elem in self.iter() { + seq.serialize_element(&elem)?; + } + + seq.end() } } #[cfg(feature = "serde")]