Docs

Product + technical reference for Round on Solana.

Funds can lose value. Round is experimental software. Only deposit capital you are willing to lose. On-chain balances and explorers are the source of truth.

Overview

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.

Architecture

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
  • App: Next.js on Vercel ()
  • State: Supabase for members, shares, activity; Solana for balances
  • Execution: Jupiter Swap API for spot routes; Squads for vault txs
  • Charts: NAV samples via `/api/cron/sample-nav` (Hostinger cron → production)

Where funds go

  1. 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. 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. 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. 4. Withdraw

    Member redeems shares for USDC. A Squads vault transaction sends USDC from the treasury ATA back to the member wallet ATA.

Round does not take custody of deposits in a pooled omnibus wallet. Each fund’s Squads vault holds that fund’s assets. The relay is for fees, rent, and execution sponsorship — not for holding user deposits.

Official wallets

These are the canonical platform addresses used in production. Always verify against Solscan and against GET /api/swap/config (`feeDestination`).

Per-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.

Token accounts (ATAs)

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)

4mtYo33u1Antvu5yiBCs8wrXNJo5CJkaYYz5DuCeWCCp

Relay wSOL ATA (example buy-side fee mint)

9UVh22HiNxcYvUjUVfRDWUMXWQfmja97ZYFeA7vfCvRp

Jupiter 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

Fees

FeeAmountPaid to
Fund creation0.05 SOLRelay wallet (native SOL)
Swap platform fee50 bps (0.5%) of swap outputRelay ATA (output mint)
Network / Jupiter / LPVariableSolana + route venues

Fee config is exposed at /api/swap/config. Rates can change; wallet prompts and on-chain amounts prevail.

Lifecycle

  • Create — wallet + X profile; pay creation fee; provision treasury; set public or private join rules.
  • Join — public join or private password; private funds may queue an approval request. Approved members are synced as Squads signers when possible.
  • Deposit / withdraw — USDC transfers + ledger share events. Withdrawals require the member wallet to be authorized on the treasury.
  • Manage — only the fund creator can execute swaps and update settings.

Trading

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.

Verify on-chain

  1. Open the fund page → copy treasury address.
  2. On Solscan, confirm USDC and token ATAs owned by that treasury match the UI holdings.
  3. Confirm fee accruals on the relay ATAs listed above after swaps.
  4. Compare feeDestination from `/api/swap/config` to the relay wallet.

Safety

You control your keys. Smart contracts, managers, markets, RPCs, and integrations can fail. Round operators do not guarantee returns or continuous uptime. Read Risk and Terms before depositing.