Execute a swap atomically (single-path or split-order).
sub_routes is always a list of legs; a simple swap is one entry with
the full amount_in and its hop steps. Split execution uses
multiple entries.
Flow:
token_out)min_amount_outfn swap(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
token_in: soroban_sdk::Address,
token_out: soroban_sdk::Address,
sub_routes: soroban_sdk::Vec,
min_amount_out: i128,
) -> i128
Get the admin address.
fn admin(env: soroban_sdk::Env) -> soroban_sdk::Address
Upgrade the contract WASM code. Only admin can call.
fn upgrade(env: soroban_sdk::Env, new_wasm_hash: soroban_sdk::BytesN<32>)
Initialize the contract with an admin address. Must be called once after deployment.
fn initialize(env: soroban_sdk::Env, admin: soroban_sdk::Address)
Round-trip swap: base → bridge (split OK) → base (split OK) in one atomic invocation.
Funds are pulled from user and the final base_token balance is
returned to user. The contract does not retain funds after
execution.
leg_out: sub-routes from base_token to bridge_token; amount_in
must sum to amount_inleg_back: sub-routes from bridge_token to base_token;
amount_in must sum to leg_out outputmin_amount_out: minimum total base_token returned (principal +
profit floor)fn round_trip_swap(
env: soroban_sdk::Env,
user: soroban_sdk::Address,
base_token: soroban_sdk::Address,
bridge_token: soroban_sdk::Address,
amount_in: i128,
leg_out: soroban_sdk::Vec,
leg_back: soroban_sdk::Vec,
min_amount_out: i128,
) -> i128