Execute a two-leg atomic arbitrage across any supported venue.
Token flow:
amount_in of token_in from caller into contractSwap paths are derived: leg A = [token_in, token_mid], leg B = [token_mid, token_in]. venue_a / venue_b: 0 = Soroswap, 1 = Aquarius, 2 = Phoenix
fn arb(
env: soroban_sdk::Env,
caller: soroban_sdk::Address,
token_in: soroban_sdk::Address,
token_mid: soroban_sdk::Address,
amount_in: i128,
min_profit: i128,
router_a: soroban_sdk::Address,
min_out_a: i128,
venue_a: u32,
router_b: soroban_sdk::Address,
venue_b: u32,
) -> i128