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