<h2>SNARKs</h2>
<p>To build a zkrollup, we want the ability to verify SNARKs on bitcoin. There are broadly three families of SNARKs in real world use today: those based on pairings and using a trusted setup (Groth16, Plonk, etc.), those based merkle trees and error correcting codes (STARKs, Plonky2, etc.) and those based on Bulletproofs (Halo2). They vary on a bunch of different dimensions (proof size, prover performance, cryptographic assumptions, etc.), and most of this variance comes down to which Polynomial Commitment Scheme (PCS) the protocol uses.</p>
<p>The PCS used by pairing based schemes (ignoring Groth16 since it works differently) is typically KZG which has small constant proof size and verification time. The PCS used by STARKs and other code based SNARKs is typically FRI which has a very fast prover, large <code>O(log^2 n)</code> sized proofs, and similar verifier complexity. Bulletproofs (and BP++) is equivalent to a PCS and results in much smaller proofs than FRI, slightly larger than KZG, but unfortunately has <code>O(n)</code> verifier complexity. People sometimes describe this by saying that Bulletproofs are not &quot;work saving.&quot; As a result people tend to use Bulletproofs for small statements, where we want small proofs but don't want a trusted setup (e.g. range proofs).</p>
<p>However, people do use Bulletproof based schemes to construct work saving SNARKs using either accumulation (Halo) or folding (Nova, ProtoStar, etc.). The technical details of how these differ is beyond the scope of the question (usually want folding), but in both cases they use recursion and the algebraic structure of the proofs to combine them so that their combination is valid only if the initial proofs were also valid. Since these SNARKs built out of Bulletproofs and accumulation/folding use recursion, we typically say that they are not &quot;monolithic&quot; SNARKs in order to distinguish them from e.g. Plonk and STARKs. There are no monolithic work saving SNARKs built using Bulletproofs and there are some impossibility results along these lines.</p>
<h2>SNARKs on Bitcoin</h2>
<p>So in short, yes it is possible to construct work saving SNARKs with Bulletproofs and we could verify these on bitcoin using BitVM. These proofs will have much smaller proofs than FRI based SNARKs and no trusted setup. Concretely, the verifier will be slower and more importantly the bitcoin script for the verifier will be much larger than the script for pairing based SNARKs or STARKs with OP_CAT.</p>
<p>This is because a Bulletproof verifier requires a very large amount of field arithmetic in a big field, which is ridiculously expensive in bitcoin script. We can get away with e.g. Groth16 or Plonk in BitVM because the amount of field arithmetic is simply very small. STARKs are more efficient in bitcoin script <em>given OP_CAT</em> because so much of the verifier complexity involves verifying merkle paths which become almost free given OP_CAT and because they can use small fields.</p>
<p>Apart from quantum resistance, a Bulletproof + Folding based SNARK would arguably be the best suited to bitcoin since it has small proofs, no trusted setup, and efficient batch verification, but unfortunately it is unlikely to be feasible without more softforks.</p>

CC BY-SA 4.0
2024-08-01T15:02:17.010Z
Thanks for the in-depth answer! What do FRI and KZG stand for?
Murch
CC BY-SA 4.0
2024-08-01T15:43:55.053Z
Thanks for the great answer, Liam!

Murch, KZG stands for "Kate, Zaverucha, Goldberg", who are the authors of the scheme. FRI stands for "Fast Reed-Solomon IOP (Interactive Oracle Proof) of Proximity"
Alex
CC BY-SA 4.0
2024-07-31T01:21:19.477Z
2024-07-31T01:21:19.477Z
Liam Eagen
<p>My understanding is that the primary usecase for Bulletproof (BP) &amp; Bulletproof++ (BP++) in elements is for range proofs for confidential transactions/confidential assets.</p>
<p>There seems to be a lot of interest in validating  Zero-knowledge proofs (ZKPs) in Script, usually to encumber some Bitcoin with the result of some offchain computation. People are playing with (Scalable, Transparent ARgument of Knowledge) STARK verifiers using OP_CAT, trying to do an optimistic verification of SNARKs with BitVM. Bulletproofs are much more compact, and are getting some exploration on Liquid. Could be interesting for Bitcoin if they're useful.</p>
<p>I haven't been able to get all the way through the <a href="https://eprint.iacr.org/2022/510" rel="nofollow noreferrer">BP++ paper</a> yet, but it sounds like you could use it for doing arbitrary ZKPs for things like arithmetic circuits. If that's the case, could BP++ be a way to do non-interactive proofs for something like a rollup (the way snarks/starks are being used in other ecosystems)?</p>

CC BY-SA 4.0
2024-07-30T18:57:49.670Z
If you are looking to answer this question, you may find this Twitter conversation interesting: https://x.com/murchandamus/status/1818354059461709902
Murch
<cryptography><confidential-transactions><zero-knowledge><bulletproofs><rollup>
Bulletproof++ as generic ZKP à la SNARKs?
Alex
# Bulletproof++ as generic ZKP à la SNARKs?

(Asked by: username_0 on 2023-09-07)

My understanding is that the primary usecase for Bulletproof (BP) & Bulletproof++ (BP++) in elements is for range proofs for confidential transactions/confidential assets.

There seems to be a lot of interest in validating Zero-knowledge proofs (ZKPs) in Script, usually to encumber some Bitcoin with the result of some offchain computation. People are playing with (Scalable, Transparent ARgument of Knowledge) STARK verifiers using OP\_CAT, trying to do an optimistic verification of SNARKs with BitVM. Bulletproofs are much more compact, and are getting some exploration on Liquid. Could be interesting for Bitcoin if they're useful.

I haven't been able to get all the way through the [BP++ paper](https://eprint.iacr.org/2022/510) yet, but it sounds like you could use it for doing arbitrary ZKPs for things like arithmetic circuits. If that's the case, could BP++ be a way to do non-interactive proofs for something like a rollup (the way snarks/starks are being used in other ecosystems)?

**Tags:** cryptography, confidential-transactions, zero-knowledge, bulletproofs, rollup

> **Comments:**
> **username_1**: If you are looking to answer this question, you may find this Twitter conversation interesting: https://x.com/murchandamus/status/1818354059461709902  

---

## 1 answers

### Answer by username_2 on 2024-07-31. Score: 4 | Accepted answer

## SNARKs

To build a zkrollup, we want the ability to verify SNARKs on bitcoin. There are broadly three families of SNARKs in real world use today: those based on pairings and using a trusted setup (Groth16, Plonk, etc.), those based merkle trees and error correcting codes (STARKs, Plonky2, etc.) and those based on Bulletproofs (Halo2). They vary on a bunch of different dimensions (proof size, prover performance, cryptographic assumptions, etc.), and most of this variance comes down to which Polynomial Commitment Scheme (PCS) the protocol uses.

The PCS used by pairing based schemes (ignoring Groth16 since it works differently) is typically KZG which has small constant proof size and verification time. The PCS used by STARKs and other code based SNARKs is typically FRI which has a very fast prover, large `O(log^2 n)` sized proofs, and similar verifier complexity. Bulletproofs (and BP++) is equivalent to a PCS and results in much smaller proofs than FRI, slightly larger than KZG, but unfortunately has `O(n)` verifier complexity. People sometimes describe this by saying that Bulletproofs are not "work saving." As a result people tend to use Bulletproofs for small statements, where we want small proofs but don't want a trusted setup (e.g. range proofs).

However, people do use Bulletproof based schemes to construct work saving SNARKs using either accumulation (Halo) or folding (Nova, ProtoStar, etc.). The technical details of how these differ is beyond the scope of the question (usually want folding), but in both cases they use recursion and the algebraic structure of the proofs to combine them so that their combination is valid only if the initial proofs were also valid. Since these SNARKs built out of Bulletproofs and accumulation/folding use recursion, we typically say that they are not "monolithic" SNARKs in order to distinguish them from e.g. Plonk and STARKs. There are no monolithic work saving SNARKs built using Bulletproofs and there are some impossibility results along these lines.

## SNARKs on Bitcoin

So in short, yes it is possible to construct work saving SNARKs with Bulletproofs and we could verify these on bitcoin using BitVM. These proofs will have much smaller proofs than FRI based SNARKs and no trusted setup. Concretely, the verifier will be slower and more importantly the bitcoin script for the verifier will be much larger than the script for pairing based SNARKs or STARKs with OP\_CAT.

This is because a Bulletproof verifier requires a very large amount of field arithmetic in a big field, which is ridiculously expensive in bitcoin script. We can get away with e.g. Groth16 or Plonk in BitVM because the amount of field arithmetic is simply very small. STARKs are more efficient in bitcoin script *given OP\_CAT* because so much of the verifier complexity involves verifying merkle paths which become almost free given OP\_CAT and because they can use small fields.

Apart from quantum resistance, a Bulletproof + Folding based SNARK would arguably be the best suited to bitcoin since it has small proofs, no trusted setup, and efficient batch verification, but unfortunately it is unlikely to be feasible without more softforks.

> **Comments:**
> **username_1**: Thanks for the in-depth answer! What do FRI and KZG stand for?  
> **username_0**: Thanks for the great answer, username_2!  username_1, KZG stands for "Kate, Zaverucha, Goldberg", who are the authors of the scheme. FRI stands for "Fast Reed-Solomon IOP (Interactive Oracle Proof) of Proximity"  

---

