1---2name: superteam-academy-dev3description: Superteam Academy — decentralized learning platform on Solana with soulbound XP tokens (Token-2022), Metaplex Core credentials, course registry, achievements, and creator incentives. Covers Anchor program development, testing with LiteSVM/Mollusk/Trident. Use when this capability is needed.4---56# Superteam Academy Skill78## What this Skill is for910Use this Skill when the user asks for:11- On-chain program development for the Academy platform12- XP token minting (soulbound Token-2022)13- Course registry and enrollment logic14- Lesson completion and bitmap tracking15- Finalize course / award XP flows16- Metaplex Core credential issuance and upgrades (soulbound via PermanentFreezeDelegate)17- Achievement system (create, award, deactivate)18- Minter role management (register, revoke, reward XP)19- Anchor program development, testing, security20- Deployment workflows (devnet → mainnet)2122## Core Concepts2324### Account Structure (6 PDAs + Metaplex Core NFTs)2526| Account | Seeds | Purpose |27|---------|-------|---------|28| Config | `["config"]` | Singleton: authority, backend signer, XP mint |29| Course | `["course", course_id.as_bytes()]` | Course metadata, creator, track, XP amounts |30| Enrollment | `["enrollment", course_id.as_bytes(), user.key()]` | Lesson bitmap, completion timestamps, credential ref (closeable) |31| MinterRole | `["minter", minter.key()]` | Registered XP minter with optional per-call cap (closeable via revoke_minter) |32| AchievementType | `["achievement", achievement_id.as_bytes()]` | Achievement definition: name, collection, supply cap, XP reward |33| AchievementReceipt | `["achievement_receipt", achievement_id.as_bytes(), recipient.key()]` | Proof of award — PDA collision prevents double-awarding |34| Credential NFT | Metaplex Core asset (1 per learner per track) | Soulbound, wallet-visible, upgradeable via URI + Attributes plugin |3536### Instructions (16 Total)3738| Category | Instructions |39|----------|-------------|40| **Platform Management (2)** | `initialize`, `update_config` |41| **Courses (2)** | `create_course`, `update_course` |42| **Enrollment & Progress (6)** | `enroll`, `complete_lesson`, `finalize_course`, `close_enrollment`, `issue_credential`, `upgrade_credential` |43| **Minter Roles (3)** | `register_minter`, `revoke_minter`, `reward_xp` |44| **Achievements (3)** | `create_achievement_type`, `award_achievement`, `deactivate_achievement_type` |4546### Core Learning Loop4748```49ENROLL → COMPLETE LESSONS → FINALIZE COURSE → ISSUE CREDENTIAL → CLOSE ENROLLMENT50```51521. **Enroll**: Learner signs, prerequisite check, create Enrollment PDA532. **Complete Lessons**: Backend signs, set bitmap bit, mint lesson XP (Token-2022 CPI)543. **Finalize Course**: Backend signs, verify all lessons done, mint completion bonus + creator XP554. **Issue Credential**: Backend signs, Metaplex Core createV2 CPI (PermanentFreezeDelegate + Attributes plugins)565. **Close Enrollment**: Learner signs, reclaim rent (immediate if completed, 24h cooldown if not)5758### Key Design Decisions5960- **XP = soulbound Token-2022 token** (NonTransferable + PermanentDelegate)61- **Credentials = Metaplex Core NFTs** — soulbound via PermanentFreezeDelegate, wallet-visible, upgradeable62- **Config PDA = update authority** of all track collection NFTs63- **`finalize_course` and `issue_credential` are split** — XP awards don't depend on credential CPI64- **Completion bonus merged into `finalize_course`** — bonus XP = floor(xp_per_lesson * lesson_count / 2)65- **No LearnerProfile PDA** — XP balance tracked via Token-2022 ATA66- **Rotatable backend signer** stored in Config67- **Reserved bytes** on all accounts for future-proofing without migrations68- **`revoke_minter` closes the MinterRole PDA** (not a soft deactivation)6970## Technology Stack7172| Layer | Stack |73|-------|-------|74| Programs | Anchor 0.31+, Rust 1.82+ |75| Token Standard | Token-2022 (NonTransferable, PermanentDelegate, MetadataPointer, TokenMetadata) |76| Credentials | Metaplex Core NFTs (soulbound via PermanentFreezeDelegate) |77| Testing | Mollusk, LiteSVM, Trident (fuzz) |78| Client | TypeScript, @coral-xyz/anchor, @solana/web3.js |79| Frontend | Next.js 14+, React, Tailwind CSS |80| RPC | Helius (DAS API for XP leaderboard + credential NFT queries) |81| Content | Arweave (immutable course content) |82| Multisig | Squads (platform authority) |8384## Compute Budgets8586| Instruction | CU Budget |87|-------------|-----------|88| initialize | ~50K |89| create_course | ~15K |90| complete_lesson | ~30K |91| finalize_course | ~50K |92| issue_credential | ~50-100K |93| upgrade_credential | ~50-100K |94| award_achievement | ~80K |9596## Operating Procedure9798### 1. Classify the task99100- Platform setup (Config, authority)101- Course management (create, update, track assignment)102- Enrollment flow (enroll, lessons, finalize, credentials, close)103- Minter roles (register, revoke, reward XP)104- Achievements (create type, award, deactivate)105- Account structure (PDAs, state)106- Access control (backend signer, authority, minter permissions)107- Testing (unit, integration, fuzz)108- Security (audit, attack vectors)109- Deployment (devnet, mainnet)110111### 2. Implementation Checklist112113Always verify:114- Account validation (owner, signer, PDA seeds + bump)115- Backend signer matches `Config.backend_signer`116- Checked arithmetic throughout (`checked_add`, `checked_sub`, `checked_mul`)117- Bitmap operations correct for lesson tracking118- Events emitted for state changes119- Canonical PDA bumps stored (never recalculated)120- Reserved bytes preserved on account modifications121- CPI target program IDs validated122123### 3. Testing Requirements124125- **Unit test** (Mollusk): Each instruction in isolation126- **Integration test** (LiteSVM): Full enroll → complete lessons → finalize → credential flow127- **Fuzz test** (Trident): Random amounts, edge cases, bitmap bounds128- **Attack test**: Unauthorized signer, double completion, supply exhaustion129130## Progressive Disclosure (read when needed)131132### Programs & Development133- [programs-anchor.md](programs-anchor.md) — Anchor patterns, constraints, testing pyramid, IDL generation134135### Testing & Security136- [testing.md](testing.md) — LiteSVM, Mollusk, Trident, CI guidance137- [security.md](security.md) — Vulnerability categories, program checklists138139### Deployment140- [deployment.md](deployment.md) — Devnet/mainnet workflows, verifiable builds, multisig141142### Ecosystem & Reference143- [ecosystem.md](ecosystem.md) — Token standards, DeFi protocols144- [idl-codegen.md](idl-codegen.md) — Codama/Shank client generation145- [resources.md](resources.md) — Official documentation links146147## Task Routing Guide148149| User asks about... | Primary file(s) |150|--------------------|-----------------|151| Anchor program code | programs-anchor.md |152| Unit/integration testing | testing.md |153| Fuzz testing (Trident) | testing.md |154| Security review, audit | security.md |155| Deploy to devnet/mainnet | deployment.md |156| Token standards, SPL, Token-2022 | ecosystem.md |157| Generated clients, IDL | idl-codegen.md |158| Official docs and resources | resources.md |159160## Canonical Docs161162| Document | Purpose |163|----------|---------|164| `docs/SPEC.md` | Source of truth for all program behavior |165| `docs/ARCHITECTURE.md` | Account maps, data flows, CU budgets |166| `docs/INTEGRATION.md` | Frontend integration guide |167168---169> Converted and distributed by [TomeVault](https://tomevault.io/claim/solanabr) — claim your Tome and manage your conversions.170<!-- tomevault:4.0:skill_md:2026-04-11 -->