mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-08 09:16:00 +00:00
@@ -1,6 +1,6 @@
|
||||
use super::types::attestation_record::MIN_SSZ_ATTESTION_RECORD_LENGTH as MIN_LENGTH;
|
||||
use super::ssz::LENGTH_BYTES;
|
||||
use super::ssz::decode::decode_length;
|
||||
use super::ssz::LENGTH_BYTES;
|
||||
use super::types::attestation_record::MIN_SSZ_ATTESTION_RECORD_LENGTH as MIN_LENGTH;
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub enum AttestationSplitError {
|
||||
@@ -9,9 +9,10 @@ pub enum AttestationSplitError {
|
||||
|
||||
/// Given some ssz slice, find the bounds of each serialized AttestationRecord and return a vec of
|
||||
/// slices point to each.
|
||||
pub fn split_all_attestations<'a>(full_ssz: &'a [u8], index: usize)
|
||||
-> Result<Vec<&'a [u8]>, AttestationSplitError>
|
||||
{
|
||||
pub fn split_all_attestations<'a>(
|
||||
full_ssz: &'a [u8],
|
||||
index: usize,
|
||||
) -> Result<Vec<&'a [u8]>, AttestationSplitError> {
|
||||
let mut v = vec![];
|
||||
let mut index = index;
|
||||
while index < full_ssz.len() - 1 {
|
||||
@@ -24,9 +25,10 @@ pub fn split_all_attestations<'a>(full_ssz: &'a [u8], index: usize)
|
||||
|
||||
/// Given some ssz slice, find the bounds of one serialized AttestationRecord
|
||||
/// and return a slice pointing to that.
|
||||
pub fn split_one_attestation(full_ssz: &[u8], index: usize)
|
||||
-> Result<(&[u8], usize), AttestationSplitError>
|
||||
{
|
||||
pub fn split_one_attestation(
|
||||
full_ssz: &[u8],
|
||||
index: usize,
|
||||
) -> Result<(&[u8], usize), AttestationSplitError> {
|
||||
if full_ssz.len() < MIN_LENGTH {
|
||||
return Err(AttestationSplitError::TooShort);
|
||||
}
|
||||
@@ -34,15 +36,11 @@ pub fn split_one_attestation(full_ssz: &[u8], index: usize)
|
||||
let hashes_len = decode_length(full_ssz, index + 10, LENGTH_BYTES)
|
||||
.map_err(|_| AttestationSplitError::TooShort)?;
|
||||
|
||||
let bitfield_len = decode_length(
|
||||
full_ssz, index + hashes_len + 46,
|
||||
LENGTH_BYTES)
|
||||
let bitfield_len = decode_length(full_ssz, index + hashes_len + 46, LENGTH_BYTES)
|
||||
.map_err(|_| AttestationSplitError::TooShort)?;
|
||||
|
||||
// Subtract one because the min length assumes 1 byte of bitfield
|
||||
let len = MIN_LENGTH - 1
|
||||
+ hashes_len
|
||||
+ bitfield_len;
|
||||
let len = MIN_LENGTH - 1 + hashes_len + bitfield_len;
|
||||
|
||||
if full_ssz.len() < index + len {
|
||||
return Err(AttestationSplitError::TooShort);
|
||||
@@ -53,17 +51,10 @@ pub fn split_one_attestation(full_ssz: &[u8], index: usize)
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use super::super::types::{
|
||||
AttestationRecord,
|
||||
Hash256,
|
||||
Bitfield,
|
||||
};
|
||||
use super::super::bls::AggregateSignature;
|
||||
use super::super::ssz::{
|
||||
SszStream,
|
||||
Decodable,
|
||||
};
|
||||
use super::super::ssz::{Decodable, SszStream};
|
||||
use super::super::types::{AttestationRecord, Bitfield, Hash256};
|
||||
use super::*;
|
||||
|
||||
fn get_two_records() -> Vec<AttestationRecord> {
|
||||
let a = AttestationRecord {
|
||||
@@ -95,7 +86,6 @@ mod tests {
|
||||
let a = ars[0].clone();
|
||||
let b = ars[1].clone();
|
||||
|
||||
|
||||
/*
|
||||
* Test split one
|
||||
*/
|
||||
@@ -104,8 +94,7 @@ mod tests {
|
||||
let ssz = ssz_stream.drain();
|
||||
let (a_ssz, i) = split_one_attestation(&ssz, 0).unwrap();
|
||||
assert_eq!(i, ssz.len());
|
||||
let (decoded_a, _) = AttestationRecord::ssz_decode(a_ssz, 0)
|
||||
.unwrap();
|
||||
let (decoded_a, _) = AttestationRecord::ssz_decode(a_ssz, 0).unwrap();
|
||||
assert_eq!(a, decoded_a);
|
||||
|
||||
/*
|
||||
@@ -116,12 +105,8 @@ mod tests {
|
||||
ssz_stream.append(&b);
|
||||
let ssz = ssz_stream.drain();
|
||||
let ssz_vec = split_all_attestations(&ssz, 0).unwrap();
|
||||
let (decoded_a, _) =
|
||||
AttestationRecord::ssz_decode(ssz_vec[0], 0)
|
||||
.unwrap();
|
||||
let (decoded_b, _) =
|
||||
AttestationRecord::ssz_decode(ssz_vec[1], 0)
|
||||
.unwrap();
|
||||
let (decoded_a, _) = AttestationRecord::ssz_decode(ssz_vec[0], 0).unwrap();
|
||||
let (decoded_b, _) = AttestationRecord::ssz_decode(ssz_vec[1], 0).unwrap();
|
||||
assert_eq!(a, decoded_a);
|
||||
assert_eq!(b, decoded_b);
|
||||
|
||||
@@ -136,4 +121,3 @@ mod tests {
|
||||
assert!(split_all_attestations(&ssz, 0).is_err());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user