# KRAIKEN Ponder Indexer A high-performance blockchain indexer for the KRAIKEN protocol using Ponder framework, providing 10-15x faster indexing than The Graph with superior developer experience. ## Features - ✅ **Multi-network support**: Local (Anvil fork), Base Sepolia, Base mainnet - ✅ **Hot reload**: Instant updates during development - ✅ **Type safety**: Full TypeScript support with auto-completion - ✅ **Ring buffer**: 7-day hourly metrics with projections - ✅ **GraphQL API**: Auto-generated from schema - ✅ **Efficient indexing**: In-memory operations during sync ## Quick Start ### 1. Install Dependencies ```bash npm install ``` ### 2. Configure Environment ```bash cp .env.example .env ``` Edit `.env` to select your network: - `PONDER_NETWORK=BASE_SEPOLIA_LOCAL_FORK` - Local Anvil fork managed by `scripts/dev.sh` - `PONDER_NETWORK=BASE_SEPOLIA` - Base Sepolia testnet - `PONDER_NETWORK=BASE` - Base mainnet ### 3. Local Development (Anvil Fork) ```bash # Terminal 1: Start Anvil fork of Base mainnet anvil --fork-url https://base.llamarpc.com # Terminal 2: Start Ponder indexer PONDER_NETWORK=BASE_SEPOLIA_LOCAL_FORK npm run dev ``` ### 4. Testnet Deployment (Base Sepolia) ```bash PONDER_NETWORK=BASE_SEPOLIA npm run dev ``` ### 5. Production Deployment (Base Mainnet) ```bash PONDER_NETWORK=BASE npm run start ``` ## GraphQL Queries Once running, access the GraphQL playground at `http://localhost:42069/graphql` ### Example Queries #### Get Protocol Stats ```graphql { stats(id: "0x01") { kraikenTotalSupply stakeTotalSupply outstandingStake mintedLastWeek mintedLastDay mintNextHourProjected burnedLastWeek burnedLastDay burnNextHourProjected } } ``` #### Get All Positions ```graphql { positions(where: { status: "Active" }) { items { id owner share taxRate kraikenDeposit taxPaid createdAt } } } ``` #### Get User Positions ```graphql { positions(where: { owner: "0x..." }) { items { id share taxRate kraikenDeposit stakeDeposit taxPaid status } } } ``` ## Architecture ### Schema (`ponder.schema.ts`) - **stats**: Global protocol metrics with ring buffer - **hourlyData**: 168-hour circular buffer for time-series - **positions**: Harberger tax staking positions ### Event Handlers - **kraiken.ts**: Handles Transfer events for minting, burning, tax, UBI - **stake.ts**: Handles position lifecycle events ### Ring Buffer Implementation - 168 hourly slots (7 days) - Automatic hourly rollover - Projection calculation using median smoothing - Rolling 24h and 7d aggregations ## Deployment ### Self-Hosted ```bash DATABASE_URL=postgresql://... PONDER_NETWORK=BASE npm run start ``` ### Troubleshooting - **"No chain configured"**: Ensure `PONDER_NETWORK` is set in `.env` - **Slow initial sync**: Provide a faster RPC URL - **Database errors**: Use PostgreSQL for production (`DATABASE_URL` env var) ## License GPL-3.0-or-later