Swaps is optional - the first surface deferred if the cycle tightens. The core (connect, gasless pay, gas-in-token, batch, sessions, social/email login, React Native) does not depend on it.
Swaps - cut decision
The EVM/Stellar seam. The facilitator’s existing/swap/* rail is the EVM Calibur (EIP-7702)
path: /swap/submit consumes an EIP-712 batchSignature from the payer’s EVM wallet, not the
SDK’s Soroban BuckspaySigner. quoteSwap is signer-agnostic and ships end-to-end; the swap
submit leg needs the EVM wallet path (the app BFF -> /swap/submit).
Decided: KEEP - 2026-06-30As KEPT (current state):
BuckspayClient.quoteSwapships end-to-end (delegates to/swap/quote, maps toSwapQuote).BuckspayClient.swapenforces theminOutfloor before submit and fails closed (SWAP_FAILED) until the EVM wallet submit path (app BFF ->/swap/submit) is wired; the full submit leg / a native Stellar (Soroswap) rail is the future swap work.buckspayFacilitator({ swapChain })exposesquoteSwap/swap; withoutswapChainboth are omitted.docs/examples/14-swap.tsand the gatedswap.e2e.test.tscover the quote path.
Receipt.chain widening, Relayer.quoteSwap?/swap?,
the BuckspayClient.quoteSwap/swap methods, the swapChain option, docs/examples/14-swap.ts,
the gated swap.e2e.test.ts, and this section’s KEEP detail - and move swaps to a native DEX /
Soroswap rail on the Stellar side (removing the EVM seam).
