Contract d4a63b42550ac5e75977d6cf19bd514612521e7202bbab25bcc8ddc18c6967fd

← Back to Index 📥 Download WASM

Meta

cliver 27.0.0#5a7c5fe76530bf4248477ac812fc757146b98cc4
rssdkver 26.1.0#175aa41306f383057a8cdfc84b68d931664fc34e
rsver 1.96.0

Instances

  • CCYNJIFHJ2JANDMEL2KERXUNVO5DCKMUX5ECLPIZ7YK3J6HYHCK6JKRD

Interface

One-time init: admin, reserve token SAC, immutable Circuit-A verifying key.

fn init(
    env: soroban_sdk::Env,
    admin: soroban_sdk::Address,
    token: soroban_sdk::Address,
    vk_alpha: soroban_sdk::BytesN<96>,
    vk_beta: soroban_sdk::BytesN<192>,
    vk_gamma: soroban_sdk::BytesN<192>,
    vk_delta: soroban_sdk::BytesN<192>,
    vk_ic: soroban_sdk::Vec>,
) -> Result<(), soroban_sdk::Error>

Deposit reserve tokens into the pool's own custody.

fn deposit(
    env: soroban_sdk::Env,
    from: soroban_sdk::Address,
    amount: i128,
) -> Result<(), soroban_sdk::Error>

The contract's own custodied reserve (R).

fn reserve(env: soroban_sdk::Env) -> i128

Admin sets the immutable Circuit-B (withdrawal) verifying key.

fn set_vk_b(
    env: soroban_sdk::Env,
    vk_alpha: soroban_sdk::BytesN<96>,
    vk_beta: soroban_sdk::BytesN<192>,
    vk_gamma: soroban_sdk::BytesN<192>,
    vk_delta: soroban_sdk::BytesN<192>,
    vk_ic: soroban_sdk::Vec>,
) -> Result<(), soroban_sdk::Error>

Private exit. Verify Circuit B against the COVER-CHECKED epoch root, spend the one-time nullifier, re-check R >= S - withdrawn, then release funds.

fn withdraw(
    env: soroban_sdk::Env,
    proof_a: soroban_sdk::BytesN<96>,
    proof_b: soroban_sdk::BytesN<192>,
    proof_c: soroban_sdk::BytesN<96>,
    accepted_root: soroban_sdk::BytesN<32>,
    nullifier: soroban_sdk::BytesN<32>,
    withdraw_amount: i128,
    recipient_hash: soroban_sdk::BytesN<32>,
    recipient: soroban_sdk::Address,
    epoch: u64,
) -> Result
fn epoch_info(env: soroban_sdk::Env, epoch: u64) -> Option
fn last_epoch(env: soroban_sdk::Env) -> u64

THE GATE (solvency). Verify Circuit A, read own reserve R, require R>=S, anchor.

fn post_epoch(
    env: soroban_sdk::Env,
    proof_a: soroban_sdk::BytesN<96>,
    proof_b: soroban_sdk::BytesN<192>,
    proof_c: soroban_sdk::BytesN<96>,
    root_hash: soroban_sdk::BytesN<32>,
    s: i128,
    epoch: u64,
) -> Result

Admin pulls reserve out (demo: simulate an operator draining custody, so the next post_epoch / withdraw is rejected by the contract's own balance read).

fn admin_drain(
    env: soroban_sdk::Env,
    to: soroban_sdk::Address,
    amount: i128,
) -> Result<(), soroban_sdk::Error>
fn nullifier_used(env: soroban_sdk::Env, nullifier: soroban_sdk::BytesN<32>) -> bool

Imports

WebAssembly Text (WAT) ▶