Skip to main content

Sub Circuits

A sub-circuit is similar to a component in Circom. It is a segment of a circuit that is called repeatedly and can be packaged into a sub-circuit.

The sub-circuit API in Go is introduced in APIs.

The current Rust frontend only supports sub-circuits equivalent to SubCircuitSimpleFunc in Go. The function definition is as follows:

impl<C: Config> RootBuilder<C> {
pub fn memorized_simple_call<F: Fn(&mut Self, &Vec<Variable>) -> Vec<Variable> + 'static>(
&mut self,
f: F,
inputs: &[Variable],
) -> Vec<Variable> {
// implementation
}
}

An example of its usage in the Keccak circuit can be found at keccak_gf2. In this example, the sub-circuit call is equivalent to let out = compute_keccak(&self.p[i].to_vec());.