| Feature | Native Stellar mechanism | SDK surface | Example | Guide |
|---|---|---|---|---|
| Gasless (sponsored) | sponsor fee-bump (CAP-15) + sponsored reserves (CAP-33) | gas: { mode: "sponsored" } | 03-gasless-sponsored.ts | Gasless modes |
| Passkey smart account | secp256r1 in __check_auth (CAP-51) | @buckspay/accounts/oz-contract + passkey | 02b-passkey-account.ts | Account models |
| Gas in stablecoin | token-forwarding contract via relayer (FeeForwarder) | gas: { mode: "token", token } | 09-gas-in-token.ts | Gas in token |
| Atomic batch | multi-op tx (classic) / Multicall contract (Soroban) | sendCalls([...]) / batch() | 10-batch.ts | Atomic batch |
| Sessions | policy signers in __check_auth (spend limit + allowlist on-chain) | grantSession / revokeSession | 11-sessions.ts | Sessions overview |
| Parallel (transparent) | channel-account pool + non-sequential nonces (Protocol 23) | none (facilitator throughput) | - | Atomic batch |
| Social login | external provider -> ed25519 key -> smart-account signer | socialSigner({ provider: "web3auth" }) | 12-social-login.ts | Social login |
| Email/SMS login | external provider -> derived ed25519 key | emailSigner({ proxyUrl }) | 16-email-login.ts | Social login |
| Mobile (React Native) | native passkey (WebAuthn) + secure storage | @buckspay/react-native nativePasskey | 13-react-native.tsx | React Native |
| Server bindings (BFF) | server-side relay + signer proxy | @buckspay/nextjs createRelayRoute / createSignerProxyRoute | 15-nextjs-bff.ts | Next.js BFF |
| Swaps (optional) | native DEX / Soroswap (reuses the facilitator /swap/* rail) | quoteSwap / swap | 14-swap.ts | Swaps |
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).
