resolves #35 Co-authored-by: openhands <openhands@all-hands.dev> Co-authored-by: johba <johba@harb.eth> Reviewed-on: https://codeberg.org/johba/harb/pulls/39
3.7 KiB
3.7 KiB
Agent Brief: Harb Stack
Core Concepts
- KRAIKEN couples Harberger-tax staking with a dominant Uniswap V3 liquidity manager to create asymmetric slippage, sentiment-driven pricing, and VWAP "price memory" safeguards.
- Liquidity dominance is mission-critical; treat any regression that weakens the LiquidityManager's control as a priority incident.
- Harberger staking supplies the sentiment oracle that drives Optimizer parameters, which in turn tune liquidity placement and supply expansion.
User Journey
- Buy - Acquire KRAIKEN on Uniswap.
- Stake - Declare a tax rate on kraiken.org to earn from protocol growth.
- Compete - Snatch undervalued positions to optimise returns.
Operating the Stack
- Start everything with
nohup ./scripts/dev.sh start &and stop via./scripts/dev.sh stop. Do not launch services individually. - Supported environments:
BASE_SEPOLIA_LOCAL_FORK(default Anvil fork),BASE_SEPOLIA, andBASE. Match contract addresses and RPCs accordingly. - The stack boots Anvil, deploys contracts, seeds liquidity, starts Ponder, launches the landing site, and runs the txnBot. Wait for logs to settle before manual testing.
Component Guides
onchain/- Solidity + Foundry contracts, deploy scripts, and fuzzing helpers (details).services/ponder/- Ponder indexer powering the GraphQL API (details).landing/- Vue 3 marketing + staking interface (details).kraiken-lib/- Shared TypeScript helpers for clients and bots (details).services/txnBot/- Automation bot forrecenter()andpayTax()upkeep (details).
Testing & Tooling
- Contracts: run
forge build,forge test, andforge snapshotinsideonchain/. - Fuzzing: scripts under
onchain/analysis/(e.g.,./analysis/run-fuzzing.sh [optimizer] debugCSV) generate replayable scenarios. - Integration: after the stack boots, inspect Anvil logs, hit
http://localhost:42069/graphqlfor Ponder, and pollhttp://127.0.0.1:43069/statusfor txnBot health.
Guardrails & Tips
token0isWethflips amount semantics; confirm ordering before seeding or interpreting liquidity.- VWAP,
ethScarcity, and Optimizer outputs operate on price^2 (X96). Avoid "normalising" to sqrt inadvertently. - Fund the LiquidityManager with Base WETH (
0x4200...0006) before expectingrecenter()to succeed. - Ponder stores data in
.ponder/; drop the directory if schema changes break migrations. - Keep git clean before committing; never leave commented-out code or untested changes.
- ES Modules: The entire stack uses ES modules. kraiken-lib, txnBot, Ponder, and web-app all require
"type": "module"in package.json and useimportsyntax. - kraiken-lib Build: Run
./scripts/build-kraiken-lib.shbeforepodman-compose upso containers mount a freshkraiken-lib/distfrom the host. - Live Reload:
scripts/watch-kraiken-lib.shrebuilds on file changes (requires inotify-tools) and restarts dependent containers automatically.
Handy Commands
foundryup- update Foundry toolchain.anvil --fork-url https://sepolia.base.org- manual fork when diagnosing outside the helper script.cast call <POOL> "slot0()"- inspect pool state.PONDER_NETWORK=BASE_SEPOLIA_LOCAL_FORK npm run dev(insideservices/ponder/) - focused indexer debugging when the full stack is already running.curl -X POST http://localhost:42069/graphql -d '{"query":"{ stats(id:\"0x01\"){kraikenTotalSupply}}"}'curl http://127.0.0.1:43069/status
References
- Deployment history:
onchain/deployments-local.json,onchain/broadcast/. - Deep dives:
TECHNICAL_APPENDIX.md,HARBERG.md, andonchain/UNISWAP_V3_MATH.md.