Skip to main content

createzkSNARKProof

Creates a simplified zkSNARK proof demonstrating the correct execution of a general computation. This version is optimized for resource-constrained devices like the ESP32.

The proof attests that someone possesses secret data (privateData), executed a specific circuit (computation) with this data and publicInputs, and obtained the correct result, all without revealing the privateData.

Parameters

ParameterTypeDescription
privateDataconst std::vector<uint8_t>&The secret data known only to the prover (e.g., a private key).
publicInputsconst std::vector<uint8_t>&Public inputs known to both prover and verifier (e.g., a hash).
circuitconst String&A description identifying the computation being proven (simplified).
outProofzkSNARKProof&Output: The generated zkSNARK proof structure.

Return Value

  • bool: Returns true if the proof was created successfully, false otherwise.

Example Code (main.cpp)

#include <Arduino.h>
#include <vector>
#include "Infratic-lib.h" // Assume zkSNARKProof struct is defined here

// This function does not require network connectivity.
Infratic solana(""); // RPC URL not needed

void setup() {
Serial.begin(115200);
delay(1000);

Serial.println("\n=== createzkSNARKProof Example ===");

// Hypothetical data for proving "knowledge of x such that x^2 = 9"
std::vector<uint8_t> privateData = { 0x03 }; // Secret witness: x = 3
std::vector<uint8_t> publicInputs = { 0x09 }; // Public input: result = 9
String circuit = "simple_square_circuit"; // Identifier for the circuit used

zkSNARKProof proof; // This struct is defined in Infratic-lib.h

Serial.println("Creating simplified zkSNARK proof...");

if (solana.createzkSNARKProof(privateData, publicInputs, circuit, proof)) {
Serial.println("✅ zkSNARK proof created successfully!");
} else {
Serial.println("❌ Failed to create zkSNARK proof.");
}
}

void loop() {
// Can be left empty
}