use std::sync::atomic::AtomicBool;
use snarkvm_dpc::{testnet2::Testnet2, BlockTemplate, Network, PoSWScheme};
use criterion::{criterion_group, criterion_main, Criterion};
use rand::SeedableRng;
use rand_chacha::ChaChaRng;
fn marlin_posw(c: &mut Criterion) {
let mut group = c.benchmark_group("Proof of Succinct Work: Marlin");
group.sample_size(10);
let rng = &mut ChaChaRng::seed_from_u64(1234567);
let block = Testnet2::genesis_block();
let block_template = BlockTemplate::new(
block.previous_block_hash(),
block.height(),
block.timestamp(),
block.difficulty_target(),
block.cumulative_weight(),
block.previous_ledger_root(),
block.transactions().clone(),
block.to_coinbase_transaction().unwrap().to_records().next().unwrap(),
);
group.bench_function("mine", |b| {
b.iter(|| {
Testnet2::posw().mine(&block_template, &AtomicBool::new(false), rng).unwrap();
});
});
group.bench_function("verify", |b| {
b.iter(|| {
let _is_valid = Testnet2::posw().verify_from_block_header(Testnet2::genesis_block().header());
});
});
}
criterion_group! {
name = posw;
config = Criterion::default().sample_size(10);
targets = marlin_posw
}
criterion_main!(posw);