zksync-wrapper-prover 0.155.8-1

ZKsync GPU wrapper prover
use super::*;

use zkevm_test_harness::boojum::{
    algebraic_props::round_function::AbsorptionModeOverwrite,
    algebraic_props::sponge::GoldilocksPoseidon2Sponge,
    cs::implementations::{
        hints::DenseVariablesCopyHint, hints::DenseWitnessCopyHint,
        polynomial_storage::SetupBaseStorage, polynomial_storage::SetupStorage,
        setup::FinalizationHintsForProver, verifier::VerificationKey,
    },
    cs::oracle::merkle_tree::MerkleTreeWithCap,
    cs::oracle::TreeHasher,
    field::{goldilocks::GoldilocksField, traits::field::PrimeField, SmallField},
};

pub struct ProverSetupStorage {
    pub(crate) source: InMemoryDataSource,

    pub(crate) compression_data: Vec<CommonCompressionData>,
    pub(crate) wrapper_compression_data: Option<WrapperCompressionData>,
    pub(crate) wrapper_setup: AsyncSetup,
}

impl ProverSetupStorage {
    pub(crate) fn new(slot_size: usize) -> Self {
        let wrapper_setup = AsyncSetup::allocate(slot_size);

        Self {
            source: InMemoryDataSource::new(),
            compression_data: vec![],
            wrapper_compression_data: None,
            wrapper_setup,
        }
    }
}

pub(crate) struct CompressionData<F: PrimeField + SmallField, H: TreeHasher<F>> {
    pub(crate) setup_base: SetupBaseStorage<F>,
    pub(crate) setup: SetupStorage<F>,
    pub(crate) setup_tree: MerkleTreeWithCap<F, H>,
    pub(crate) vk: VerificationKey<F, H>,
    pub(crate) vars_hint: DenseVariablesCopyHint,
    pub(crate) wits_hint: DenseWitnessCopyHint,
    pub(crate) finalization_hint: FinalizationHintsForProver,
}

type CommonCompressionData =
    CompressionData<GoldilocksField, GoldilocksPoseidon2Sponge<AbsorptionModeOverwrite>>;
type WrapperCompressionData =
    CompressionData<GoldilocksField, zkevm_test_harness::prover_utils::TreeHasherForWrapper>;