Execute a swap: token_in → token_out with slippage protection
fn swap(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token_in: soroban_sdk::Address,
amount_in: i128,
min_out: i128,
) -> Result
Update pool fee rate (admin only)
fn set_fee(env: soroban_sdk::Env, fee_bps: u32) -> Result<(), SwapError>
Get spot price of token_a in terms of token_b (scaled by 1e7)
fn get_price(
env: soroban_sdk::Env,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
) -> Result
Preview swap output without executing
fn get_quote(
env: soroban_sdk::Env,
token_in: soroban_sdk::Address,
amount_in: i128,
) -> Result
Transfer admin role
fn set_admin(
env: soroban_sdk::Env,
new_admin: soroban_sdk::Address,
) -> Result<(), SwapError>
Initialize the AMM with admin
fn initialize(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
) -> Result<(), SwapError>
Get LP share balance for a user
fn lp_balance(env: soroban_sdk::Env, user: soroban_sdk::Address) -> i128
Create a new liquidity pool (admin only)
fn create_pool(
env: soroban_sdk::Env,
token_a: soroban_sdk::Address,
token_b: soroban_sdk::Address,
fee_bps: u32,
) -> Result<(), SwapError>
Withdraw accumulated protocol fees (admin only)
fn collect_fees(env: soroban_sdk::Env) -> Result<(i128, i128), SwapError>
Get current pool reserves
fn get_reserves(env: soroban_sdk::Env) -> Result<(i128, i128), SwapError>
Get total LP shares outstanding
fn total_shares(env: soroban_sdk::Env) -> i128
Add liquidity: deposit token_a and token_b, receive LP shares
fn add_liquidity(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
amount_a: i128,
amount_b: i128,
) -> Result
Get accumulated swap fees
fn accumulated_fees(env: soroban_sdk::Env) -> Result<(i128, i128), SwapError>
Remove liquidity: burn LP shares, receive proportional token_a + token_b
fn remove_liquidity(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
shares: i128,
) -> Result<(i128, i128), SwapError>