2025-09-23 14:18:04 +02:00
# 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:
2025-10-02 14:37:59 +02:00
- `PONDER_NETWORK=BASE_SEPOLIA_LOCAL_FORK` - Local Anvil fork managed by `scripts/dev.sh`
2025-09-23 19:24:05 +02:00
- `PONDER_NETWORK=BASE_SEPOLIA` - Base Sepolia testnet
- `PONDER_NETWORK=BASE` - Base mainnet
2025-09-23 14:18:04 +02:00
### 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
2025-09-23 19:24:05 +02:00
PONDER_NETWORK=BASE_SEPOLIA_LOCAL_FORK npm run dev
2025-09-23 14:18:04 +02:00
```
### 4. Testnet Deployment (Base Sepolia)
```bash
2025-09-23 19:24:05 +02:00
PONDER_NETWORK=BASE_SEPOLIA npm run dev
2025-09-23 14:18:04 +02:00
```
### 5. Production Deployment (Base Mainnet)
```bash
2025-09-23 19:24:05 +02:00
PONDER_NETWORK=BASE npm run start
2025-09-23 14:18:04 +02:00
```
## 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
2026-02-13 19:22:34 +00:00
## Deployment
2025-09-23 14:18:04 +02:00
### Self-Hosted
```bash
2026-02-13 19:22:34 +00:00
DATABASE_URL=postgresql://... PONDER_NETWORK=BASE npm run start
2025-09-23 14:18:04 +02:00
```
2026-02-13 19:22:34 +00:00
### 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)
2025-09-23 14:18:04 +02:00
## License
2025-09-23 19:24:05 +02:00
GPL-3.0-or-later