Real-time CS2 case price aggregation with NFT fractionalization on Solana blockchain.
- Real-time Price Oracle - Multi-source price aggregation for CS2 cases
- NFT Minting - Create Revolution Case NFTs on Solana
- Fractionalization - Convert NFTs to 500 fungible RCST tokens
- Redemption - Burn tokens to unlock NFTs back
- Infinite Cycle - Fractionalize β Redeem β Repeat (NFT stays locked on escrow)
- Steam Integration - Web API inventory management and container tokenization
- Container Tokenization - Tokenize Revolution Case containers directly from Steam inventory
The project consists of 5 microservices orchestrated by Docker Compose:
Services:
- Dashboard (Port 3000) - Next.js frontend with wallet integration
- Oracle API (Port 3003) - Multi-source price aggregation
- Mint Service (Port 3004) - NFT minting service with database
- Steam Bot (Port 3002) - Steam inventory management
Infrastructure:
- Redis (Port 6379) - Caching layer for Oracle API
- PostgreSQL (Port 5432) - Database for NFT and staking data storage
- Docker Desktop or Docker Engine
- Node.js 18+ (for local development without Docker)
-
Start all services
docker-compose -f docker-compose.dev.yml up -d
-
Access services
- π¨ Dashboard: http://localhost:3000
- π Oracle API: http://localhost:3003
- πͺ Mint Service: http://localhost:3004
- π€ Steam Bot: http://localhost:3002
- πΎ Redis: localhost:6379
-
Check service status
docker-compose -f docker-compose.dev.yml ps
For hot-reload during development:
docker-compose -f docker-compose.dev.yml upPrice aggregation service that fetches data from Steam Market, Bitskins, and other sources.
Endpoints:
GET /api/oracle-data- Get aggregated price dataGET /api/oracle/revolution-case- Revolution Case priceGET /api/health- Health checkPOST /api/refresh- Force cache refresh
Tech Stack:
- Node.js, Express
- Redis caching
- Multi-source price aggregation
NFT minting service with fractionalization capabilities using Metaplex on Solana.
Endpoints:
POST /api/mint- Create NFT containerGET /api/nfts/:userWallet- Get user's NFTsGET /api/nft/:mintAddress- Get single NFT detailsGET /api/share-token- Get Universal Share Token (RCST) infoPOST /api/fractionalize- Fractionalize NFT β Get 500 RCST tokensPOST /api/redeem- Prepare redemption (check token balance)POST /api/redeem/complete- Complete redemption (burn 500 tokens)
Fractionalization Flow:
- User has NFT with status
'locked'(on server escrow account) - Click "Fractionalize" β Receive 500 RCST tokens β Status:
'fractionalized' - Click "Redeem" β Sign burn transaction β Burn 500 RCST tokens β Status:
'locked' - Repeat cycle infinitely
Tech Stack:
- Solana Web3.js
- Metaplex SDK
- PostgreSQL database
- SPL Token program for share tokens
Steam inventory management and container tokenization.
Endpoints:
POST /api/bot/initialize- Initialize and login botGET /api/bot/status- Get bot statusGET /api/bot/inventory- Get bot inventoryGET /api/inventory/:steamId64?method=community- Get user inventory via Web API (no login required)GET /api/user/:steamId64- Get user profile infoPOST /api/bot/create-offer- Create trade offer (for tokenization flow)POST /api/bot/lock- Lock item for userPOST /api/bot/unlock- Unlock itemPOST /api/bot/transfer- Transfer item via trade offerGET /api/health- Health check
Web API Features:
- Fetch any user's inventory by Steam ID without bot login
- Supports
method=community(Steam Community API) - Automatically filters CS:GO/CS2 cases
- Tokenize Revolution Case containers directly from Steam inventory
Container Tokenization Flow:
- User loads Steam inventory via
/api/inventory/:steamId64 - System displays Revolution Case containers
- User clicks "Tokenize Container" button
- Bot creates trade offer to transfer container
- System mints NFT on Solana for the container
- NFT is immediately fractionalized into 500 RCST tokens
- User receives tokens in their wallet
Tech Stack:
- Steam-User, SteamCommunity
- Steam Web API integration
- TradeOfferManager for Steam trade offers
- Steam Inventory API wrapper with retries and proxy support
Next.js frontend application.
Pages:
/landing- Landing page/dashboard- Main dashboard with NFT containers/mint- NFT minting interface/steam-bot- Steam inventory manager and container tokenization
Tech Stack:
- Next.js 14
- TypeScript
- Tailwind CSS
- Phantom Wallet integration
- Redis - Price caching (60s TTL) and session storage
- Docker Network - Internal service communication
- Install dependencies for each service
- Start services individually:
# Terminal 1: Oracle API cd services/oracle-api npm install npm run dev # Terminal 2: Mint Service cd services/mint-service npm install npm run dev # Terminal 3: Steam Bot cd services/steam-bot npm install npm run dev # Terminal 4: Dashboard cd services/dashboard npm install npm run dev
Oracle API uses Redis for caching. Make sure Redis is running:
docker run -d -p 6379:6379 redis:7-alpineSee services/*/env.example for required environment variables.
curl http://localhost:3003/api/oracle-datacurl http://localhost:3003/api/oracle/revolution-casecurl http://localhost:3003/api/healthitemx-hackathon-main/
βββ services/
β βββ oracle-api/ # Price aggregation service
β βββ mint-service/ # NFT minting service
β βββ steam-bot/ # Steam bot service
β βββ dashboard/ # Next.js frontend
β βββ shared/ # Shared types and utilities
βββ docker-compose.yml # Production orchestration
βββ docker-compose.dev.yml # Development orchestration
βββ .github/workflows/ # CI/CD pipelines
GitHub Actions validates:
- Code linting
- Service builds
- Docker image builds
See .github/workflows/ci.yml for details.
- Single Mint: One token mint for all Revolution Case NFTs
- Token Mint:
vN8wMQ3qiX7E525Q362wfq98sb4dckf9zgaernTqYzE - Decimals: 0 (indivisible, like NFT)
- Supply: Unlimited (minted on-demand per fractionalization)
βββββββββββββββ
β Locked β β NFT created, ready for fractionalization
ββββββββ¬βββββββ
β Fractionalize (mint 500 RCST tokens)
βΌ
βββββββββββββββ
βFractionalizedβ β NFT locked, 500 tokens in circulation
ββββββββ¬βββββββ
β Redeem (burn 500 RCST tokens)
βΌ
βββββββββββββββ
β Locked β β NFT unlocked, ready for fractionalization again
βββββββββββββββ
minted_nfts table:
status:'locked','fractionalized','redeemed'β'locked'shares: Current number of tokens minted (0-500)total_shares: Always 500share_token_mint: Universal RCST token mint address
fractionalized_containers table:
- Tracks fractionalization history
- Records token mint, owner, shares_minted
- Records redemption timestamp and redeemer
- NFT Escrow: All NFTs stored on server wallet (escrow account)
- Ownership Verification: Only original NFT owner can fractionalize/redeem
- Token Ownership: Only token holder can burn (requires wallet signature)
- No Double-Spending: NFT remains locked on escrow throughout cycle
β
Microservices architecture implemented
β
Docker Compose orchestration
β
Redis caching layer
β
CI/CD with GitHub Actions
β
All services running in Docker
β
NFT Fractionalization system
β
Infinite fractionalization/redeem cycle
β
Universal Share Token (RCST) implementation
β
Steam container tokenization from inventory
β
Trade offer integration for Steam asset transfer
- Fork the repository
- Create feature branch
- Make your changes
- Test with
docker-compose up - Submit pull request
MIT