Full atomic drain: deposit → spike → report → withdraw → recover
fn drain(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
vault: soroban_sdk::Address,
token_addr: soroban_sdk::Address,
blend_pool: soroban_sdk::Address,
deposit_amount: i128,
spike_amount: i128,
) -> i128
Recover any tokens stuck in the contract
fn recover(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
token_addr: soroban_sdk::Address,
) -> i128
fn initialize(env: soroban_sdk::Env, owner: soroban_sdk::Address)
Simple drain for vaults with existing gains — no Blend spike needed
fn drain_simple(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
vault: soroban_sdk::Address,
token_addr: soroban_sdk::Address,
deposit_amount: i128,
) -> i128