diff --git a/developers/tutorials/proof-types.mdx b/developers/tutorials/proof-types.mdx index 8c39457..5adf699 100644 --- a/developers/tutorials/proof-types.mdx +++ b/developers/tutorials/proof-types.mdx @@ -51,6 +51,34 @@ let request = client.new_request() ``` {/* */} +In addition, Boundless also supports requesting a Blake3 Groth16 proof. This proof type allows for proofs to be verified in environments where SHA2 hashing is impossible or expensive (e.g. BitVM). You can specify this in your proof request by setting the `proof_type` to `ProofType::Blake3Groth16`: +Note: Blake3 Groth16 proofs require is only supported with the `ClaimDigestMatch` predicate, meaning that you should only use this if you do not require the journal to be delivered on-chain. +{/* */} +```rust +# use alloy_primitives::utils::parse_ether; +# use boundless_market::{Client, request_builder::OfferParams}; +# use url::Url; +# async fn create_blake3_groth16_request( +# client: Client, +# program: &'static [u8], +# input: &[u8] +# ) -> anyhow::Result<()> { +let request = client.new_request() + .with_program(program) + .with_stdin(input) + .with_blake3_groth16_proof() // Request Blake3 Groth16 proof + .with_offer( + OfferParams::builder() + .min_price(parse_ether("0.001")?) + .max_price(parse_ether("0.002")?) + .timeout(1000) + .lock_timeout(1000) + ); +# Ok(()) +# } +``` +{/* */} + ## Considerations When choosing between proof types, consider: @@ -63,6 +91,14 @@ When choosing between proof types, consider: - If you only need on-chain verification, use the default merkle inclusion proof - If you need cross-chain verification or raw proof data, use Groth16 - If you need to compose the proof by verifying it within another zkVM guest program, use Groth16 + - If you don't need the journal to be authenticated, consider using the ClaimDigestMatch predicate + +### Predicate Types +When constructing a Proof Request, we can set a `Requirement` with some predicate type. The available predicate types are `DigestMatch`, `PrefixMatch`, and `ClaimDigestMatch`. +These predicates ensure that the journal of our guest program match what we expect. +Specifying the `DigestMatch` and `PrefixMatch` predicates will require delivery of the journal when a request is being fulfilled. +There are times where we are building an application that does not require the journal to be delivered on-chain. +If this is the case, `ClaimDigestMatch` will save potentially a lot of gas, since Provers will not need to submit potentially large journals on-chain. ## Example: Proof Composition using Proof Types