SwiftRail is a gasless USDC checkout stack for Arbitrum Sepolia. Customers sign once with USDC permit and do not pay ETH gas. A relayer sponsors gas, takes a small fee, and settles net USDC to the me
SwiftRail is a gasless USDC checkout stack for Arbitrum Sepolia.
Customers sign once with USDC permit and do not pay ETH gas. A relayer sponsors gas, takes a small fee, and settles net USDC to the merchant.
Think of this as 5 parts working together:
frontend: the shop UI where user clicks buy.
sdk: helps connect wallet and enforce Arbitrum Sepolia network.
relayer: backend service that sends on-chain transactions and pays gas.
payment contract: verifies permit and pulls USDC from customer.
USDC token: where permit nonce/balance and token transfers happen.
Payment sequence:
User clicks buy in frontend.
Frontend asks relayer for fee quote (POST /quote).
Frontend calls sdk.checkout(...).
SDK prompts user to sign USDC permit typed-data in wallet.
SDK submits permit payload to relayer (POST /submit-payment).
Relayer calls contract processPayment(...) (tx #1).
Contract does permit + transferFrom(user -> fee_collector).
Relayer waits for tx #1 confirmation.
Relayer transfers net USDC to merchant (tx #2).
Relayer waits for tx #2 confirmation.
Frontend refreshes dashboard (GET /dashboard/:merchant).
This is exactly why the logs show:
Payment transaction submitted
Payment transaction confirmed
Merchant settlement tx submitted
Merchant settlement tx confirmed