ckb-network 0.105.0

ckb network implementation
Documentation
#![allow(missing_docs)]
#[macro_use]
extern crate criterion;
extern crate ckb_network;
extern crate ckb_util;

use ckb_network::{multiaddr::Multiaddr, peer_store::PeerStore, Flags, PeerId};
use criterion::{BatchSize, BenchmarkId, Criterion};

const SIZES: &[usize] = &[10_000, 20_000];

fn bench(c: &mut Criterion) {
    let mut group = c.benchmark_group("peer_store");

    for size in SIZES.iter() {
        group.bench_with_input(BenchmarkId::new("add_addr", size), size, |b, i| {
            b.iter_batched(
                || {
                    (0..*i)
                        .map(|_| {
                            format!("/ip4/255.0.0.1/tcp/42/p2p/{}", PeerId::random().to_base58())
                                .parse::<Multiaddr>()
                                .unwrap()
                        })
                        .collect::<Vec<_>>()
                },
                |addrs| {
                    let mut peer_store = PeerStore::default();
                    for addr in addrs {
                        peer_store.add_addr(addr, Flags::COMPATIBILITY).unwrap();
                    }
                },
                BatchSize::PerIteration,
            )
        });
    }

    for size in SIZES.iter() {
        group.bench_with_input(
            BenchmarkId::new("fetch_random_addrs", size),
            size,
            |b, i| {
                b.iter_batched(
                    || {
                        let addrs = (0..*i)
                            .map(|_| {
                                format!(
                                    "/ip4/255.0.0.1/tcp/42/p2p/{}",
                                    PeerId::random().to_base58()
                                )
                                .parse::<Multiaddr>()
                                .unwrap()
                            })
                            .collect::<Vec<_>>();
                        let mut peer_store = PeerStore::default();
                        for addr in addrs {
                            peer_store.add_addr(addr, Flags::COMPATIBILITY).unwrap();
                        }
                        peer_store
                    },
                    |mut peer_store| {
                        peer_store.fetch_random_addrs(*i, Flags::COMPATIBILITY);
                    },
                    BatchSize::PerIteration,
                )
            },
        );
    }
}

criterion_group!(benches, bench);
criterion_main!(benches);