harb/docs/technical/architecture.md

91 lines
4 KiB
Markdown
Raw Normal View History

# Technical Architecture
## System Overview
KrAIken consists of three on-chain contracts, a real-time indexer, and two web frontends.
```
┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐
│ Kraiken │────▶│ Stake │ │ LiquidityManager │
│ (ERC20) │ │ (Staking) │ │ (Pool Management) │
└──────────────┘ └──────────────┘ └──────────────────────┘
│ │ │
└────────────────────┼────────────────────────┘
┌───────▼────────┐
│ Ponder Indexer │
│ (GraphQL API) │
└───────┬────────┘
┌─────────────┼─────────────┐
│ │
┌───────▼────────┐ ┌───────▼────────┐
│ Landing Page │ │ Staking App │
│ (Vue 3/Vite) │ │ (Vue 3/Vite) │
└────────────────┘ └────────────────┘
```
## Smart Contracts
### Kraiken.sol (ERC20 Token)
- Standard ERC20 with controlled minting by LiquidityManager
- 20% of supply reserved for staking pool
- Min stake fraction: 1/3000 of total supply (~399 KRK at current supply)
- Tracks `previousTotalSupply` for staking calculations
- Version field for indexer compatibility
### Stake.sol (Staking Positions)
- Creates/manages staking positions with self-assessed tax rates
- 30 discrete tax rate tiers: 1%, 3%, 5%, 8%, 12%, ... up to 97%
- Snatching: higher tax rate can displace lower positions
- 3-day minimum hold (`TAX_FLOOR_DURATION`) before snatch
- Position payout at market value when snatched or unstaked
### LiquidityManager.sol (Pool Management)
- Manages Uniswap V3 concentrated liquidity position
- Recenters liquidity based on VWAP and market conditions
- Emits `EthAbundance`, `EthScarcity`, `Recentered` events
- Optimizer V3: reads staking sentiment to adjust parameters
## Indexer (Ponder)
[Ponder](https://ponder.sh) indexes on-chain events into PostgreSQL via GraphQL:
- **Stats**: Protocol-wide metrics (supply, reserves, fees)
- **Positions**: Individual staking positions with status
- **Holders**: Token balances with cost basis tracking
- **Recenters**: Liquidity management history
- **Ring Buffer**: 7-day hourly snapshots of ETH reserve, mints, burns, tax
### Key Endpoints
- GraphQL: `http://localhost:42069` (proxied at `/api/graphql`)
- Health: `http://localhost:42069/health`
- Ready: `http://localhost:42069/ready` (200 when historical sync complete)
## Web Frontends
### Landing Page (`/`)
- Marketing + protocol health dashboard
- LiveStats component with real-time metrics
- Wallet connect + holder card for returning users
- Three variants: defensive, offensive, mixed
### Staking App (`/app/`)
- Full staking dashboard
- Position management (stake, unstake, adjust tax)
- Wallet P&L with cost basis tracking
- Charts and protocol statistics
### Shared Package (`packages/web3/`)
- `createHarbConfig()` — wagmi config with Base chain + connectors
- `useTokenBalance` composable
- Re-exports of wagmi composables for consistent imports
## Infrastructure
- **Chain**: Base (Ethereum L2), chainId 8453
- **Local dev**: Anvil fork of Base Sepolia (chainId 31337)
- **Proxy**: Caddy reverse proxy on port 8081
- **CI**: Woodpecker CI with pre-built Docker images
- **Source**: [codeberg.org/johba/harb](https://codeberg.org/johba/harb)