Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions benches/benches/differential.rs
Original file line number Diff line number Diff line change
Expand Up @@ -987,7 +987,7 @@ fn diff_htr(c: &mut Criterion) {

// bool
group.bench_function("libssz/bool", |b| {
b.iter(|| black_box(true).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(true).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("lighthouse/bool", |b| {
b.iter(|| tree_hash::TreeHash::tree_hash_root(black_box(&true)).0)
Expand All @@ -1002,7 +1002,7 @@ fn diff_htr(c: &mut Criterion) {
// u64
let val_u64 = 0x1234_5678_9ABC_DEF0u64;
group.bench_function("libssz/u64", |b| {
b.iter(|| black_box(val_u64).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(val_u64).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("lighthouse/u64", |b| {
b.iter(|| tree_hash::TreeHash::tree_hash_root(black_box(&val_u64)).0)
Expand All @@ -1017,7 +1017,7 @@ fn diff_htr(c: &mut Criterion) {
// [u8; 32]
let val_bytes32 = [0xABu8; 32];
group.bench_function("libssz/bytes32", |b| {
b.iter(|| black_box(&val_bytes32).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&val_bytes32).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("lighthouse/bytes32", |b| {
b.iter(|| tree_hash::TreeHash::tree_hash_root(black_box(&val_bytes32)).0)
Expand Down Expand Up @@ -1149,22 +1149,22 @@ fn diff_htr_consensus_containers(c: &mut Criterion) {

let fork = make_fork();
group.bench_function("libssz/fork", |b| {
b.iter(|| black_box(&fork).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&fork).hash_tree_root(&libssz_merkle::KeccakHasher))
});

let checkpoint = make_checkpoint(42);
group.bench_function("libssz/checkpoint", |b| {
b.iter(|| black_box(&checkpoint).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&checkpoint).hash_tree_root(&libssz_merkle::KeccakHasher))
});

let eth1_data = make_eth1_data(42);
group.bench_function("libssz/eth1_data", |b| {
b.iter(|| black_box(&eth1_data).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&eth1_data).hash_tree_root(&libssz_merkle::KeccakHasher))
});

let attestation_data = make_attestation_data(42);
group.bench_function("libssz/attestation_data", |b| {
b.iter(|| black_box(&attestation_data).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&attestation_data).hash_tree_root(&libssz_merkle::KeccakHasher))
});

group.finish();
Expand Down Expand Up @@ -1283,7 +1283,7 @@ fn diff_htr_beacon_state(c: &mut Criterion) {
BenchmarkId::new("libssz", n_validators),
&state,
|b, state| {
b.iter(|| black_box(state).hash_tree_root(&libssz_merkle::Sha2Hasher));
b.iter(|| black_box(state).hash_tree_root(&libssz_merkle::KeccakHasher));
},
);
group.bench_with_input(
Expand Down
58 changes: 29 additions & 29 deletions benches/benches/hash_tree_root.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,25 @@ use ssz_bench::fixtures::{
fn htr_primitives(c: &mut Criterion) {
let mut group = c.benchmark_group("hash_tree_root/primitives");
group.bench_function("bool", |b| {
b.iter(|| black_box(true).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(true).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("u8", |b| {
b.iter(|| black_box(0xABu8).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(0xABu8).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("u16", |b| {
b.iter(|| black_box(0x1234u16).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(0x1234u16).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("u32", |b| {
b.iter(|| black_box(0x1234_5678u32).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(0x1234_5678u32).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("u64", |b| {
b.iter(|| black_box(0x1234_5678_9abc_def0u64).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(0x1234_5678_9abc_def0u64).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("u128", |b| {
b.iter(|| black_box(u128::MAX).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(u128::MAX).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("bytes32", |b| {
b.iter(|| black_box([0xabu8; 32]).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box([0xabu8; 32]).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.finish();
}
Expand All @@ -39,7 +39,7 @@ fn htr_vec_u64(c: &mut Criterion) {
let data = make_vec_u64(size);
group.throughput(Throughput::Bytes((size * 8) as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &data, |b, data| {
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::Sha2Hasher));
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::KeccakHasher));
});
}
group.finish();
Expand All @@ -52,7 +52,7 @@ fn htr_list_validator(c: &mut Criterion) {
let list = make_validator_list(size);
group.throughput(Throughput::Bytes((size * 121) as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &list, |b, list| {
b.iter(|| black_box(list).hash_tree_root(&libssz_merkle::Sha2Hasher));
b.iter(|| black_box(list).hash_tree_root(&libssz_merkle::KeccakHasher));
});
}
group.finish();
Expand All @@ -64,11 +64,11 @@ fn htr_vector_bytes32(c: &mut Criterion) {
let v1000 = make_vector_bytes32::<1000>();
group.throughput(Throughput::Bytes((100 * 32) as u64));
group.bench_function("100", |b| {
b.iter(|| black_box(&v100).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&v100).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.throughput(Throughput::Bytes((1000 * 32) as u64));
group.bench_function("1000", |b| {
b.iter(|| black_box(&v1000).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&v1000).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.finish();
}
Expand All @@ -81,33 +81,33 @@ fn htr_bitfields(c: &mut Criterion) {
64 => {
let bl = make_bitlist::<64>(64);
group.bench_with_input(BenchmarkId::new("bitlist", bits), &bl, |b, bl| {
b.iter(|| black_box(bl).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(bl).hash_tree_root(&libssz_merkle::KeccakHasher))
});
let bv = make_bitvector::<64>();
group.bench_with_input(BenchmarkId::new("bitvector", bits), &bv, |b, bv| {
b.iter(|| black_box(bv).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(bv).hash_tree_root(&libssz_merkle::KeccakHasher))
});
}
512 => {
let bv = make_bitvector_512();
group.bench_with_input(BenchmarkId::new("bitvector", bits), &bv, |b, bv| {
b.iter(|| black_box(bv).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(bv).hash_tree_root(&libssz_merkle::KeccakHasher))
});
}
2048 => {
let bl = make_bitlist_2048();
group.bench_with_input(BenchmarkId::new("bitlist", bits), &bl, |b, bl| {
b.iter(|| black_box(bl).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(bl).hash_tree_root(&libssz_merkle::KeccakHasher))
});
}
4096 => {
let bl = make_bitlist::<4096>(4096);
group.bench_with_input(BenchmarkId::new("bitlist", bits), &bl, |b, bl| {
b.iter(|| black_box(bl).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(bl).hash_tree_root(&libssz_merkle::KeccakHasher))
});
let bv = make_bitvector::<4096>();
group.bench_with_input(BenchmarkId::new("bitvector", bits), &bv, |b, bv| {
b.iter(|| black_box(bv).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(bv).hash_tree_root(&libssz_merkle::KeccakHasher))
});
}
_ => unreachable!(),
Expand All @@ -121,10 +121,10 @@ fn htr_containers(c: &mut Criterion) {
let validator = make_validator(42);
let header = make_header(42);
group.bench_function("validator", |b| {
b.iter(|| black_box(&validator).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&validator).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("beacon_block_header", |b| {
b.iter(|| black_box(&header).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&header).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.finish();
}
Expand All @@ -134,7 +134,7 @@ fn htr_unions(c: &mut Criterion) {
for variant in 0..4 {
let data = make_bench_union(variant);
group.bench_with_input(BenchmarkId::from_parameter(variant), &data, |b, data| {
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::KeccakHasher))
});
}
group.finish();
Expand All @@ -146,7 +146,7 @@ fn htr_variable_container(c: &mut Criterion) {
let data = make_variable_container(var_size);
group.throughput(Throughput::Bytes((8 + var_size + 32 + var_size * 8) as u64));
group.bench_with_input(BenchmarkId::from_parameter(var_size), &data, |b, data| {
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::KeccakHasher))
});
}
group.finish();
Expand All @@ -159,7 +159,7 @@ fn htr_nested_container(c: &mut Criterion) {
let data = make_nested_container(n);
group.throughput(Throughput::Bytes((n * 121 + 120) as u64));
group.bench_with_input(BenchmarkId::from_parameter(n), &data, |b, data| {
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::Sha2Hasher));
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::KeccakHasher));
});
}
group.finish();
Expand All @@ -171,7 +171,7 @@ fn htr_list_u64(c: &mut Criterion) {
let data = make_list_u64(size);
group.throughput(Throughput::Bytes((size * 8) as u64));
group.bench_with_input(BenchmarkId::from_parameter(size), &data, |b, data| {
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::Sha2Hasher));
b.iter(|| black_box(data).hash_tree_root(&libssz_merkle::KeccakHasher));
});
}
group.finish();
Expand All @@ -185,19 +185,19 @@ fn htr_consensus_containers(c: &mut Criterion) {
let attestation_data = make_attestation_data(42);
let pending_attestation = make_pending_attestation(42);
group.bench_function("fork", |b| {
b.iter(|| black_box(&fork).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&fork).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("checkpoint", |b| {
b.iter(|| black_box(&checkpoint).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&checkpoint).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("eth1_data", |b| {
b.iter(|| black_box(&eth1_data).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&eth1_data).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("attestation_data", |b| {
b.iter(|| black_box(&attestation_data).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&attestation_data).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.bench_function("pending_attestation", |b| {
b.iter(|| black_box(&pending_attestation).hash_tree_root(&libssz_merkle::Sha2Hasher))
b.iter(|| black_box(&pending_attestation).hash_tree_root(&libssz_merkle::KeccakHasher))
});
group.finish();
}
Expand All @@ -211,7 +211,7 @@ fn htr_beacon_state(c: &mut Criterion) {
BenchmarkId::from_parameter(n_validators),
&state,
|b, state| {
b.iter(|| black_box(state).hash_tree_root(&libssz_merkle::Sha2Hasher));
b.iter(|| black_box(state).hash_tree_root(&libssz_merkle::KeccakHasher));
},
);
}
Expand Down
8 changes: 4 additions & 4 deletions benches/benches/iai_merkle.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use iai_callgrind::{library_benchmark, library_benchmark_group, main};
use libssz_merkle::{hash_nodes, merkleize, pack, Node, Sha2Hasher};
use libssz_merkle::{hash_nodes, merkleize, pack, KeccakHasher, Node};
fn make_chunks(n: usize) -> Vec<Node> {
(0..n)
.map(|i| {
Expand All @@ -14,19 +14,19 @@ fn make_chunks(n: usize) -> Vec<Node> {
fn iai_hash_nodes() -> Node {
let a: Node = [0xaa; 32];
let b: Node = [0xbb; 32];
hash_nodes(&Sha2Hasher, &a, &b)
hash_nodes(&KeccakHasher, &a, &b)
}

#[library_benchmark]
fn iai_merkleize_64() -> Node {
let chunks = make_chunks(64);
merkleize(&Sha2Hasher, &chunks, None)
merkleize(&KeccakHasher, &chunks, None)
}

#[library_benchmark]
fn iai_merkleize_1024() -> Node {
let chunks = make_chunks(1024);
merkleize(&Sha2Hasher, &chunks, None)
merkleize(&KeccakHasher, &chunks, None)
}

#[library_benchmark]
Expand Down
10 changes: 5 additions & 5 deletions benches/benches/merkle.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
use libssz_merkle::{hash_nodes, merkleize, mix_in_length, pack, pack_bits, Node, Sha2Hasher};
use libssz_merkle::{hash_nodes, merkleize, mix_in_length, pack, pack_bits, KeccakHasher, Node};
fn make_chunks(n: usize) -> Vec<Node> {
(0..n)
.map(|i| {
Expand All @@ -15,7 +15,7 @@ fn bench_hash_nodes(c: &mut Criterion) {
let a: Node = [0xaa; 32];
let b: Node = [0xbb; 32];
group.bench_function("single", |bench| {
bench.iter(|| hash_nodes(&Sha2Hasher, black_box(&a), black_box(&b)))
bench.iter(|| hash_nodes(&KeccakHasher, black_box(&a), black_box(&b)))
});
group.finish();
}
Expand Down Expand Up @@ -52,7 +52,7 @@ fn bench_merkleize(c: &mut Criterion) {
for &n in &[1, 4, 16, 64, 256, 1024, 4096] {
let chunks = make_chunks(n);
group.bench_with_input(BenchmarkId::from_parameter(n), &chunks, |b, chunks| {
b.iter(|| merkleize(&Sha2Hasher, black_box(chunks), None));
b.iter(|| merkleize(&KeccakHasher, black_box(chunks), None));
});
}
group.finish();
Expand All @@ -73,7 +73,7 @@ fn bench_merkleize_with_limit(c: &mut Criterion) {
let chunks = make_chunks(n);
let label = format!("{n}_of_{limit}");
group.bench_with_input(BenchmarkId::new("chunks", &label), &chunks, |b, chunks| {
b.iter(|| merkleize(&Sha2Hasher, black_box(chunks), Some(limit)));
b.iter(|| merkleize(&KeccakHasher, black_box(chunks), Some(limit)));
});
}
group.finish();
Expand All @@ -83,7 +83,7 @@ fn bench_mix_in_length(c: &mut Criterion) {
let mut group = c.benchmark_group("merkle/mix_in_length");
let root: Node = [0xcc; 32];
group.bench_function("single", |b| {
b.iter(|| mix_in_length(&Sha2Hasher, black_box(&root), black_box(1_000_000)))
b.iter(|| mix_in_length(&KeccakHasher, black_box(&root), black_box(1_000_000)))
});
group.finish();
}
Expand Down
4 changes: 2 additions & 2 deletions benches/src/fixtures.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use libssz::SszEncode;
use libssz_derive::{HashTreeRoot, SszDecode, SszEncode};
use libssz_merkle::{merkleize, mix_in_length, HashTreeRoot, Node, Sha256Hasher};
use libssz_merkle::{merkleize, mix_in_length, HashTreeRoot, MerkleHasher, Node};
use libssz_types::{SszBitlist, SszBitvector, SszList, SszVector};

/// Ethereum consensus Validator (121 bytes, all fixed-size fields).
Expand Down Expand Up @@ -336,7 +336,7 @@ pub struct NestedContainer {
}

impl HashTreeRoot for NestedContainer {
fn hash_tree_root(&self, hasher: &impl Sha256Hasher) -> Node {
fn hash_tree_root(&self, hasher: &impl MerkleHasher) -> Node {
let header_root = self.header.hash_tree_root(hasher);
let validator_roots: Vec<Node> = self
.validators
Expand Down
8 changes: 4 additions & 4 deletions crates/ssz-derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -853,7 +853,7 @@ fn derive_htr_transparent(

quote! {
impl #impl_generics libssz_merkle::HashTreeRoot for #name #ty_generics #where_clause {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::Sha256Hasher) -> libssz_merkle::Node {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::MerkleHasher) -> libssz_merkle::Node {
libssz_merkle::HashTreeRoot::hash_tree_root(&#field_access, hasher)
}
}
Expand All @@ -873,7 +873,7 @@ fn derive_htr_struct(

quote! {
impl #impl_generics libssz_merkle::HashTreeRoot for #name #ty_generics #where_clause {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::Sha256Hasher) -> libssz_merkle::Node {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::MerkleHasher) -> libssz_merkle::Node {
let field_roots: [libssz_merkle::Node; #num_fields] = [
#(#field_roots,)*
];
Expand Down Expand Up @@ -961,7 +961,7 @@ fn derive_htr_progressive_container(

quote! {
impl #impl_generics libssz_merkle::HashTreeRoot for #name #ty_generics #where_clause {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::Sha256Hasher) -> libssz_merkle::Node {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::MerkleHasher) -> libssz_merkle::Node {
const ACTIVE_FIELDS: libssz_merkle::Node = [#(#active_node_bytes),*];
let chunks: [libssz_merkle::Node; #num_chunks] = [
#(#chunks,)*
Expand Down Expand Up @@ -1011,7 +1011,7 @@ fn derive_htr_union_enum(

quote! {
impl #impl_generics libssz_merkle::HashTreeRoot for #name #ty_generics #where_clause {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::Sha256Hasher) -> libssz_merkle::Node {
fn hash_tree_root(&self, hasher: &impl libssz_merkle::MerkleHasher) -> libssz_merkle::Node {
match self {
#(#variant_arms)*
}
Expand Down
Loading
Loading