fn get(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
system: soroban_sdk::Symbol,
tier: soroban_sdk::Symbol,
) -> Option
fn has(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
system: soroban_sdk::Symbol,
tier: soroban_sdk::Symbol,
statement_hash: soroban_sdk::BytesN<32>,
) -> bool
fn admin(env: soroban_sdk::Env) -> soroban_sdk::Address
fn attest(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
system: soroban_sdk::Symbol,
tier: soroban_sdk::Symbol,
statement_hash: soroban_sdk::BytesN<32>,
verifier_hash: soroban_sdk::BytesN<32>,
) -> u64
fn upgrade(env: soroban_sdk::Env, new_wasm_hash: soroban_sdk::BytesN<32>)
fn version(env: soroban_sdk::Env) -> u32
fn set_admin(env: soroban_sdk::Env, new_admin: soroban_sdk::Address)
Extend instance TTL (admin/nonce). Anyone may call to keep the contract alive.
fn extend_ttl(env: soroban_sdk::Env)
fn init_admin(env: soroban_sdk::Env, admin: soroban_sdk::Address)
Extend TTL of a specific Groth16 VK (persistent storage). Anyone may call; no state changes besides TTL.
fn extend_vk_ttl(env: soroban_sdk::Env, vk_id: soroban_sdk::Symbol)
fn has_groth16_vk(env: soroban_sdk::Env, vk_id: soroban_sdk::Symbol) -> bool
fn is_initialized(env: soroban_sdk::Env) -> bool
Verify Groth16 proof against registered VK, without storing anything.
fn verify_groth16(
env: soroban_sdk::Env,
vk_id: soroban_sdk::Symbol,
public_inputs: soroban_sdk::Vec>,
proof: Groth16Proof,
) -> Result
Extend TTL of a specific attestation entry (persistent storage). Anyone may call; no state changes besides TTL.
fn extend_entry_ttl(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
system: soroban_sdk::Symbol,
tier: soroban_sdk::Symbol,
)
Register or replace a Groth16 verification key under vk_id.
This is the "universal" on-chain verification strategy for SMOL Labs: anything that can be represented as a BN254 Groth16 proof (Circom, and wrapped proofs like RISC0 receipts) can be verified here without new contracts.
fn register_groth16_vk(
env: soroban_sdk::Env,
vk_id: soroban_sdk::Symbol,
vk: Groth16VerificationKey,
)
fn get_ultrahonk_verifier(env: soroban_sdk::Env) -> Option
Set the (upgradeable) UltraHonk verifier contract address used by verify_ultrahonk_and_attest.
This is the "bridge" strategy: keep this contract as the SSOT for attestations, while delegating UltraHonk verification to a dedicated verifier contract.
fn set_ultrahonk_verifier(env: soroban_sdk::Env, verifier: soroban_sdk::Address)
Verify Groth16 proof and then store an attestation record (same schema as attest).
This keeps the existing farm-attestations contract as the SSOT for "claims", while making some claims cryptographically verified on-chain.
fn verify_groth16_and_attest(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
system: soroban_sdk::Symbol,
tier: soroban_sdk::Symbol,
statement_hash: soroban_sdk::BytesN<32>,
verifier_hash: soroban_sdk::BytesN<32>,
vk_id: soroban_sdk::Symbol,
public_inputs: soroban_sdk::Vec>,
proof: Groth16Proof,
) -> Result
Verify an UltraHonk proof via the configured verifier contract, then store an attestation record.
IMPORTANT: this verifies cryptographically on-chain (in the verifier contract), not a digest-only record.
The proof system is still identified by system, typically "NOIR".
fn verify_ultrahonk_and_attest(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
system: soroban_sdk::Symbol,
tier: soroban_sdk::Symbol,
statement_hash: soroban_sdk::BytesN<32>,
verifier_hash: soroban_sdk::BytesN<32>,
public_inputs: soroban_sdk::Bytes,
proof_bytes: soroban_sdk::Bytes,
) -> Result