StarkEngine

Trait StarkEngine 

Source
pub trait StarkEngine{
    type SC: StarkGenericConfig;
    type PB: ProverBackend<Val = <<<Self::SC as StarkGenericConfig>::Pcs as Pcs<<Self::SC as StarkGenericConfig>::Challenge, <Self::SC as StarkGenericConfig>::Challenger>>::Domain as PolynomialSpace>::Val, Challenge = <Self::SC as StarkGenericConfig>::Challenge, Commitment = <<Self::SC as StarkGenericConfig>::Pcs as Pcs<<Self::SC as StarkGenericConfig>::Challenge, <Self::SC as StarkGenericConfig>::Challenger>>::Commitment, Challenger = <Self::SC as StarkGenericConfig>::Challenger>
       where <Self::PB as ProverBackend>::OpeningProof: Into<OpeningProof<<<Self::SC as StarkGenericConfig>::Pcs as Pcs<<Self::SC as StarkGenericConfig>::Challenge, <Self::SC as StarkGenericConfig>::Challenger>>::Proof, <Self::SC as StarkGenericConfig>::Challenge>>,
             <Self::PB as ProverBackend>::RapPartialProof: Into<Option<<<Self::SC as StarkGenericConfig>::RapPhaseSeq as RapPhaseSeq<<<<Self::SC as StarkGenericConfig>::Pcs as Pcs<<Self::SC as StarkGenericConfig>::Challenge, <Self::SC as StarkGenericConfig>::Challenger>>::Domain as PolynomialSpace>::Val, <Self::SC as StarkGenericConfig>::Challenge, <Self::SC as StarkGenericConfig>::Challenger>>::PartialProof>>;
    type PD: ProverDevice<Self::PB> + DeviceDataTransporter<Self::SC, Self::PB>;

Show 13 methods // Required methods fn config(&self) -> &Self::SC; fn new_challenger(&self) -> <Self::SC as StarkGenericConfig>::Challenger; fn device(&self) -> &Self::PD; fn prover(&self) -> Coordinator<Self::SC, Self::PB, Self::PD>; // Provided methods fn max_constraint_degree(&self) -> Option<usize> { ... } fn keygen_builder(&self) -> MultiStarkKeygenBuilder<'_, Self::SC> { ... } fn verifier(&self) -> MultiTraceStarkVerifier<'_, Self::SC> { ... } fn set_up_keygen_builder( &self, keygen_builder: &mut MultiStarkKeygenBuilder<'_, Self::SC>, airs: &[Arc<dyn AnyRap<Self::SC>>], ) -> Vec<usize> { ... } fn prove_then_verify( &self, pk: &MultiStarkProvingKey<Self::SC>, ctx: ProvingContext<Self::PB>, ) -> Result<Proof<Self::SC>, VerificationError> { ... } fn prove( &self, pk: &DeviceMultiStarkProvingKey<Self::PB>, ctx: ProvingContext<Self::PB>, ) -> Proof<Self::SC> { ... } fn verify( &self, vk: &MultiStarkVerifyingKey<Self::SC>, proof: &Proof<Self::SC>, ) -> Result<(), VerificationError> { ... } fn debug( &self, airs: &[Arc<dyn AnyRap<Self::SC>>], pk: &[StarkProvingKey<Self::SC>], proof_inputs: &[AirProofRawInput<<<<Self::SC as StarkGenericConfig>::Pcs as Pcs<<Self::SC as StarkGenericConfig>::Challenge, <Self::SC as StarkGenericConfig>::Challenger>>::Domain as PolynomialSpace>::Val>], ) { ... } fn run_test_impl( &self, airs: Vec<Arc<dyn AnyRap<Self::SC>>>, ctx: Vec<AirProvingContext<Self::PB>>, ) -> Result<VerificationData<Self::SC>, VerificationError> { ... }
}
Expand description

A helper trait to collect the different steps in multi-trace STARK keygen and proving. Currently this trait is CPU specific.

Required Associated Types§

Required Methods§

Source

fn config(&self) -> &Self::SC

Stark config

Source

fn new_challenger(&self) -> <Self::SC as StarkGenericConfig>::Challenger

Creates a new challenger with a deterministic state. Creating new challenger for prover and verifier separately will result in them having the same starting state.

Source

fn device(&self) -> &Self::PD

Source

fn prover(&self) -> Coordinator<Self::SC, Self::PB, Self::PD>

Provided Methods§

Source

fn max_constraint_degree(&self) -> Option<usize>

During keygen, the circuit may be optimized but it will try to keep the constraint degree at most this value.

Source

fn keygen_builder(&self) -> MultiStarkKeygenBuilder<'_, Self::SC>

Source

fn verifier(&self) -> MultiTraceStarkVerifier<'_, Self::SC>

Source

fn set_up_keygen_builder( &self, keygen_builder: &mut MultiStarkKeygenBuilder<'_, Self::SC>, airs: &[Arc<dyn AnyRap<Self::SC>>], ) -> Vec<usize>

Add AIRs and get AIR IDs

Source

fn prove_then_verify( &self, pk: &MultiStarkProvingKey<Self::SC>, ctx: ProvingContext<Self::PB>, ) -> Result<Proof<Self::SC>, VerificationError>

As a convenience, this function also transports the proving key from host to device. Note that the Self::prove function starts from a DeviceMultiStarkProvingKey, which should be used if the proving key is already cached in device memory.

Source

fn prove( &self, pk: &DeviceMultiStarkProvingKey<Self::PB>, ctx: ProvingContext<Self::PB>, ) -> Proof<Self::SC>

Source

fn verify( &self, vk: &MultiStarkVerifyingKey<Self::SC>, proof: &Proof<Self::SC>, ) -> Result<(), VerificationError>

Source

fn debug( &self, airs: &[Arc<dyn AnyRap<Self::SC>>], pk: &[StarkProvingKey<Self::SC>], proof_inputs: &[AirProofRawInput<<<<Self::SC as StarkGenericConfig>::Pcs as Pcs<<Self::SC as StarkGenericConfig>::Challenge, <Self::SC as StarkGenericConfig>::Challenger>>::Domain as PolynomialSpace>::Val>], )

Source

fn run_test_impl( &self, airs: Vec<Arc<dyn AnyRap<Self::SC>>>, ctx: Vec<AirProvingContext<Self::PB>>, ) -> Result<VerificationData<Self::SC>, VerificationError>

Runs a single end-to-end test for a given set of chips and traces partitions. This includes proving/verifying key generation, creating a proof, and verifying the proof.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<H> StarkEngine for BabyBearByteHashEngine<H>
where H: CryptographicHasher<u8, [u8; 32]> + Clone + Send + Sync,

Source§

impl<P> StarkEngine for BabyBearPermutationEngine<P>

Source§

impl<P> StarkEngine for BabyBearPermutationRootEngine<P>

Source§

impl<P> StarkEngine for GoldilocksPermutationEngine<P>