Add an Ed25519 admin/session signer. Adding a passkey (Secp256r1)
signer post-construction (which needs its pubkey persisted) lands in
A3 Phase 2; the Phase-1 passkey admin is set at __constructor.
fn add_signer(
env: soroban_sdk::Env,
signer: SignerKey,
is_admin: bool,
) -> Result<(), soroban_sdk::Error>
fn get_policy(env: soroban_sdk::Env) -> Option
fn set_policy(env: soroban_sdk::Env, policy: Policy) -> Result<(), soroban_sdk::Error>
fn get_session(
env: soroban_sdk::Env,
session_id: soroban_sdk::BytesN<32>,
) -> Option
fn get_signers(env: soroban_sdk::Env) -> soroban_sdk::Vec
Enforce policy on every authorized call.
Order is deliberate: cheap rejections first, signature verify last so a bad-policy call does not burn ed25519 cycles. Admin signers bypass the policy entirely (emergency-unwind path).
fn __check_auth(
env: soroban_sdk::Env,
signature_payload: soroban_sdk::BytesN<32>,
auth_payload: AuthPayload,
auth_contexts: soroban_sdk::Vec,
) -> Result<(), soroban_sdk::Error>
Deployment-time initialization. Sets the first admin atomically during contract creation so no public uninitialized takeover window exists.
fn __constructor(env: soroban_sdk::Env, admin: Signer)
fn remove_signer(
env: soroban_sdk::Env,
signer: SignerKey,
) -> Result<(), soroban_sdk::Error>
fn revoke_session(
env: soroban_sdk::Env,
session_id: soroban_sdk::BytesN<32>,
) -> Result<(), soroban_sdk::Error>
fn rotate_session(
env: soroban_sdk::Env,
old_session_id: soroban_sdk::BytesN<32>,
new_session_id: soroban_sdk::BytesN<32>,
new_pubkey: soroban_sdk::BytesN<32>,
new_policy: Policy,
) -> Result<(), soroban_sdk::Error>
fn register_session(
env: soroban_sdk::Env,
session_id: soroban_sdk::BytesN<32>,
pubkey: soroban_sdk::BytesN<32>,
policy: Policy,
) -> Result<(), soroban_sdk::Error>
fn get_oracle_aggregator(env: soroban_sdk::Env) -> Option
Admin-only setter for the Reflector aggregator contract address used
by the swap-auth path. Until set, every swap auth fails closed with
Error::OracleStale. Operators MUST verify the address against
https://reflector.network/docs before invoking this on mainnet —
pointing at the wrong contract is a slippage-bypass vector.
fn set_oracle_aggregator(
env: soroban_sdk::Env,
aggregator: soroban_sdk::Address,
) -> Result<(), soroban_sdk::Error>