diff --git a/lighthouse/state/attestation_record.rs b/lighthouse/state/attestation_record.rs index 46f2f9ff4f..fc949b9e6d 100644 --- a/lighthouse/state/attestation_record.rs +++ b/lighthouse/state/attestation_record.rs @@ -18,7 +18,7 @@ impl Encodable for AttestationRecord { s.append(&self.shard_id); s.append_vec(&self.oblique_parent_hashes); s.append(&self.shard_block_hash); - s.append(&self.attester_bitfield); + s.append_vec(&self.attester_bitfield.to_be_vec()); // TODO: add aggregate signature } } diff --git a/lighthouse/state/block.rs b/lighthouse/state/block.rs index a65c71f7c7..d9c2c05790 100644 --- a/lighthouse/state/block.rs +++ b/lighthouse/state/block.rs @@ -47,11 +47,10 @@ impl Block { impl Encodable for Block { fn ssz_append(&self, s: &mut SszStream) { - let mut s = SszStream::new(); s.append(&self.parent_hash); s.append(&self.slot_number); s.append(&self.randao_reveal); - s.append(&self.attestations); + s.append_vec(&self.attestations); s.append(&self.pow_chain_ref); s.append(&self.active_state_root); s.append(&self.crystallized_state_root); diff --git a/ssz/src/lib.rs b/ssz/src/lib.rs index f1ab50ad2a..cf877cfff7 100644 --- a/ssz/src/lib.rs +++ b/ssz/src/lib.rs @@ -39,16 +39,18 @@ impl SszStream { self } - pub fn extend_buffer(&mut self, vec: &mut Vec) { - self.buffer.append(&mut encode_length(vec.len(), LENGTH_BYTES)); - self.buffer.append(vec); + pub fn extend_buffer(&mut self, vec: &Vec) { + self.buffer.extend_from_slice( + &encode_length(vec.len(), + LENGTH_BYTES)); + self.buffer.extend_from_slice(&vec); } /// Append some vector (list) of encoded values to the stream. - pub fn append_vec(&mut self, vec: &mut Vec) + pub fn append_vec(&mut self, vec: &Vec) where E: Encodable { - self.buffer.append(&mut encode_length(vec.len(), LENGTH_BYTES)); + self.buffer.extend_from_slice(&encode_length(vec.len(), LENGTH_BYTES)); for v in vec { v.ssz_append(self); } @@ -91,7 +93,7 @@ impl Encodable for u16 { fn ssz_append(&self, s: &mut SszStream) { let mut buf = BytesMut::with_capacity(16/8); buf.put_u16_be(*self); - s.extend_buffer(&mut buf.to_vec()); + s.extend_buffer(&buf.to_vec()); } } @@ -99,7 +101,7 @@ impl Encodable for u32 { fn ssz_append(&self, s: &mut SszStream) { let mut buf = BytesMut::with_capacity(32/8); buf.put_u32_be(*self); - s.extend_buffer(&mut buf.to_vec()); + s.extend_buffer(&buf.to_vec()); } } @@ -107,13 +109,13 @@ impl Encodable for u64 { fn ssz_append(&self, s: &mut SszStream) { let mut buf = BytesMut::with_capacity(64/8); buf.put_u64_be(*self); - s.extend_buffer(&mut buf.to_vec()); + s.extend_buffer(&buf.to_vec()); } } impl Encodable for H256 { fn ssz_append(&self, s: &mut SszStream) { - s.extend_buffer(&mut self.to_vec()); + s.extend_buffer(&self.to_vec()); } } @@ -188,7 +190,10 @@ mod tests { three: 100 }; - let e = encode(&t); + let mut s = SszStream::new(); + s.append(&t); + let e = s.drain(); + assert_eq!(e[0..4], [0, 0, 0, 4]); assert_eq!(e[4..8], [0, 0, 0, 1]); assert_eq!(e[8..12], [0, 0, 0, 32]);