pub trait StarkEnginewhere
<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 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§
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>
Required Methods§
Sourcefn new_challenger(&self) -> <Self::SC as StarkGenericConfig>::Challenger
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.
fn device(&self) -> &Self::PD
fn prover(&self) -> Coordinator<Self::SC, Self::PB, Self::PD>
Provided Methods§
Sourcefn max_constraint_degree(&self) -> Option<usize>
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.
fn keygen_builder(&self) -> MultiStarkKeygenBuilder<'_, Self::SC>
fn verifier(&self) -> MultiTraceStarkVerifier<'_, Self::SC>
Sourcefn set_up_keygen_builder(
&self,
keygen_builder: &mut MultiStarkKeygenBuilder<'_, Self::SC>,
airs: &[Arc<dyn AnyRap<Self::SC>>],
) -> Vec<usize>
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
Sourcefn prove_then_verify(
&self,
pk: &MultiStarkProvingKey<Self::SC>,
ctx: ProvingContext<Self::PB>,
) -> Result<Proof<Self::SC>, VerificationError>
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.
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>], )
Sourcefn run_test_impl(
&self,
airs: Vec<Arc<dyn AnyRap<Self::SC>>>,
ctx: Vec<AirProvingContext<Self::PB>>,
) -> Result<VerificationData<Self::SC>, VerificationError>
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.