{"id":50810605,"url":"https://github.com/nothingdao/astrds","last_synced_at":"2026-06-13T04:31:04.538Z","repository":{"id":262055728,"uuid":"886097912","full_name":"nothingdao/astrds","owner":"nothingdao","description":"Asteroids on Solana — earn tokens, collect drops, play on-chain","archived":false,"fork":false,"pushed_at":"2026-04-27T06:31:25.000Z","size":60861,"stargazers_count":1,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-27T06:31:30.805Z","etag":null,"topics":["arcade","asteroids","blockchain","canvas","game","netlify","phantom-wallet","react","serverless","solana","typescript","web3"],"latest_commit_sha":null,"homepage":"https://astrds.ndao.computer","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nothingdao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-10T07:24:02.000Z","updated_at":"2026-04-27T06:31:28.000Z","dependencies_parsed_at":"2024-11-10T08:24:44.971Z","dependency_job_id":"8b2e27c5-c1d4-4b3e-81eb-bcb0c102e2fb","html_url":"https://github.com/nothingdao/astrds","commit_stats":null,"previous_names":["whaleen/astrds","nothingdao/astrds"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nothingdao/astrds","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nothingdao%2Fastrds","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nothingdao%2Fastrds/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nothingdao%2Fastrds/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nothingdao%2Fastrds/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nothingdao","download_url":"https://codeload.github.com/nothingdao/astrds/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nothingdao%2Fastrds/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34272603,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arcade","asteroids","blockchain","canvas","game","netlify","phantom-wallet","react","serverless","solana","typescript","web3"],"created_at":"2026-06-13T04:31:03.799Z","updated_at":"2026-06-13T04:31:04.532Z","avatar_url":"https://github.com/nothingdao.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ASTRDS\n\nBrowser-based Asteroids with Solana wallet auth and on-chain token rewards. Connect a wallet, pay to play, collect $ASTRDS tokens during gameplay, claim them on game over. Third parties can deposit any SPL token into the on-chain vault — those tokens spawn as collectibles in-game and are claimed by players via on-chain vault instructions.\n\nLive at [astrds.ndao.computer](https://astrds.ndao.computer)\n\n## Stack\n\n- **Frontend** — React 18, TypeScript, Vite, Tailwind CSS\n- **State** — Zustand (13 stores + typed state machine)\n- **Blockchain** — Solana web3.js, wallet-adapter, SPL Token (Token-2022 + legacy), Anchor vault program\n- **Backend** — Convex (DB, reactive queries, serverless actions, HTTP router)\n- **Game server** — Node.js WebSocket server (`server/`) — authoritative loop at 30 tick/s; deployed to Railway\n- **Webhooks** — Helius Enhanced Transactions (watches Space Vault Program ID)\n- **Package manager** — pnpm (app/, server/), npm (Anchor root)\n\n## Running Locally\n\n```bash\ncd app\npnpm install\npnpm dev       # runs Vite + Convex concurrently\n```\n\nRequired env vars in `app/.env.local`:\n\n```\nVITE_CONVEX_URL=https://your-deployment.convex.cloud\nVITE_HELIUS_API_KEY=your-helius-api-key\nVITE_WS_URL=ws://localhost:3001   # WebSocket server URL; defaults to localhost:3001 if not set\n```\n\nRequired env vars in Convex dashboard (not in `.env.local`):\n\n```\nPROGRAM_AUTHORITY_PRIVATE_KEY   # JSON array — authority keypair for ed25519 claim/mint signing\nSOLANA_RPC_ENDPOINT             # RPC URL used by Convex actions\nHELIUS_WEBHOOK_SECRET           # Shared secret validated on every webhook POST\nADMIN_API_KEY                   # Required for admin config HTTP endpoint\n```\n\n`pnpm start` runs Vite only (no Convex) — useful for frontend-only changes.\n\n### Game Server\n\nThe game server is required — it owns the authoritative game loop. The browser is a pure renderer.\n\n```bash\ncd server\npnpm install\npnpm dev       # starts on port 3001\n```\n\nRequired env vars in `server/.env`:\n\n```\nCONVEX_URL=https://your-deployment.convex.cloud\nCONVEX_SITE_URL=https://your-deployment.convex.site   # optional; derived from CONVEX_URL if omitted\nSOLANA_RPC_URL=https://api.devnet.solana.com           # optional; used for Meteora pool reads\nADMIN_API_KEY=\u003csame key as Convex\u003e                     # used to consume sessions and POST game-over ASTRDS accounting\n```\n\n`ServerGameScreen` connects to `VITE_WS_URL` if set, otherwise defaults to `ws://localhost:3001`.\n\n## ASTRDS Token\n\n- **Mint** — `5sqKSHDKZr4KbNzj972PSfmEhtR9eLeBvv1nBRbeQAnB` (devnet, Token-2022)\n- **Mint authority** — VaultConfig PDA `6zsWYibNCYYQJikHv8BHXRNynEACgFKsZPNXqWqBPbvv` (on-chain only — no direct keypair minting)\n- **Symbol** — $ASTRDS\n- **Decimals** — 9\n- **Metadata URI** — https://astrds.ndao.computer/token.json\n- **Max per game** — 50 ASTRDS (procyclical emission tiers; tier 1–5 by pool price; uncollected pills burned)\n- Minting requires an on-chain `mint_astrds` instruction — the game server writes the earned amount to Convex, `prepareMint` signs an ed25519 authorization, the client submits the tx\n- See [docs/economy.md](docs/economy.md) for the full emission model\n\n## Tokens in Space\n\nAny SPL token (Token-2022 or legacy) can be deposited into the on-chain vault. Deposited tokens spawn as collectibles during gameplay and are claimed by players via on-chain `claim` instructions. The vault program verifies an ed25519 signature from the Convex authority before releasing tokens, creating an on-chain `ClaimRecord` for replay protection.\n\nDeposit amounts are verified on-chain — the server reads `tx.meta` directly, never trusting client input for amounts. Helius webhooks watch the Space Vault Program ID and detect external drains. An hourly Convex cron (`reconcileAllPools`) reconciles pool balances against on-chain reality.\n\n## Docs\n\n- [docs/architecture.md](docs/architecture.md) — system overview, layers, data flow\n- [docs/status.md](docs/status.md) — what's working, what's rough, what's next\n- [docs/spec.md](docs/spec.md) — full product spec and functional requirements\n- [docs/chain.md](docs/chain.md) — on-chain addresses, PDAs, flow diagrams\n- [docs/economy.md](docs/economy.md) — token economy design, emission model, flywheel\n- [docs/security.md](docs/security.md) — security findings, fixed exploits, pre-mainnet blockers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnothingdao%2Fastrds","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnothingdao%2Fastrds","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnothingdao%2Fastrds/lists"}