← Back to Portfolio

Evento — Web3 Event Platform on Solana

Solana
Web3
Web
Abstract — Buying or funding an event ticket today is often messy: fragmented platforms, mandatory accounts, hidden fees, and long settlement times. Evento removes all of that. It’s a wallet-native platform for event ticketing and crowdfunding, built directly on Solana. Users connect their Phantom wallet, approve a single transfer, and they’re done — no sign-ups, no intermediaries, no delays. v1 runs on a simple SystemProgram.transfer for instant, verifiable payments. v2 will add an Anchor-based escrow for refunds and NFT tickets via Metaplex for provable, transferable access. The goal: a trust-minimised UX that organizers and attendees actually need — sign locally, settle instantly, and cut out all the friction of Web2 ticketing.
Contents
  1. Motivation & Constraints
  2. On-chain vs Off-chain Boundary
  3. Web3-First Architecture
  4. Wallet & Transaction Flow
  5. Solana Pay QR Deep Link
  6. Security & Correctness
  7. UX for Failure Modes
  8. Trade-offs
  9. Roadmap

1. Motivation & Constraints

2. On-chain vs Off-chain Boundary

ConcernLives OnWhy (Problem → Solution)
Payment On-chain (SOL transfer) Chargebacks & payout delays → replaced by final, transparent settlement; organizers are paid instantly, attendees get an explorer-proof.
Ticket identity (v2) On-chain (NFT metadata) Counterfeits & scalping → verifiable ownership, optional transfer rules; simple at the door: “scan wallet, verify mint.”
Event metadata Off-chain (static JSON / API) Frequent edits shouldn’t cost rent → organizers update titles/times cheaply; no chain bloat for content.
Receipts / stats Off-chain (optional indexer) Analytics & pagination without RPC strain → append-only receipt store; not a trust anchor.

3. Web3-First Architecture

Static UI HTML/CSS/JS + Phantom Solana RPC devnet / mainnet Optional Backend verify signature + receipts
Figure 1 — UI talks directly to the cluster. Backend is an optional indexer/receipt store, not a trust anchor.
Figure insight Keep trust at the wallet boundary. If you add a server, make it append-only for receipts and easy to ignore.

4. Wallet & Transaction Flow

// 1) Connect wallet
const provider = window.solana;         // Phantom
await provider.connect();               // user approval
const connection = new solanaWeb3.Connection("https://api.devnet.solana.com", "confirmed");

// 2) Build payment
const from = provider.publicKey;
const to   = new solanaWeb3.PublicKey(organizerPubkey);
const lamports = Math.floor(priceSOL * solanaWeb3.LAMPORTS_PER_SOL);
const ix = solanaWeb3.SystemProgram.transfer({ fromPubkey: from, toPubkey: to, lamports });

// 3) Fresh blockhash (replay-safe)
const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();

// 4) Sign & send
const tx = new solanaWeb3.Transaction({ feePayer: from, recentBlockhash: blockhash }).add(ix);
const signed = await provider.signTransaction(tx);
const sig = await connection.sendRawTransaction(signed.serialize(), { skipPreflight: false });

// 5) Confirm and surface the explorer link
await connection.confirmTransaction({ signature: sig, blockhash, lastValidBlockHeight }, "confirmed");
showExplorerLink(sig);
Why this matters — No custodial keys, no server-side signing, no opaque payment processor. Users approve exactly one transfer they can verify in any explorer.
Impact — Legacy platforms take 10–15% fees and delay payouts. Evento settles immediately to the organizer’s wallet; the signature is public proof.

5. Solana Pay QR Deep Link

For mobile or kiosk flows, generate a Solana Pay URL and render it as a QR code. Wallets parse the URL and pre-fill the transfer.

const params = new URLSearchParams({
  recipient: organizerPubkey,      // base58
  amount: priceSOL.toString(),     // decimal SOL
  label: "Evento Ticket",
  message: `Event: ${eventTitle}`,
  memo: `evt:${eventId};tier:${tierName}`
});
const url = `solana:${organizerPubkey}?${params.toString()}`;
// Render as QR with your preferred lib (e.g., qrcode.js)
Note Include a concise memo to tie wallet history to a specific event/tier without leaking PII.

6. Security & Correctness

7. UX for Failure Modes

8. Trade-offs (v1: direct transfer)

9. Roadmap for v2

  1. Anchor escrow program: protects attendees if events are canceled; timed refunds without trusting a platform.
  2. Metaplex NFT tickets: proof of authenticity, optional transfer rules (e.g., anti-scalping), and simple door checks.
  3. Webhooks & subscriptions: backend listens for confirmations; UI updates via SSE/WS for real-time status.
  4. Proof-of-attendance: mint a POAP-style token after check-in to reward community engagement.
  5. Allowlists: Merkle proofs or token-gated tiers for presales without spreadsheets or centralized registries.