Product + technical reference for Round on Solana.
Round is a Solana app for group funds: shared USDC treasuries where a manager can trade and depositors own proportional shares. Auth is wallet-based (Privy). X/Twitter is an optional profile link, not custody.
Capital never sits in a Round “hot wallet” as the primary store. Deposits go into each fund’s Squads smart-account treasury. The platform relay wallet sponsors setup txs, receives protocol fees, and co-signs vault executions where required.
You (wallet) │ deposit / withdraw USDC ▼ Fund treasury (Squads vault PDA) │ manager swap via Jupiter ├─► Token holdings (treasury ATAs) └─► Platform fees ──► Relay wallet ATAs Platform relay (PAYER) • pays rent / sponsorship SOL • receives create-fund fee (SOL) • receives swap platform fee (output mint ATA) • co-signer on treasury executions
1. Create fund
Manager pays 0.05 SOL creation fee to the platform relay, then Round provisions a Squads treasury. The treasury address is unique per fund.
2. Deposit
Member sends USDC from their wallet ATA to the fund treasury’s USDC ATA. Round records a share mint against contemporaneous NAV.
3. Trade
Manager executes Jupiter swaps with the treasury as taker. Input leaves the treasury ATA; output lands in the treasury’s ATA for that mint. Platform fee is skimmed to the relay’s ATA for the fee mint (usually the swap output).
4. Withdraw
Member redeems shares for USDC. A Squads vault transaction sends USDC from the treasury ATA back to the member wallet ATA.
These are the canonical platform addresses used in production. Always verify against Solscan and against GET /api/swap/config (`feeDestination`).
Platform relay (fee + sponsorship)
HmaV9sFRMjXjB4znhcKBwPhuxqGtFZeJ7fp36zm1y4bNUSDC mint (mainnet)
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vWrapped SOL mint
So11111111111111111111111111111111111111112Squads smart-account program
SMRTzfY6DfH5ik3TKiyLFfXexV8uSG3d2UksSCYdunGPer-fund treasury addresses are shown on each fund page and stored as `treasury_address` / `treasury_settings_address`. Those are the accounts that actually hold depositors’ USDC and tokens.
An Associated Token Account (ATA) is the SPL token balance account for a given (owner, mint) pair. Round uses ATAs everywhere USDC or swap output tokens move.
Relay USDC ATA (create / USDC-denominated fees)
4mtYo33u1Antvu5yiBCs8wrXNJo5CJkaYYz5DuCeWCCpRelay wSOL ATA (example buy-side fee mint)
9UVh22HiNxcYvUjUVfRDWUMXWQfmja97ZYFeA7vfCvRpJupiter platform fees are taken in the output mint. Buys (USDC → TOKEN) credit the relay’s TOKEN ATA. Sells (TOKEN → USDC) credit the relay’s USDC ATA. Round creates missing relay fee ATAs before swaps when needed.
ATA(owner, mint) = findProgramAddress( [owner, tokenProgramId, mint], AssociatedTokenProgram ) Fee destination owner = platform relay Fee mint = swap output mint
| Fee | Amount | Paid to |
|---|---|---|
| Fund creation | 0.05 SOL | Relay wallet (native SOL) |
| Swap platform fee | 50 bps (0.5%) of swap output | Relay ATA (output mint) |
| Network / Jupiter / LP | Variable | Solana + route venues |
Fee config is exposed at /api/swap/config. Rates can change; wallet prompts and on-chain amounts prevail.
Managers swap treasury USDC for other SPL tokens (and sell back) through Jupiter. The treasury vault is the taker; the platform relay sponsors and co-signs the Squads-wrapped transaction. Large routes may use Squads’ transaction buffer path when a single instruction would exceed size limits.
Minimum swap size and slippage defaults are enforced in the API. Failed simulations do not move treasury balances.
feeDestination from `/api/swap/config` to the relay wallet.