- landing/eslint.config.js: ban imports from web-app paths (rule 1),
direct RPC clients from viem/@wagmi/vue (rule 2), and axios (rule 4)
- web-app/eslint.config.js: ban string interpolation inside GraphQL
query/mutation property values (rule 3); fixes 4 pre-existing violations
in usePositionDashboard, usePositions, useSnatchNotifications,
useWalletDashboard by migrating to variables: {} pattern
- services/ponder/eslint.config.js: ban findMany() calls that lack a
limit parameter to prevent unbounded indexed-data growth (rule 5)
All error messages follow the [what is wrong][rule][how to fix][where to
read more] template so agents and humans fix on the first try.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| .husky | ||
| abis | ||
| generated | ||
| scripts | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| .lintstagedrc.json | ||
| .prettierrc | ||
| AGENTS.md | ||
| DEPLOYMENT.md | ||
| eslint.config.js | ||
| package-lock.json | ||
| package.json | ||
| ponder-env.d.ts | ||
| ponder.config.ts | ||
| ponder.schema.ts | ||
| README.md | ||
| tsconfig.json | ||
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
npm install
2. Configure Environment
cp .env.example .env
Edit .env to select your network:
PONDER_NETWORK=BASE_SEPOLIA_LOCAL_FORK- Local Anvil fork managed byscripts/dev.shPONDER_NETWORK=BASE_SEPOLIA- Base Sepolia testnetPONDER_NETWORK=BASE- Base mainnet
3. Local Development (Anvil Fork)
# 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)
PONDER_NETWORK=BASE_SEPOLIA npm run dev
5. Production Deployment (Base Mainnet)
PONDER_NETWORK=BASE npm run start
GraphQL Queries
Once running, access the GraphQL playground at http://localhost:42069/graphql
Example Queries
Get Protocol Stats
{
stats(id: "0x01") {
kraikenTotalSupply
stakeTotalSupply
outstandingStake
mintedLastWeek
mintedLastDay
mintNextHourProjected
burnedLastWeek
burnedLastDay
burnNextHourProjected
}
}
Get All Positions
{
positions(where: { status: "Active" }) {
items {
id
owner
share
taxRate
kraikenDeposit
taxPaid
createdAt
}
}
}
Get User Positions
{
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
DATABASE_URL=postgresql://... PONDER_NETWORK=BASE npm run start
Troubleshooting
- "No chain configured": Ensure
PONDER_NETWORKis set in.env - Slow initial sync: Provide a faster RPC URL
- Database errors: Use PostgreSQL for production (
DATABASE_URLenv var)
License
GPL-3.0-or-later