Other Uses & Future Work

Groth16 and PLONK verification

The infrasructure in this project is more general than the SP1 proofs, while it is optimized for it. Concretely, any gnark-based PLONK proofs can be verified using the existing code.

Additionally, the repository provides infrastructure for Groth16 verification, which can be used to consume Groth16-based proofs produced by other codebases - circom, arkworks, gnark, Risc Zero and many others.

Poseidon hashing of blobs

The current codebase provides an end-to-end example of how to use large blobs for batches of transactions.

The approach it takes is to split the public input computation of SP1 into multiple proofs, and verify the SP1 proof only after a batch of transactions occur in the Mina smart contract. Since SP1 uses SHA256 for public input hashing, this means splitting the SHA256 computation into multiple proofs.

Another approach, which would be more efficient on Mina but less efficient on SP1, would be to hash the blobs inside Mina using Mina-efficient Poseidon, and do the same on the SP1 blob inclusion proof.

gnark-based blob inclusion

We chose to use SP1 for blob inclusion for flexibility, auditability and the expectation of future improvement in performance making it the most economical way.

Another way to do this would be to implement the blob-inclusion circuits from scratch. In a high level, this includes:

  • Encoding blobs using the 2D Reed-Solomon encoding Celestia uses

  • Showing Merkle tree inclusion in the correct data roots

Native o1js prover

The current o1js prover is based on WebAssembly. A straightforward, but not trivial to do, way to gain a big boost in performance would be to run the prover natively. This will improve both the execution performance and the inherent memory limitations in WebAssembly.

Last updated