// This file is part of Bizinikiwi.
// Copyright (C) Parity Technologies (UK) Ltd.
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
use criterion::{criterion_group, criterion_main, Criterion};
use pezsc_statement_store::Store;
use pezsp_core::Pair;
use pezsp_statement_store::{
runtime_api::{InvalidStatement, ValidStatement, ValidateStatement},
DecryptionKey, Proof, SignatureVerificationResult, Statement, StatementSource, StatementStore,
SubmitResult, Topic,
};
use std::sync::Arc;
type Extrinsic = pezsp_runtime::OpaqueExtrinsic;
type Hash = pezsp_core::H256;
type Hashing = pezsp_runtime::traits::BlakeTwo256;
type BlockNumber = u64;
type Header = pezsp_runtime::generic::Header;
type Block = pezsp_runtime::generic::Block;
const CORRECT_BLOCK_HASH: [u8; 32] = [1u8; 32];
const STATEMENT_DATA_SIZE: usize = 256;
const INITIAL_STATEMENTS: usize = 1_000;
const NUM_THREADS: usize = 64;
const OPS_PER_THREAD: usize = 10;
const TOTAL_OPS: usize = NUM_THREADS * OPS_PER_THREAD;
#[derive(Clone)]
struct TestClient;
struct RuntimeApi {
_inner: TestClient,
}
impl pezsp_api::ProvideRuntimeApi for TestClient {
type Api = RuntimeApi;
fn runtime_api(&self) -> pezsp_api::ApiRef<'_, Self::Api> {
RuntimeApi { _inner: self.clone() }.into()
}
}
pezsp_api::mock_impl_runtime_apis! {
impl ValidateStatement for RuntimeApi {
fn validate_statement(
_source: StatementSource,
statement: Statement,
) -> std::result::Result {
match statement.verify_signature() {
SignatureVerificationResult::Valid(_) =>
Ok(ValidStatement { max_count: 100_000, max_size: 1_000_000 }),
SignatureVerificationResult::Invalid => Err(InvalidStatement::BadProof),
SignatureVerificationResult::NoSignature => {
if let Some(Proof::OnChain { block_hash, .. }) = statement.proof() {
if block_hash == &CORRECT_BLOCK_HASH {
Ok(ValidStatement { max_count: 100_000, max_size: 1_000_000 })
} else {
Err(InvalidStatement::BadProof)
}
} else {
Err(InvalidStatement::BadProof)
}
},
}
}
}
}
impl pezsp_blockchain::HeaderBackend for TestClient {
fn header(&self, _hash: Hash) -> pezsp_blockchain::Result