Repository navigation
What's new
A secondary market that checks the buyer before the match — a holder offers shares at a fixed price, only wallets the token would admit see the offer, and shares and payment move in one transaction with the platform fee shown before signing.
Details
- Offers from the investor cabinet: fixed price per share, no escrow — the shares stay in the seller's wallet, delegated to the offer; cancel at any time.
- The storefront shows an offer only to wallets that would pass admission for that token right now; everyone else sees nothing.
- Accept the whole offer or part of it: shares through the transfer hook, payment to the seller, the fee to the platform — all or nothing. The fee in the form is the fee the program charges (100 bps on devnet, demo stablecoin dUSD).
- A buyer revoked after the offer was posted is refused by the network before any balance moves.
- An offer the seller's account no longer backs is marked stale, with the reason and what can still be taken.
- The company panel lists every offer of its tokens and shows each trade in the journal with its price, payment and fee — live.
- Hosted on the owner's accounts: the panel on GitHub Pages (a landing page at the root, the app under /app/), the api with the indexer on Render, the index in Supabase.
Measured on devnet: 0 one-sided trades of 100 (20 broken on purpose), 0 matches for 200 non-admitted buyers (program tests); through the hosting, cap table p95 0.74 s and refusal in the journal p95 0.80 s.
Not yet: vesting (v0.3.0), right of first refusal (v0.4.0), the compliance report (v0.5.0). Admission is set inside the product, with no external KYC.
Files changed
programs/caprail— platform config,create_offer,cancel_offer,accept_offerpackages/chain,packages/indexer,apps/worker— offer builders, market events, the stale sweepapps/api— company book, storefront,/me, trades in the journal, liveoffereventsapps/web— investor cabinet, storefront, the company's book;apps/landing— the site's landing pagerender.yaml,.github/workflows/pages.yml— the hosting
Migration
0003–0005 (pnpm --filter @caprail/db db:migrate) — already applied to the production database. Devnet programs were upgraded on 2026-10-03; the platform is initialised.