lighthouse-pulse/eth2/utils/ssz/src/lib.rs

37 lines
983 B
Rust
Raw Normal View History

2018-08-09 03:56:58 +00:00
/*
* This is a WIP of implementing an alternative
2018-08-09 03:56:58 +00:00
* serialization strategy. It attempts to follow Vitalik's
* "simpleserialize" format here:
* https://github.com/ethereum/beacon_chain/blob/master/beacon_chain/utils/simpleserialize.py
2018-08-09 03:56:58 +00:00
*
* This implementation is not final and would almost certainly
* have issues.
*/
extern crate bytes;
extern crate ethereum_types;
pub mod decode;
pub mod encode;
2018-12-04 20:37:12 +00:00
pub mod tree_hash;
mod impl_decode;
mod impl_encode;
2018-12-04 20:37:12 +00:00
mod impl_tree_hash;
2018-09-11 10:17:54 +00:00
pub use crate::decode::{decode_ssz, decode_ssz_list, Decodable, DecodeError};
pub use crate::encode::{Encodable, SszStream};
2019-01-24 04:47:28 +00:00
pub use crate::tree_hash::{hash, merkle_hash, TreeHash};
2018-08-09 03:56:58 +00:00
2018-09-18 08:47:25 +00:00
pub const LENGTH_BYTES: usize = 4;
pub const MAX_LIST_SIZE: usize = 1 << (4 * 8);
/// Convenience function to SSZ encode an object supporting ssz::Encode.
pub fn ssz_encode<T>(val: &T) -> Vec<u8>
where
T: Encodable,
{
let mut ssz_stream = SszStream::new();
ssz_stream.append(val);
ssz_stream.drain()
}