Exchange Integration
Pennysia sends the same quote request to every connected exchange. The best rate wins. Integration is free — no listing fees. Pennysia runs the frontend, wallet flow, and UX. You provide a quote API and execution calldata.
Contact us to start onboarding. See Fees for how Pennysia earns.
Requirements
| Item | Detail |
|---|---|
| Quote API | Sell/buy token, amount, chain → output, gas, calldata |
| Calldata | Settlement (or user for hard intents) is caller/receiver |
| Same-chain | SYNC routes settle on Ethereum in one tx |
| API key | Optional, for rate limits |
Route types
SYNC (default)
Same-transaction swap through Settlement. Calldata must work when Settlement is msg.sender and buy tokens land on Settlement.
venue = quote.tx.to
allowanceTarget = quote.spender
callData = quote.tx.data
value = quote.tx.value
quotedReturn = expected outputReject: bridges, cross-chain hops, gasless relayer pulls, intent-only APIs.
Hard intents
CoW Protocol, UniswapX, Velora Delta. User signs off-chain; solver fills. Settlement not involved.
SODAX
Cross-chain intents. Settlement opens on Ethereum; fill is async on the hub chain. Contact Pennysia for onboarding.
Quote response
{
"sellToken": "0x...",
"buyToken": "0x...",
"sellAmount": "1000000000000000000",
"buyAmount": "3500000000",
"gasEstimate": "150000",
"tx": { "to": "0x...", "data": "0x...", "value": "0" },
"spender": "0x..."
}Normalized into NormalizedQuote via backend SDK adapters.
Testing checklist
- Quote output matches on-chain execution
- Calldata works when Settlement calls the venue
- Buy tokens arrive on Settlement, not the user
- Spender matches approval target
- Failed routes do not block fallback routes
- Gas estimate is reasonable
- API handles parallel fanout volume
Onboarding
- Contact us with exchange name and API docs
- Pennysia builds an adapter in
src/aggregators/ - Test on mainnet fork and staging
- Exchange added to
LAUNCH_SOURCESin backend SDK - Live in quote fanout and source list
Each exchange gets a canonical ID (e.g. kyberswap, zerox). Token support tracked in @pennysia/token-list.
SDKs
- Backend SDK — implement
LiquidityAdapter - Contracts SDK — build Settlement routes
- Settlement — on-chain execution
Questions: dev@pennysia.com
Webapp architecture
Reference app: webapp-interface.
User → POST /api/quotes/fanout → rank quotes → rebuild route → lane dispatch → wallet sign → execute| Lane | Routes |
|---|---|
| Settlement SYNC | DEX/aggregator via executeSwap |
| SODAX | Cross-chain intents |
| Hard intents | CoW, UniswapX, Velora Delta |
| Package | Role |
|---|---|
@pennysia/backend-sdk | Fanout, ranking, source manifest |
@pennysia/contracts-sdk | Settlement routes and execution |
@pennysia/token-list | Token fallback |
Policies: Ethereum Mainnet only · Settlement address from contracts-sdk · Auto Fallback packs SYNC routes · API keys server-side only
Integrators implement LiquidityAdapter and register in the source manifest.
Related: Developer Guide · Swap Guide route types