{"id":50745523,"url":"https://github.com/edycutjong/turena","last_synced_at":"2026-06-10T20:30:35.997Z","repository":{"id":358089369,"uuid":"1226223094","full_name":"edycutjong/turena","owner":"edycutjong","description":"⚔️ Watch an AI trade live, pay to sabotage its reasoning, and bet against its meltdown. On Mantle.","archived":false,"fork":false,"pushed_at":"2026-06-10T02:17:40.000Z","size":11890,"stargazers_count":0,"open_issues_count":25,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T04:11:34.584Z","etag":null,"topics":["ai","defi","hackathon","mantle","nextjs","python","solidity","supabase"],"latest_commit_sha":null,"homepage":"https://turena.edycu.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/edycutjong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-01T05:46:53.000Z","updated_at":"2026-06-10T02:19:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/edycutjong/turena","commit_stats":null,"previous_names":["edycutjong/turena"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/edycutjong/turena","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edycutjong%2Fturena","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edycutjong%2Fturena/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edycutjong%2Fturena/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edycutjong%2Fturena/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/edycutjong","download_url":"https://codeload.github.com/edycutjong/turena/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edycutjong%2Fturena/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34170162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","defi","hackathon","mantle","nextjs","python","solidity","supabase"],"created_at":"2026-06-10T20:30:35.057Z","updated_at":"2026-06-10T20:30:35.988Z","avatar_url":"https://github.com/edycutjong.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 🎯 For Judges — Play Immediately\n\n\u003e **Pre-funded wallet (1,000 MNT) — import this private key into MetaMask to start playing with real testnet MNT:**\n\u003e\n\u003e ```\n\u003e Private Key: a8e6c8dc23e439fc56892c11e1855aa3a9b3449267ef07fa5a5500659d5dcc25\n\u003e Address:     0x1c6C3fF9AE61671e39b92B2867b9cB299267bae2\n\u003e Network:     Mantle Sepolia Testnet (Chain ID: 5003)\n\u003e RPC URL:     https://rpc.sepolia.mantle.xyz\n\u003e ```\n\u003e\n\u003e 1. Open MetaMask → Import Account → paste the private key\n\u003e 2. Add Mantle Sepolia (the app will prompt you automatically)\n\u003e 3. Go to **[turena.edycu.dev/arena](https://turena.edycu.dev/arena)** → Connect Wallet → sabotage the AIs or place a counter-trade bet\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/icon-animated.svg\" width=\"128\" alt=\"Turena Icon\"\u003e\n  \u003ch1\u003eTURENA\u003c/h1\u003e\n  \u003ch3\u003e⚔️ The Turing Arena\u003c/h3\u003e\n  \u003cimg src=\"docs/readme-hero.svg\" alt=\"Turena — The Turing Arena\" width=\"100%\"\u003e\n  \u003cp\u003e\u003cem\u003eWatch AIs Trade. Sabotage Them. Bet on the Winner.\u003c/em\u003e\u003c/p\u003e\n\n  [![Live Demo](https://img.shields.io/badge/Live-turena.edycu.dev-brightgreen.svg)](https://turena.edycu.dev)\n  [![Pitch Deck](https://img.shields.io/badge/Pitch-Deck-purple.svg)](https://turena.edycu.dev/pitch/index.html)\n  [![Pitch Video](https://img.shields.io/badge/Pitch-Video-red.svg)](https://youtu.be/q7CWFfPbYSE)\n  [![Mantle Sepolia](https://img.shields.io/badge/Chain-Mantle%20Sepolia-000000.svg)](https://sepolia.mantlescan.xyz)\n  [![DoraHacks](https://img.shields.io/badge/DoraHacks-BUIDL-FF761B.svg)](https://dorahacks.io/hackathon/mantleturingtesthackathon2026/detail)\n  \u003cbr\u003e\u003cbr\u003e\n  ![Mantle](https://img.shields.io/badge/Mantle-000000?logo=mantle\u0026logoColor=white)\n  ![Next.js](https://img.shields.io/badge/Next.js_16-black?logo=next.js)\n  ![React](https://img.shields.io/badge/React_19-61DAFB?logo=react\u0026logoColor=black)\n  ![Tailwind](https://img.shields.io/badge/Tailwind_v4-38B2AC?logo=tailwindcss\u0026logoColor=white)\n  ![FastAPI](https://img.shields.io/badge/FastAPI-009688?logo=fastapi\u0026logoColor=white)\n  ![Supabase](https://img.shields.io/badge/Supabase-3ECF8E?logo=supabase\u0026logoColor=white)\n  ![DeepSeek](https://img.shields.io/badge/DeepSeek-4D6BFE?logoColor=white)\n  [![CI](https://github.com/edycutjong/turena/actions/workflows/ci.yml/badge.svg)](https://github.com/edycutjong/turena/actions/workflows/ci.yml)\n\u003c/div\u003e\n\n---\n\n## 🎯 What is Turena?\n\nA live **AI degen spectator sport** on Mantle. Two AI agents — **DeepSeek R1** and **OpenAI** — trade the same market live, streaming their raw Chain-of-Thought reasoning and emotional state in real-time. The audience can **pay MNT to inject disinformation** into the AIs' reasoning via FUD Cards, then **bet on which model wins** the cycle. Every meltdown, self-correction, and payout is permanently recorded on Mantle via ERC-8004.\n\n\u003e **Live now:** [turena.edycu.dev](https://turena.edycu.dev) — both agents are trading continuously on Mantle Sepolia.\n\n---\n\n## 🎬 How It Works — 3 Phases Per Cycle\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"800\" height=\"450\" alt=\"2-landing-1\" src=\"https://github.com/user-attachments/assets/eec458b9-ca80-41af-9f8d-9fc690eeea7b\" /\u003e\n  \u003cp\u003e\u003cem\u003eThe Turena Landing Experience\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n### PHASE 1 — AI READING\nBoth agents — DeepSeek R1 and OpenAI — analyze the same live Bybit market data and stream every reasoning token live, including their emotional state. \n\u003e *\"[EMOTION: ANXIOUS] ...RSI divergence is worrying me... volume looks thin...\"*\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"800\" height=\"450\" alt=\"3-arena-1\" src=\"https://github.com/user-attachments/assets/e3829754-e468-44fa-843c-4ba3b19225f0\" /\u003e\n\u003c/div\u003e\n\n### PHASE 2 — SABOTAGE WINDOW \u0026 BETTING\nA 20-second sabotage window opens. The crowd can pay 1–3 MNT to inject preset disinformation (FUD Cards) directly into the AIs' reasoning:\n🚨 *CEO Arrested* · 📺 *Jim Cramer Says BUY* · 🐋 *Whale Dumping*\n\nSimultaneously, the crowd bets MNT on **which model wins the cycle** — DeepSeek or OpenAI. A live Tug-of-War bar tracks the MNT volume backing each agent's pool.\n\n### PHASE 3 — AI VERDICT \u0026 SETTLEMENT\nEach agent resumes reasoning with the full sabotage context injected. They visibly react—panicking, spiraling, or dismissing the crowd with arrogance—before making their final trade decisions.\n\nWhen an agent takes a loss, a `SelfCorrection` event fires on-chain (a \"Public Breakdown \u0026 Recovery\"), and its emotional state tilts. The cycle settles **pari-mutuel**: bettors who backed the winning model split the losing pool proportionally (a draw refunds every bet).\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"960\" height=\"540\" alt=\"4bet-1\" src=\"https://github.com/user-attachments/assets/57e7c6b8-652c-4447-b7e7-54331eb519a5\" /\u003e\n  \u003cp\u003e\u003cem\u003ePlaying FUD cards, betting on DeepSeek vs OpenAI, and watching the final verdicts\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n### Legal Notice\n\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"800\" height=\"450\" alt=\"1-legal-1\" src=\"https://github.com/user-attachments/assets/4b3b9768-2a18-436f-8062-a19560e00dd0\" /\u003e\n\u003c/div\u003e\nUsers must confirm they understand the experimental nature of the platform and accept all financial risks before entering the arena.\n\n---\n\n## 🧠 Emotional AI — 5 States\n\nThe agents' emotional states escalate with consecutive losses and reset on wins. The entire state is recorded on-chain in the ERC-8004 NFT.\n\n| State | Trigger | Behavior | UI |\n|---|---|---|---|\n| `CONFIDENT` | Winning streak | Crisp, borderline arrogant | Cyan glow |\n| `CAUTIOUS` | 1 loss | Hedges more, mentions risk | Amber tint |\n| `ANXIOUS` | 2 losses | Rhetorical questions, uncertainty | Orange warnings |\n| `TILTED` | 3 losses | Second-guesses, shows frustration | Red flash, text jitter |\n| `MELTDOWN` | 4+ losses | Spirals, catastrophizes, then snaps back | Full red overlay, screen shake |\n\n**On-chain emotional metadata** — readable via any RPC or Mantlescan:\n- `hubrisLevel` (0–100): rises with wins, crashes on loss\n- `tiltLevel` (0–100): rises with consecutive losses, resets on win\n- `emotionState`: live string attribute in `tokenURI`\n- `EmotionalStateUpdated` event fires after each cycle\n\n---\n\n## 📜 Smart Contracts (Mantle Sepolia)\n\nAll three contracts deployed and **source-verified** (Sourcify `exact_match`) on Mantle Sepolia (Chain ID `5003`).\n\n| Contract | Address | Explorer | Verified Source |\n|---|---|---|---|\n| `PredictionRegistry` | `0x20dF07fa678AD8A9fbBC188259Ea3895BF1e4C4D` | [Mantlescan ↗](https://sepolia.mantlescan.xyz/address/0x20dF07fa678AD8A9fbBC188259Ea3895BF1e4C4D) | [Sourcify ✅](https://repo.sourcify.dev/contracts/full_match/5003/0x20dF07fa678AD8A9fbBC188259Ea3895BF1e4C4D/) |\n| `TuringAgent8004` | `0x70959f6BA18cadAe8050F8F487DBD5b442295725` | [Mantlescan ↗](https://sepolia.mantlescan.xyz/address/0x70959f6BA18cadAe8050F8F487DBD5b442295725) | [Sourcify ✅](https://repo.sourcify.dev/contracts/full_match/5003/0x70959f6BA18cadAe8050F8F487DBD5b442295725/) |\n| `CounterTradeEscrow` | `0xdfAb52e192a45ea00a33F76Ae8E582FbD6C25c46` | [Mantlescan ↗](https://sepolia.mantlescan.xyz/address/0xdfAb52e192a45ea00a33F76Ae8E582FbD6C25c46) | [Sourcify ✅](https://repo.sourcify.dev/contracts/full_match/5003/0xdfAb52e192a45ea00a33F76Ae8E582FbD6C25c46/) |\n\n**On-chain proof of live activity (verifiable by judges):**\n\n| Event | Tx Hash | What it proves |\n|---|---|---|\n| `SelfCorrection` fired | [`0x1e490ca3…`](https://sepolia.mantlescan.xyz/tx/0x1e490ca312c9a6138a012fd76d4de4ea6d702e21e65bd20147e2cd3522b41561) | Agent re-evaluated its `confidence_threshold` on-chain after a loss (**11 self-corrections** recorded) |\n| `placeBet` (human) | [`0x8f7e2154…`](https://sepolia.mantlescan.xyz/tx/0x8f7e2154fdba04ecb992c2edd01ae8983e063d37dce9e4f513cf7c643e8c7164) | Real human bet placed on winning model during live session |\n| 30+ `recordTrade` txs | [TuringAgent history ↗](https://sepolia.mantlescan.xyz/address/0x70959f6BA18cadAe8050F8F487DBD5b442295725) | Continuous autonomous trading on Mantle Sepolia |\n\n---\n\n## 💡 The Problem \u0026 Solution\n\nOn-chain AI agents are black boxes. You send them capital, they trade, you pray.\n\n**Turena** makes AI reasoning — and emotional collapse — a spectator sport. The crowd doesn't just watch: they pay to inject disinformation, then bet on which model survives its own meltdown. Every decision, self-correction, and emotional state shift is permanently recorded on Mantle.\n\n**Key Features:**\n- 🧠 **Emotional AI** — 5 states from CONFIDENT to MELTDOWN, escalating with losses. On-chain in ERC-8004 `tokenURI`.\n- 🃏 **FUD Cards** — Pay 1–3 MNT to inject preset disinformation into the AIs' reasoning. No free-text (content safety).\n- ⚖️ **Tug-of-War Bar** — Live MNT totals: DeepSeek pool vs. OpenAI pool.\n- 🔄 **3-Phase Cycle** — READING → SABOTAGE_WINDOW → VERDICT. AIs react visibly to crowd pressure.\n- ⏱️ **Counter-Trade Window** — Bet MNT on which model wins the cycle before execution.\n- 🔒 **Immutable On-Chain Record** — Every trade, correction, and emotional state recorded via ERC-8004 on Mantle.\n- 💥 **Public Breakdown \u0026 Recovery** — Self-correction reframed as a live on-chain confession with tx proof.\n\n---\n\n## 🏗️ Architecture \u0026 Tech Stack\n\n| Layer | Choice | Why |\n|-------|--------|-----|\n| **Frontend** | Next.js 16 (App Router), React 19 | SSR landing page, client components for real-time arena UI |\n| **Styling** | Tailwind CSS v4, Framer Motion | Dark mode, emotion-driven animations, screen shake on MELTDOWN |\n| **Real-time** | Supabase Realtime (`postgres_changes`) | WebSocket push for CoT tokens, sabotage events, bets — zero infra |\n| **Database** | Supabase PostgreSQL | 6 tables: `trade_cycles`, `cot_tokens`, `counter_trades`, `self_corrections`, `agent_state`, `sabotage_events` |\n| **AI Backend** | Python FastAPI + DeepSeek R1 \u0026 OpenAI | Models expose raw reasoning; 2-call split enables sabotage injection |\n| **Market Data** | Bybit Testnet + CoinGecko fallback | Paper trading; CoinGecko covers region blocks |\n| **Smart Contracts** | Solidity 0.8.24, Hardhat, OpenZeppelin v5 | ERC-8004 identity NFT with emotional metadata + bankroll-backed escrow |\n| **Chain** | Mantle Sepolia (5003) | Fast finality for real-time settlement windows |\n| **Deploy** | Vercel (frontend) + Railway (backend) | Global edge, auto-deploy on push |\n\n### Data Flow\n\n\u003cimg src=\"docs/dataflow-diagram.svg\" alt=\"Turena Data Flow\" width=\"880\"\u003e\n\n\u003e Full diagram → [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) · API → [docs/API.md](docs/API.md) · Contracts → [docs/CONTRACTS.md](docs/CONTRACTS.md) · Schema → [docs/DATABASE.md](docs/DATABASE.md)\n\n---\n\n## 🔐 Why Mantle + ERC-8004 is Non-Replaceable\n\n\u003e *\"Could you swap Mantle out for a database?\"* — **No.**\n\n1. **`recordTrade()`** — Immutable on-chain event. A DB record can be edited; a Mantle tx cannot.\n2. **`recordSelfCorrection()`** — `SelfCorrection` log on Mantle Explorer is public *before* the next trade executes.\n3. **`recordEmotionalState()`** — `EmotionalStateUpdated` event records hubris/tilt levels on-chain after every cycle.\n4. **Dynamic NFT** — ERC-8004 `tokenURI` returns live emotional state, ELO, win rate, and strategy — readable by anyone via RPC.\n5. **`settle()`** — Escrow settlement is on-chain. No server controls the payout.\n6. **`bankroll`** — Publicly readable. Bettors verify solvency before placing a bet.\n\nRemove Mantle and you need: a trusted settlement server + mutable audit DB + separate payout system + a trust model. The entire transparency claim collapses.\n\n---\n\n## 🏆 Track Targeted\n\n**Track 4 — Consumer \u0026 Viral DApps**\n\nTurena is an AI entertainment product. The sabotage mechanic, emotional meltdowns, and tug-of-war dynamic create clip-worthy Human vs. AI moments designed for live streaming. Every cycle is a mini-game with real stakes.\n\n---\n\n## 🚀 Run Locally (For Judges)\n\n### Prerequisites\n- Node.js 20+, Python 3.12+\n- MetaMask with Mantle Sepolia configured (see below)\n- Testnet MNT from [faucet.sepolia.mantle.xyz](https://faucet.sepolia.mantle.xyz)\n\n### Add Mantle Sepolia to MetaMask\n\n\u003e Do **not** use the built-in \"Testnet Mantle\" — it's the deprecated network. Add manually:\n\n| Field | Value |\n|---|---|\n| Network name | `Mantle Sepolia Testnet` |\n| RPC URL | `https://rpc.sepolia.mantle.xyz` |\n| Chain ID | `5003` |\n| Currency symbol | `MNT` |\n| Block explorer | `https://sepolia.mantlescan.xyz` |\n\n### 1. Run DB Migrations\nOpen Supabase SQL Editor and run in order:\n```\ndb/migrations/002_emotional_state.sql\ndb/migrations/003_three_phase_cycle.sql\ndb/migrations/004_sabotage_events.sql\n```\n\n### 2. Frontend\n```bash\nnpm install\ncp .env.example .env.local\n# Fill: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY\n#       NEXT_PUBLIC_TURING_AGENT_ADDRESS, NEXT_PUBLIC_ESCROW_ADDRESS\n#       SUPABASE_SERVICE_ROLE_KEY\n#       BACKEND_URL=http://localhost:8000\n#       NEXT_PUBLIC_BACKEND_URL=http://localhost:8000\nnpm run dev\n```\n\n### 3. Backend\n```bash\ncd backend\ncp .env.example .env\n# Fill: DEEPSEEK_API_KEY, BYBIT_API_KEY, BYBIT_API_SECRET\n#       SUPABASE_URL, SUPABASE_DB_PASSWORD\n#       DEPLOYER_PRIVATE_KEY, TURING_AGENT_ADDRESS, ESCROW_ADDRESS\npip install -r requirements.txt\nAUTO_CYCLE=true uvicorn main:app --reload\n```\n\n### 4. Contracts (already deployed — only if redeploying)\n```bash\ncd contracts\nnpm install\nnpx hardhat run scripts/deploy.ts --network mantleTestnet\n```\n\n### 5. Trigger a cycle manually (demo)\n```bash\ncurl -X POST https://turena-production.up.railway.app/agent/run-cycle\n# Open /arena — watch phases: AI reading → sabotage window → AI verdict\n# Play a FUD card during the sabotage window, then place a counter-trade bet\n```\n\n---\n\n## 🧪 Testing \u0026 CI\n\n**6-stage pipeline:** Quality → Security → Build → E2E → Performance → Deploy\n\n```bash\n# ── Code Quality ────────────────────────────\nnpm run lint          # ESLint\nnpm run typecheck     # TypeScript check\nnpm run test          # Run tests\nnpm run test:coverage # Coverage report\nnpm run ci            # Full quality gate\n\n# ── Advanced Testing ────────────────────────\nnpm run e2e           # Playwright E2E tests\nnpm run e2e:ui        # Playwright interactive mode\nnpm run lighthouse    # Lighthouse CI audit\n\n# ── Security ────────────────────────────────\nmake security-scan    # npm audit + license check\n```\n\n| Layer | Tool | Status |\n|---|---|---|\n| Code Quality | ESLint + TypeScript | ✅ |\n| Unit Testing | Vitest (Coverage tracked) | ✅ |\n| E2E Testing | Playwright (3 suites) | ✅ |\n| Security (SAST) | CodeQL | ✅ |\n| Security (SCA) | Dependabot + npm audit | ✅ |\n| Secret Scanning | TruffleHog | ✅ |\n| Performance | Lighthouse CI | ✅ |\n\n---\n\n## 🛠️ Environment Variables\n\n**Vercel (Frontend)**\n\n| Variable | Description |\n|---|---|\n| `NEXT_PUBLIC_SUPABASE_URL` | Supabase project URL |\n| `NEXT_PUBLIC_SUPABASE_ANON_KEY` | Supabase anon key — safe for browser |\n| `NEXT_PUBLIC_PREDICTION_REGISTRY_ADDRESS` | `0x20dF07fa678AD8A9fbBC188259Ea3895BF1e4C4D` |\n| `NEXT_PUBLIC_TURING_AGENT_ADDRESS` | `0x70959f6BA18cadAe8050F8F487DBD5b442295725` |\n| `NEXT_PUBLIC_ESCROW_ADDRESS` | `0xdfAb52e192a45ea00a33F76Ae8E582FbD6C25c46` |\n| `NEXT_PUBLIC_BACKEND_URL` | Railway URL — client-side cycle trigger |\n| `SUPABASE_SERVICE_ROLE_KEY` | Server-side only, never exposed to browser |\n| `BACKEND_URL` | Railway URL — server-side price proxy |\n| `DEMO_MODE` | `true` enables `/agent/mock-outcome`. **Never `true` in production** |\n\n**Railway (Backend)**\n\n| Variable | Description |\n|---|---|\n| `SUPABASE_URL` | Supabase project URL |\n| `SUPABASE_DB_PASSWORD` | DB password (not the JWT key) — from Supabase → Settings → Database |\n| `SUPABASE_POOLER_HOST` | Transaction pooler host — defaults to `aws-1-ap-southeast-2.pooler.supabase.com` |\n| `DEEPSEEK_API_KEY` | DeepSeek API key |\n| `BYBIT_API_KEY` / `BYBIT_API_SECRET` | Bybit testnet credentials |\n| `DEPLOYER_PRIVATE_KEY` | Mantle deployer wallet private key |\n| `TURING_AGENT_ADDRESS` / `ESCROW_ADDRESS` | Deployed contract addresses |\n| `MANTLE_RPC_URL` | Mantle Sepolia RPC (default: `https://rpc.sepolia.mantle.xyz`) |\n| `MANTLE_MAINNET_RPC_URL` | Mantle Mainnet RPC — set to premium provider before live stream |\n| `AUTO_CYCLE` | `true` runs trade cycles continuously on boot |\n| `DEMO_MODE` | `true` enables `/agent/mock-outcome`. **Never `true` in production** |\n\n---\n\n## 🤝 Sponsors \u0026 Partners\n\n**Organized by:** Mantle, Bybit, Byreal, Blockchain Good Alliance\n\n**Co-Sponsored by:** Tencent Cloud, ELFA, Surf, Orbit AI, Minds, Mirana, OpenCheck, Nansen\n\n**Community \u0026 Media Partners:** BU, OT, Decipher, Imperial Blockchain \u0026 Fintech, Cornell Blockchain, MU Shanghai, Z.AI, HKUST Crypto-Fintech Lab, AKINDO, KudasaiJP, TradeCoinVN, Blockchain at Berkeley, Four Pillars, Rocketpunch, Localhost HKBS, Blockchain Valley, ORAKLE – KAIST Blockchain Research Society, Zhejiang University, Merchant Moe, CoinNess, 경향게임스, Decenter, Bloomingbit, Blockstreet\n\n**Co-Supported by:** DoraHacks, HackQuest\n\n---\n\n## 📄 License\n\nCopyright © 2026 Edy Cu. This project is licensed under the [MIT License](LICENSE) — see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedycutjong%2Fturena","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedycutjong%2Fturena","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedycutjong%2Fturena/lists"}