Skip to main content

ExampleCircuit

Trait ExampleCircuit 

Source
pub trait ExampleCircuit: Sized {
    type Params: Args;
    type Instance: Args;

    // Required methods
    fn build(params: Self::Params, builder: &mut CircuitBuilder) -> Result<Self>;
    fn populate_witness(
        &self,
        instance: Self::Instance,
        filler: &mut WitnessFiller<'_>,
    ) -> Result<()>;

    // Provided method
    fn param_summary(params: &Self::Params) -> Option<String> { ... }
}
Expand description

Trait for standardizing circuit examples in the Binius framework.

This trait provides a common pattern for implementing circuit examples by separating:

  • Circuit parameters (Params): compile-time configuration that affects circuit structure
  • Instance data (Instance): runtime data used to populate the witness
  • Circuit building: logic to construct the circuit based on parameters
  • Witness population: logic to fill in witness values based on instance data

§Example Implementation

ⓘ
struct MyExample {
    params: MyParams,
    // Store any gadgets or wire references needed for witness population
}

#[derive(clap::Args)]
struct MyParams {
    #[arg(long)]
    max_size: usize,
}

#[derive(clap::Args)]
struct MyInstance {
    #[arg(long)]
    input_value: Option<String>,
}

impl ExampleCircuit for MyExample {
    type Params = MyParams;
    type Instance = MyInstance;

    fn build(params: MyParams, builder: &mut CircuitBuilder) -> Result<Self> {
        // Construct circuit based on parameters
        Ok(Self { params })
    }

    fn populate_witness(&self, instance: MyInstance, filler: &mut WitnessFiller) -> Result<()> {
        // Fill witness values based on instance data
        Ok(())
    }
}

§Lifecycle

  1. Parse CLI arguments to get Params and Instance
  2. Call build() with parameters to construct the circuit
  3. Build the constraint system
  4. Set up prover and verifier
  5. Call populate_witness() to fill witness values
  6. Generate and verify proof

Required Associated Types§

Source

type Params: Args

Circuit parameters that affect the structure of the circuit. These are typically compile-time constants or bounds.

Source

type Instance: Args

Instance data used to populate the witness. This represents the actual input values for a specific proof.

Required Methods§

Source

fn build(params: Self::Params, builder: &mut CircuitBuilder) -> Result<Self>

Build the circuit with the given parameters.

This method should:

  • Add witnesses, constants, and constraints to the builder
  • Store any wire references needed for witness population
  • Return a Self instance that can later populate witness values
Source

fn populate_witness( &self, instance: Self::Instance, filler: &mut WitnessFiller<'_>, ) -> Result<()>

Populate witness values for a specific instance.

This method should:

  • Process the instance data (e.g., parse inputs, compute hashes)
  • Fill all witness values using the provided filler
  • Validate that instance data is compatible with circuit parameters

Provided Methods§

Source

fn param_summary(params: &Self::Params) -> Option<String>

Generate a concise parameter summary for perfetto trace filenames.

This method should return a short string (5-10 chars max) that captures the most important parameters for this circuit configuration. Used to differentiate traces with different parameter settings.

Format suggestions:

  • Bytes: “2048b”, “4096b”
  • Counts: “10p” (permutations), “5s” (signatures)

Returns None if no meaningful parameters to include in filename.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl ExampleCircuit for Bip32Example

Source§

impl ExampleCircuit for BitcoinHeaderChainExample

Source§

impl ExampleCircuit for BitcoinP2PKHExample

Source§

impl ExampleCircuit for Blake2bExample

Source§

impl ExampleCircuit for Blake2sExample

Source§

impl ExampleCircuit for Blake3CompressExample

Source§

impl ExampleCircuit for Blake3Example

Source§

impl ExampleCircuit for EcMsmExample

Source§

impl ExampleCircuit for EthSignExample

Source§

impl ExampleCircuit for HashBasedSigExample

Source§

impl ExampleCircuit for IndependentBlake3Compressions

Source§

impl ExampleCircuit for IndependentKeccakPermutations

Source§

impl ExampleCircuit for IndependentSha256Compressions

Source§

impl ExampleCircuit for KeccakExample

Source§

impl ExampleCircuit for Sha3Example

Source§

impl ExampleCircuit for Sha3_512Example

Source§

impl ExampleCircuit for Sha256Example

Source§

impl ExampleCircuit for Sha512Example

Source§

impl ExampleCircuit for ZkLoginExample