Created
March 25, 2026 15:24
-
-
Save zmanian/3a49d402629edcf6edb4516472851f20 to your computer and use it in GitHub Desktop.
Cosmos Hub Economic Primitives: Pool Minimalism (v2)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Pool Minimalism — A New Security Architecture for Cosmos Hub DeFi</title> | |
| <meta name="description" content="How ATOM Intents evolves into a complete economic primitives stack for Cosmos Hub using pool-minimal architecture."> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
| <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=IBM+Plex+Mono:wght@400;500;600&family=Source+Sans+3:ital,wght@0,300;0,400;0,600;0,700;1,400&display=swap" rel="stylesheet"> | |
| <style> | |
| :root { | |
| --bg: #0a0b0d; | |
| --bg-elevated: #111318; | |
| --bg-card: #161920; | |
| --bg-card-hover: #1c1f28; | |
| --text: #e2e4e9; | |
| --text-dim: #8b8f9a; | |
| --text-muted: #5a5e6a; | |
| --accent: #6ee7b7; | |
| --accent-dim: #34d399; | |
| --accent-glow: rgba(110, 231, 183, 0.12); | |
| --danger: #f87171; | |
| --danger-dim: rgba(248, 113, 113, 0.15); | |
| --warning: #fbbf24; | |
| --blue: #60a5fa; | |
| --purple: #a78bfa; | |
| --border: rgba(255,255,255,0.06); | |
| --border-accent: rgba(110, 231, 183, 0.2); | |
| --font-display: 'DM Serif Display', Georgia, serif; | |
| --font-body: 'Source Sans 3', -apple-system, sans-serif; | |
| --font-mono: 'IBM Plex Mono', 'SF Mono', monospace; | |
| --max-w: 840px; | |
| --max-w-wide: 1080px; | |
| } | |
| * { margin: 0; padding: 0; box-sizing: border-box; } | |
| html { scroll-behavior: smooth; } | |
| body { | |
| background: var(--bg); | |
| color: var(--text); | |
| font-family: var(--font-body); | |
| font-size: 17px; | |
| line-height: 1.7; | |
| -webkit-font-smoothing: antialiased; | |
| overflow-x: hidden; | |
| } | |
| ::selection { | |
| background: rgba(110, 231, 183, 0.25); | |
| color: #fff; | |
| } | |
| /* ---- NOISE OVERLAY ---- */ | |
| body::before { | |
| content: ''; | |
| position: fixed; | |
| inset: 0; | |
| opacity: 0.025; | |
| background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); | |
| pointer-events: none; | |
| z-index: 9999; | |
| } | |
| /* ---- TOP NAV ---- */ | |
| .topnav { | |
| position: fixed; | |
| top: 0; left: 0; right: 0; | |
| z-index: 100; | |
| background: rgba(10,11,13,0.85); | |
| backdrop-filter: blur(16px); | |
| border-bottom: 1px solid var(--border); | |
| padding: 0 24px; | |
| transition: transform 0.3s; | |
| } | |
| .topnav-inner { | |
| max-width: var(--max-w-wide); | |
| margin: 0 auto; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| height: 56px; | |
| } | |
| .topnav-brand { | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: var(--accent); | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| } | |
| .topnav-links { display: flex; gap: 28px; } | |
| .topnav-links a { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--text-dim); | |
| text-decoration: none; | |
| letter-spacing: 0.04em; | |
| transition: color 0.2s; | |
| } | |
| .topnav-links a:hover { color: var(--accent); } | |
| /* ---- HERO ---- */ | |
| .hero { | |
| min-height: 100vh; | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| padding: 120px 24px 80px; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .hero::before { | |
| content: ''; | |
| position: absolute; | |
| top: -200px; right: -200px; | |
| width: 700px; height: 700px; | |
| background: radial-gradient(circle, rgba(110,231,183,0.06) 0%, transparent 70%); | |
| pointer-events: none; | |
| } | |
| .hero::after { | |
| content: ''; | |
| position: absolute; | |
| bottom: -100px; left: -100px; | |
| width: 500px; height: 500px; | |
| background: radial-gradient(circle, rgba(96,165,250,0.04) 0%, transparent 70%); | |
| pointer-events: none; | |
| } | |
| .hero-inner { | |
| max-width: var(--max-w); | |
| margin: 0 auto; | |
| position: relative; | |
| z-index: 1; | |
| } | |
| .hero-label { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| font-weight: 500; | |
| color: var(--accent); | |
| letter-spacing: 0.12em; | |
| text-transform: uppercase; | |
| margin-bottom: 24px; | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .hero-label::before { | |
| content: ''; | |
| display: block; | |
| width: 32px; height: 1px; | |
| background: var(--accent); | |
| } | |
| .hero h1 { | |
| font-family: var(--font-display); | |
| font-size: clamp(40px, 6vw, 72px); | |
| font-weight: 400; | |
| line-height: 1.08; | |
| letter-spacing: -0.02em; | |
| color: #fff; | |
| margin-bottom: 28px; | |
| } | |
| .hero h1 em { | |
| font-style: italic; | |
| color: var(--accent); | |
| } | |
| .hero-subtitle { | |
| font-size: 20px; | |
| line-height: 1.6; | |
| color: var(--text-dim); | |
| max-width: 600px; | |
| margin-bottom: 40px; | |
| } | |
| .hero-stats { | |
| display: flex; | |
| gap: 40px; | |
| padding-top: 32px; | |
| border-top: 1px solid var(--border); | |
| } | |
| .hero-stat-value { | |
| font-family: var(--font-mono); | |
| font-size: 28px; | |
| font-weight: 600; | |
| color: var(--danger); | |
| letter-spacing: -0.02em; | |
| } | |
| .hero-stat-value.green { color: var(--accent); } | |
| .hero-stat-label { | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| color: var(--text-muted); | |
| letter-spacing: 0.06em; | |
| text-transform: uppercase; | |
| margin-top: 4px; | |
| } | |
| /* ---- SECTIONS ---- */ | |
| section { | |
| padding: 100px 24px; | |
| position: relative; | |
| } | |
| section + section { border-top: 1px solid var(--border); } | |
| .section-inner { | |
| max-width: var(--max-w); | |
| margin: 0 auto; | |
| } | |
| .section-wide { | |
| max-width: var(--max-w-wide); | |
| margin: 0 auto; | |
| } | |
| .section-label { | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| font-weight: 600; | |
| color: var(--accent); | |
| letter-spacing: 0.14em; | |
| text-transform: uppercase; | |
| margin-bottom: 16px; | |
| } | |
| h2 { | |
| font-family: var(--font-display); | |
| font-size: clamp(28px, 4vw, 42px); | |
| font-weight: 400; | |
| line-height: 1.15; | |
| color: #fff; | |
| margin-bottom: 24px; | |
| } | |
| h3 { | |
| font-family: var(--font-display); | |
| font-size: 24px; | |
| font-weight: 400; | |
| color: #fff; | |
| margin-bottom: 16px; | |
| margin-top: 48px; | |
| } | |
| h3:first-child { margin-top: 0; } | |
| p { margin-bottom: 20px; color: var(--text-dim); } | |
| p strong { color: var(--text); font-weight: 600; } | |
| /* ---- EXPLOIT TABLE ---- */ | |
| .exploit-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); | |
| gap: 16px; | |
| margin: 32px 0; | |
| } | |
| .exploit-card { | |
| background: var(--danger-dim); | |
| border: 1px solid rgba(248,113,113,0.15); | |
| border-radius: 10px; | |
| padding: 20px; | |
| transition: transform 0.2s, border-color 0.2s; | |
| } | |
| .exploit-card:hover { | |
| transform: translateY(-2px); | |
| border-color: rgba(248,113,113,0.3); | |
| } | |
| .exploit-name { | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: var(--danger); | |
| margin-bottom: 4px; | |
| } | |
| .exploit-amount { | |
| font-family: var(--font-mono); | |
| font-size: 26px; | |
| font-weight: 600; | |
| color: #fff; | |
| letter-spacing: -0.02em; | |
| } | |
| .exploit-vector { | |
| font-size: 13px; | |
| color: var(--text-muted); | |
| margin-top: 8px; | |
| line-height: 1.4; | |
| } | |
| /* ---- COMPARISON DIAGRAM ---- */ | |
| .compare-flows { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 24px; | |
| margin: 40px 0; | |
| } | |
| @media (max-width: 700px) { | |
| .compare-flows { grid-template-columns: 1fr; } | |
| } | |
| .flow-card { | |
| border-radius: 12px; | |
| padding: 28px; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .flow-card.bad { | |
| background: linear-gradient(135deg, rgba(248,113,113,0.08), rgba(248,113,113,0.02)); | |
| border: 1px solid rgba(248,113,113,0.12); | |
| } | |
| .flow-card.good { | |
| background: linear-gradient(135deg, rgba(110,231,183,0.08), rgba(110,231,183,0.02)); | |
| border: 1px solid rgba(110,231,183,0.12); | |
| } | |
| .flow-card-label { | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.1em; | |
| text-transform: uppercase; | |
| margin-bottom: 16px; | |
| } | |
| .flow-card.bad .flow-card-label { color: var(--danger); } | |
| .flow-card.good .flow-card-label { color: var(--accent); } | |
| .flow-step { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 12px; | |
| margin-bottom: 12px; | |
| font-size: 14px; | |
| color: var(--text-dim); | |
| line-height: 1.5; | |
| } | |
| .flow-step .arrow { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--text-muted); | |
| margin-top: 2px; | |
| flex-shrink: 0; | |
| } | |
| .flow-card.bad .highlight { color: var(--danger); font-weight: 600; } | |
| .flow-card.good .highlight { color: var(--accent); font-weight: 600; } | |
| /* ---- TIERED ARCHITECTURE ---- */ | |
| .arch-tiers { | |
| display: grid; | |
| grid-template-columns: repeat(3, 1fr); | |
| gap: 20px; | |
| margin: 40px 0; | |
| } | |
| @media (max-width: 800px) { | |
| .arch-tiers { grid-template-columns: 1fr; } | |
| } | |
| .tier-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 12px; | |
| padding: 28px 24px; | |
| position: relative; | |
| transition: border-color 0.3s, transform 0.2s; | |
| } | |
| .tier-card:hover { | |
| border-color: var(--border-accent); | |
| transform: translateY(-2px); | |
| } | |
| .tier-number { | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| font-weight: 600; | |
| color: var(--accent); | |
| letter-spacing: 0.1em; | |
| text-transform: uppercase; | |
| margin-bottom: 12px; | |
| } | |
| .tier-card h4 { | |
| font-family: var(--font-display); | |
| font-size: 20px; | |
| color: #fff; | |
| margin-bottom: 8px; | |
| } | |
| .tier-card .pairs { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--accent-dim); | |
| margin-bottom: 14px; | |
| } | |
| .tier-card p { font-size: 15px; margin-bottom: 16px; } | |
| .pool-badge { | |
| display: inline-block; | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.06em; | |
| text-transform: uppercase; | |
| padding: 4px 10px; | |
| border-radius: 6px; | |
| } | |
| .pool-badge.zero { | |
| background: rgba(110,231,183,0.1); | |
| color: var(--accent); | |
| border: 1px solid rgba(110,231,183,0.2); | |
| } | |
| .pool-badge.bounded { | |
| background: rgba(251,191,36,0.1); | |
| color: var(--warning); | |
| border: 1px solid rgba(251,191,36,0.2); | |
| } | |
| /* ---- LENDING FLOW ---- */ | |
| .lending-flow { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 16px; | |
| padding: 36px; | |
| margin: 40px 0; | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .lending-flow::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; left: 0; right: 0; | |
| height: 2px; | |
| background: linear-gradient(90deg, var(--accent), var(--blue), var(--purple)); | |
| } | |
| .lending-flow-steps { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); | |
| gap: 24px; | |
| counter-reset: step; | |
| } | |
| .lending-step { | |
| counter-increment: step; | |
| position: relative; | |
| padding-left: 0; | |
| } | |
| .lending-step::before { | |
| content: counter(step); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 32px; height: 32px; | |
| border-radius: 50%; | |
| background: var(--accent-glow); | |
| border: 1px solid var(--border-accent); | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: var(--accent); | |
| margin-bottom: 12px; | |
| } | |
| .lending-step-title { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: #fff; | |
| letter-spacing: 0.04em; | |
| margin-bottom: 6px; | |
| } | |
| .lending-step p { font-size: 14px; margin-bottom: 0; } | |
| /* ---- COMPARISON TABLE ---- */ | |
| .comparison-table { | |
| width: 100%; | |
| border-collapse: separate; | |
| border-spacing: 0; | |
| margin: 32px 0; | |
| font-size: 14px; | |
| overflow: hidden; | |
| border-radius: 12px; | |
| border: 1px solid var(--border); | |
| } | |
| .comparison-table thead th { | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| color: var(--text-muted); | |
| padding: 14px 16px; | |
| text-align: left; | |
| background: var(--bg-card); | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .comparison-table tbody td { | |
| padding: 14px 16px; | |
| border-bottom: 1px solid var(--border); | |
| color: var(--text-dim); | |
| vertical-align: top; | |
| } | |
| .comparison-table tbody tr:last-child td { border-bottom: none; } | |
| .comparison-table tbody tr:hover td { background: var(--bg-card); } | |
| .comparison-table .label-cell { | |
| font-weight: 600; | |
| color: var(--text); | |
| white-space: nowrap; | |
| } | |
| .comparison-table .bad-cell { color: var(--danger); } | |
| .comparison-table .good-cell { color: var(--accent); } | |
| /* ---- STACK DIAGRAM ---- */ | |
| .stack-diagram { | |
| margin: 48px 0; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .stack-layer { | |
| border-radius: 12px; | |
| padding: 20px 24px; | |
| position: relative; | |
| overflow: hidden; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 16px; | |
| transition: transform 0.2s; | |
| } | |
| .stack-layer:hover { transform: translateX(4px); } | |
| .stack-layer-name { | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: #fff; | |
| white-space: nowrap; | |
| } | |
| .stack-layer-desc { | |
| font-size: 14px; | |
| color: var(--text-dim); | |
| flex: 1; | |
| text-align: right; | |
| } | |
| .stack-layer.l-user { | |
| background: linear-gradient(135deg, rgba(167,139,250,0.12), rgba(167,139,250,0.04)); | |
| border: 1px solid rgba(167,139,250,0.15); | |
| } | |
| .stack-layer.l-coord { | |
| background: linear-gradient(135deg, rgba(96,165,250,0.12), rgba(96,165,250,0.04)); | |
| border: 1px solid rgba(96,165,250,0.15); | |
| } | |
| .stack-layer.l-settle { | |
| background: linear-gradient(135deg, rgba(110,231,183,0.12), rgba(110,231,183,0.04)); | |
| border: 1px solid rgba(110,231,183,0.15); | |
| } | |
| .stack-layer.l-lend { | |
| background: linear-gradient(135deg, rgba(251,191,36,0.12), rgba(251,191,36,0.04)); | |
| border: 1px solid rgba(251,191,36,0.15); | |
| } | |
| .stack-layer.l-found { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| } | |
| .stack-connector { | |
| display: flex; | |
| justify-content: center; | |
| color: var(--text-muted); | |
| font-size: 12px; | |
| } | |
| /* ---- TIMELINE ---- */ | |
| .timeline { | |
| position: relative; | |
| margin: 48px 0; | |
| padding-left: 40px; | |
| } | |
| .timeline::before { | |
| content: ''; | |
| position: absolute; | |
| left: 15px; top: 0; bottom: 0; | |
| width: 2px; | |
| background: linear-gradient(to bottom, var(--accent), var(--blue), var(--purple), var(--text-muted)); | |
| border-radius: 2px; | |
| } | |
| .timeline-phase { | |
| position: relative; | |
| margin-bottom: 48px; | |
| } | |
| .timeline-phase:last-child { margin-bottom: 0; } | |
| .timeline-dot { | |
| position: absolute; | |
| left: -33px; top: 4px; | |
| width: 12px; height: 12px; | |
| border-radius: 50%; | |
| border: 2px solid var(--accent); | |
| background: var(--bg); | |
| } | |
| .timeline-phase:nth-child(2) .timeline-dot { border-color: var(--blue); } | |
| .timeline-phase:nth-child(3) .timeline-dot { border-color: var(--purple); } | |
| .timeline-phase:nth-child(4) .timeline-dot { border-color: var(--text-muted); } | |
| .phase-name { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| font-weight: 600; | |
| letter-spacing: 0.1em; | |
| text-transform: uppercase; | |
| color: var(--accent); | |
| margin-bottom: 12px; | |
| } | |
| .timeline-phase:nth-child(2) .phase-name { color: var(--blue); } | |
| .timeline-phase:nth-child(3) .phase-name { color: var(--purple); } | |
| .timeline-phase:nth-child(4) .phase-name { color: var(--text-muted); } | |
| .timeline-items { display: flex; flex-direction: column; gap: 8px; } | |
| .timeline-item { | |
| font-size: 15px; | |
| color: var(--text-dim); | |
| display: flex; | |
| align-items: baseline; | |
| gap: 8px; | |
| } | |
| .timeline-item .marker { | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| color: var(--text-muted); | |
| flex-shrink: 0; | |
| } | |
| .timeline-item .done { | |
| color: var(--accent); | |
| font-weight: 600; | |
| } | |
| .timeline-item .active { | |
| color: var(--blue); | |
| font-weight: 600; | |
| } | |
| /* ---- FLYWHEEL ---- */ | |
| .flywheel { | |
| display: flex; | |
| flex-wrap: wrap; | |
| justify-content: center; | |
| gap: 0; | |
| margin: 48px auto; | |
| max-width: 640px; | |
| position: relative; | |
| } | |
| .flywheel-step { | |
| width: 180px; | |
| text-align: center; | |
| padding: 16px; | |
| position: relative; | |
| } | |
| .flywheel-icon { | |
| font-size: 24px; | |
| margin-bottom: 8px; | |
| } | |
| .flywheel-text { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--text-dim); | |
| line-height: 1.5; | |
| } | |
| .flywheel-arrow { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 40px; | |
| font-size: 18px; | |
| color: var(--text-muted); | |
| } | |
| /* ---- REVENUE TABLE ---- */ | |
| .revenue-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); | |
| gap: 16px; | |
| margin: 32px 0; | |
| } | |
| .revenue-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 10px; | |
| padding: 20px; | |
| transition: border-color 0.2s; | |
| } | |
| .revenue-card:hover { border-color: var(--border-accent); } | |
| .revenue-source { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: var(--accent); | |
| letter-spacing: 0.04em; | |
| margin-bottom: 6px; | |
| } | |
| .revenue-mech { | |
| font-size: 14px; | |
| color: var(--text-dim); | |
| margin-bottom: 0; | |
| } | |
| /* ---- INSIGHT CALLOUT ---- */ | |
| .callout { | |
| border-radius: 12px; | |
| padding: 24px 28px; | |
| margin: 32px 0; | |
| position: relative; | |
| } | |
| .callout.insight { | |
| background: var(--accent-glow); | |
| border: 1px solid var(--border-accent); | |
| } | |
| .callout.insight::before { | |
| content: 'KEY INSIGHT'; | |
| font-family: var(--font-mono); | |
| font-size: 10px; | |
| font-weight: 600; | |
| letter-spacing: 0.12em; | |
| color: var(--accent); | |
| display: block; | |
| margin-bottom: 8px; | |
| } | |
| .callout p { color: var(--text); margin-bottom: 0; font-size: 16px; } | |
| .callout p em { color: var(--accent); font-style: normal; font-weight: 600; } | |
| /* ---- QUOTE BLOCK ---- */ | |
| blockquote { | |
| border-left: 3px solid var(--accent); | |
| padding: 16px 24px; | |
| margin: 32px 0; | |
| background: rgba(110,231,183,0.04); | |
| border-radius: 0 8px 8px 0; | |
| } | |
| blockquote p { color: var(--text); font-size: 18px; font-style: italic; margin-bottom: 0; } | |
| blockquote cite { | |
| display: block; | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--text-muted); | |
| font-style: normal; | |
| margin-top: 8px; | |
| } | |
| /* ---- CODE BLOCK ---- */ | |
| .code-block { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 10px; | |
| padding: 20px 24px; | |
| margin: 24px 0; | |
| overflow-x: auto; | |
| } | |
| .code-block code { | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| color: var(--text-dim); | |
| line-height: 1.7; | |
| white-space: pre; | |
| display: block; | |
| } | |
| .code-block .kw { color: var(--purple); } | |
| .code-block .ty { color: var(--blue); } | |
| .code-block .cm { color: var(--text-muted); font-style: italic; } | |
| .code-block .st { color: var(--accent); } | |
| .code-block .fn { color: var(--warning); } | |
| /* ---- SOLVER EXTENSION DIAGRAM ---- */ | |
| .solver-extend { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| margin: 32px 0; | |
| border-radius: 12px; | |
| overflow: hidden; | |
| } | |
| .solver-extend-row { | |
| display: grid; | |
| grid-template-columns: 140px 1fr; | |
| background: var(--bg-card); | |
| transition: background 0.2s; | |
| } | |
| .solver-extend-row:hover { background: var(--bg-card-hover); } | |
| .solver-extend-label { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| text-align: center; | |
| padding: 16px 12px; | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| font-weight: 600; | |
| line-height: 1.4; | |
| border-right: 2px solid var(--bg); | |
| } | |
| .solver-extend-label span { | |
| display: block; | |
| font-weight: 400; | |
| font-size: 10px; | |
| color: var(--text-muted); | |
| margin-top: 2px; | |
| } | |
| .solver-extend-label.trading { color: var(--accent); background: rgba(110,231,183,0.06); } | |
| .solver-extend-label.lending { color: var(--blue); background: rgba(96,165,250,0.06); } | |
| .solver-extend-label.liquidation { color: var(--warning); background: rgba(251,191,36,0.06); } | |
| .solver-extend-label.future { color: var(--purple); background: rgba(167,139,250,0.06); } | |
| .solver-extend-steps { | |
| display: grid; | |
| grid-template-columns: 1fr auto 1fr auto 1fr; | |
| align-items: center; | |
| padding: 16px 20px; | |
| gap: 8px; | |
| } | |
| .solver-extend-step { min-width: 0; } | |
| .se-step-label { | |
| font-family: var(--font-mono); | |
| font-size: 10px; | |
| font-weight: 600; | |
| color: var(--text-muted); | |
| letter-spacing: 0.08em; | |
| text-transform: uppercase; | |
| margin-bottom: 4px; | |
| } | |
| .se-step-detail { | |
| font-size: 13px; | |
| color: var(--text-dim); | |
| line-height: 1.4; | |
| } | |
| .se-arrow { | |
| color: var(--text-muted); | |
| font-size: 14px; | |
| text-align: center; | |
| flex-shrink: 0; | |
| } | |
| @media (max-width: 800px) { | |
| .solver-extend-row { grid-template-columns: 1fr; } | |
| .solver-extend-label { border-right: none; border-bottom: 2px solid var(--bg); padding: 12px; } | |
| .solver-extend-steps { | |
| grid-template-columns: 1fr; | |
| gap: 12px; | |
| padding: 16px; | |
| } | |
| .se-arrow { display: none; } | |
| } | |
| /* ---- ORDERFLOW DIAGRAM ---- */ | |
| .orderflow-diagram { | |
| display: grid; | |
| grid-template-columns: 1fr auto 1fr; | |
| gap: 16px; | |
| align-items: center; | |
| margin: 40px 0; | |
| padding: 32px; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 16px; | |
| } | |
| @media (max-width: 700px) { | |
| .orderflow-diagram { | |
| grid-template-columns: 1fr; | |
| text-align: center; | |
| } | |
| } | |
| .of-side { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 12px; | |
| } | |
| .of-item { | |
| font-family: var(--font-mono); | |
| font-size: 13px; | |
| padding: 10px 14px; | |
| border-radius: 8px; | |
| text-align: center; | |
| } | |
| .of-item.retail { | |
| background: rgba(110,231,183,0.08); | |
| border: 1px solid rgba(110,231,183,0.15); | |
| color: var(--accent); | |
| } | |
| .of-item.toxic { | |
| background: var(--danger-dim); | |
| border: 1px solid rgba(248,113,113,0.12); | |
| color: var(--danger); | |
| } | |
| .of-item.solver { | |
| background: rgba(96,165,250,0.08); | |
| border: 1px solid rgba(96,165,250,0.15); | |
| color: var(--blue); | |
| } | |
| .of-center { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .of-center-label { | |
| font-family: var(--font-mono); | |
| font-size: 11px; | |
| color: var(--text-muted); | |
| text-transform: uppercase; | |
| letter-spacing: 0.1em; | |
| } | |
| .of-arrow { | |
| font-size: 20px; | |
| color: var(--text-muted); | |
| } | |
| /* ---- FOOTER ---- */ | |
| footer { | |
| padding: 60px 24px; | |
| border-top: 1px solid var(--border); | |
| text-align: center; | |
| } | |
| footer p { | |
| font-family: var(--font-mono); | |
| font-size: 12px; | |
| color: var(--text-muted); | |
| } | |
| footer a { | |
| color: var(--accent); | |
| text-decoration: none; | |
| } | |
| /* ---- ANIMATIONS ---- */ | |
| .reveal { | |
| opacity: 0; | |
| transform: translateY(20px); | |
| transition: opacity 0.6s ease, transform 0.6s ease; | |
| } | |
| .reveal.visible { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| .stagger-1 { transition-delay: 0.1s; } | |
| .stagger-2 { transition-delay: 0.2s; } | |
| .stagger-3 { transition-delay: 0.3s; } | |
| .stagger-4 { transition-delay: 0.4s; } | |
| /* ---- RESPONSIVE ---- */ | |
| @media (max-width: 600px) { | |
| .hero-stats { flex-direction: column; gap: 20px; } | |
| .arch-tiers { grid-template-columns: 1fr; } | |
| .lending-flow-steps { grid-template-columns: 1fr; } | |
| .exploit-grid { grid-template-columns: 1fr; } | |
| section { padding: 64px 20px; } | |
| .topnav-links { display: none; } | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <!-- NAV --> | |
| <nav class="topnav"> | |
| <div class="topnav-inner"> | |
| <div class="topnav-brand">Cosmos Hub // Economic Primitives</div> | |
| <div class="topnav-links"> | |
| <a href="#pool-minimalism">Pool Minimalism</a> | |
| <a href="#dex-architecture">DEX Architecture</a> | |
| <a href="#lending">Lending</a> | |
| <a href="#stack">Full Stack</a> | |
| <a href="#roadmap">Roadmap</a> | |
| </div> | |
| </div> | |
| </nav> | |
| <!-- HERO --> | |
| <header class="hero"> | |
| <div class="hero-inner"> | |
| <div class="hero-label reveal">Cosmos Hub Research</div> | |
| <h1 class="reveal stagger-1"><em>Pool Minimalism</em><br>A New Security Architecture<br>for Hub DeFi</h1> | |
| <p class="hero-subtitle reveal stagger-2">How ATOM Intents evolves from a trading system into a complete economic primitives stack — with minimal attack surface, CEX-competitive spreads, and no $500M honeypots.</p> | |
| <div class="hero-stats reveal stagger-3"> | |
| <div> | |
| <div class="hero-stat-value">$701M+</div> | |
| <div class="hero-stat-label">Drained from DeFi pools<br>(Euler + Curve + Mango + Wormhole)</div> | |
| </div> | |
| <div> | |
| <div class="hero-stat-value green">~0</div> | |
| <div class="hero-stat-label">Permanent on-chain TVL<br>under pool minimalism</div> | |
| </div> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- POOL MINIMALISM --> | |
| <section id="pool-minimalism"> | |
| <div class="section-inner"> | |
| <div class="section-label reveal">The Design Principle</div> | |
| <h2 class="reveal">Every TVL dollar is a bounty</h2> | |
| <p class="reveal">The history of DeFi exploits is overwhelmingly a history of pool drains. Large shared liquidity pools are permanent honeypots — a $500M lending pool is a $500M bounty for every attacker in the world, forever. The security budget scales with pool size, and <strong>defenders always lose eventually.</strong></p> | |
| <div class="exploit-grid reveal"> | |
| <div class="exploit-card"> | |
| <div class="exploit-name">Euler Finance</div> | |
| <div class="exploit-amount">$197M</div> | |
| <div class="exploit-vector">Donation attack on lending pool</div> | |
| </div> | |
| <div class="exploit-card"> | |
| <div class="exploit-name">Wormhole</div> | |
| <div class="exploit-amount">$320M</div> | |
| <div class="exploit-vector">Bridge pool drained via forged messages</div> | |
| </div> | |
| <div class="exploit-card"> | |
| <div class="exploit-name">Mango Markets</div> | |
| <div class="exploit-amount">$114M</div> | |
| <div class="exploit-vector">Oracle manipulation draining pools</div> | |
| </div> | |
| <div class="exploit-card"> | |
| <div class="exploit-name">Curve Finance</div> | |
| <div class="exploit-amount">$70M</div> | |
| <div class="exploit-vector">Vyper reentrancy in pool contracts</div> | |
| </div> | |
| </div> | |
| <h3 class="reveal">The alternative: coordination, not custody</h3> | |
| <p class="reveal"><strong>Pool Minimalism</strong> means pools are a last resort, not a default. When they exist, they're small, isolated, and bounded. The preferred architecture routes capital through solver-mediated atomic settlement where funds are on-chain for seconds, not parked indefinitely.</p> | |
| <div class="compare-flows reveal"> | |
| <div class="flow-card bad"> | |
| <div class="flow-card-label">Pool-Based DeFi</div> | |
| <div class="flow-step"><span class="arrow">→</span> User deposits into shared pool</div> | |
| <div class="flow-step"><span class="arrow">→</span> Pool holds <span class="highlight">$500M permanently</span></div> | |
| <div class="flow-step"><span class="arrow">→</span> Every attacker targets the pool forever</div> | |
| <div class="flow-step"><span class="arrow">→</span> One bug = <span class="highlight">total drain</span></div> | |
| </div> | |
| <div class="flow-card good"> | |
| <div class="flow-card-label">Pool-Minimal DeFi</div> | |
| <div class="flow-step"><span class="arrow">→</span> User signs intent</div> | |
| <div class="flow-step"><span class="arrow">→</span> Solver fills from <span class="highlight">own capital</span></div> | |
| <div class="flow-step"><span class="arrow">→</span> Escrow locks for <span class="highlight">seconds</span></div> | |
| <div class="flow-step"><span class="arrow">→</span> One bug = <span class="highlight">single settlement at risk</span></div> | |
| </div> | |
| </div> | |
| <div class="callout insight reveal"> | |
| <p>CEXs don't have pools — they have orderbooks filled by market makers who manage their own capital and risk. The intent/solver model mirrors this: <em>the protocol is a coordination layer, not a custody layer.</em></p> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- WHY NOT ORDERBOOKS --> | |
| <section id="orderflow"> | |
| <div class="section-inner"> | |
| <div class="section-label reveal">The DEX Question</div> | |
| <h2 class="reveal">Why not a pure orderbook?</h2> | |
| <p class="reveal">On-chain spot orderbooks empirically don't succeed. Even Hyperliquid — with a purpose-built L1 (0.2s finality, 200K orders/sec) — sees spot volume at just <strong>~3% of perp volume</strong>. The reasons are structural:</p> | |
| <div style="margin: 32px 0;" class="reveal"> | |
| <table class="comparison-table"> | |
| <thead> | |
| <tr> | |
| <th>Problem</th> | |
| <th>Why It Kills Spot Orderbooks</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr><td class="label-cell">State explosion</td><td>Every bid/ask update gossiped to every node</td></tr> | |
| <tr><td class="label-cell">Latency arbitrage</td><td>6s block time = stale orders picked off by bots</td></tr> | |
| <tr><td class="label-cell">Cold start</td><td>Need continuous active market making from day one</td></tr> | |
| <tr><td class="label-cell">Long-tail impossibility</td><td>Need dedicated MMs per pair. Serum had ~33 pairs vs Uniswap's 15,000+</td></tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| <h3 class="reveal">The real insight: orderflow segmentation</h3> | |
| <p class="reveal">Every modern DEX innovation — PropAMMs, RFQ, intent systems — solves the same problem from different angles: <strong>separating uninformed retail flow from toxic arbitrage flow.</strong></p> | |
| <div class="orderflow-diagram reveal"> | |
| <div class="of-side"> | |
| <div class="of-item retail">Retail swap requests</div> | |
| <div class="of-item retail">Skip:Go / Keplr users</div> | |
| <div class="of-item retail">dApp integrations</div> | |
| </div> | |
| <div class="of-center"> | |
| <div class="of-arrow">→</div> | |
| <div class="of-center-label">Intent Layer</div> | |
| <div class="of-center-label">Solver Competition</div> | |
| <div class="of-arrow">→</div> | |
| </div> | |
| <div class="of-side"> | |
| <div class="of-item solver">Solver A quotes 0.12% spread</div> | |
| <div class="of-item solver">Solver B quotes 0.10% spread</div> | |
| <div class="of-item toxic">Arb bots filtered out</div> | |
| </div> | |
| </div> | |
| <blockquote class="reveal"> | |
| <p>If you can guarantee your counterparty is a human wanting to swap, not a bot wanting to arb, you can quote dramatically tighter.</p> | |
| </blockquote> | |
| <p class="reveal"><strong>Spreads matter more than volume.</strong> Volume follows spreads (aggregators route to best price), not the other way around. Tight spreads signal a healthy market. Revenue comes from spread capture, not volume metrics.</p> | |
| </div> | |
| </section> | |
| <!-- TIERED DEX --> | |
| <section id="dex-architecture"> | |
| <div class="section-inner"> | |
| <div class="section-label reveal">Recommended Architecture</div> | |
| <h2 class="reveal">Tiered hybrid, not a monolith</h2> | |
| <p class="reveal">Different asset tiers need different liquidity mechanisms. The right model uses intent/RFQ for major pairs, solver competition for cross-chain, and bounded AMM pools only where no solver-mediated alternative exists.</p> | |
| <div class="arch-tiers"> | |
| <div class="tier-card reveal stagger-1"> | |
| <div class="tier-number">Tier 1</div> | |
| <h4>Intent / RFQ</h4> | |
| <div class="pairs">ATOM/USDC · ATOM/ETH · BTC/USDC</div> | |
| <p>Professional market makers hold capital off-chain, settle atomically. Zero permanent on-chain TVL. CEX-competitive spreads via solver competition.</p> | |
| <span class="pool-badge zero">Zero pools</span> | |
| </div> | |
| <div class="tier-card reveal stagger-2"> | |
| <div class="tier-number">Tier 2</div> | |
| <h4>Intent / Solver</h4> | |
| <div class="pairs">IBC assets · Cross-chain swaps · Medium tokens</div> | |
| <p>ATOM Intents solver competition with IBC settlement. Sources liquidity from Osmosis, Astroport, CEX backstop, and P2P matching.</p> | |
| <span class="pool-badge zero">Zero pools</span> | |
| </div> | |
| <div class="tier-card reveal stagger-3"> | |
| <div class="tier-number">Tier 3</div> | |
| <h4>Bounded AMM</h4> | |
| <div class="pairs">Any token · Permissionless listing</div> | |
| <p>Small, isolated per-pair pools for long-tail assets. Naturally bounded by market cap. Graduate to Tier 1/2 as solver interest grows.</p> | |
| <span class="pool-badge bounded">Small bounded pools</span> | |
| </div> | |
| </div> | |
| <div class="callout insight reveal"> | |
| <p>This satisfies Robo's three priorities: <em>deep liquidity for major pairs</em> (Tier 1), <em>long-tail listing venue</em> (Tier 3), and <em>Skip:Go/Eureka monetization</em> (Tier 2 integrated with Skip:Go routing, protocol fees to ATOM).</p> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- LENDING --> | |
| <section id="lending"> | |
| <div class="section-inner"> | |
| <div class="section-label reveal">The Missing Primitive</div> | |
| <h2 class="reveal">Intent-mediated lending,<br>informed by Ajna</h2> | |
| <p class="reveal">Lending is the single most important missing primitive for Cosmos Hub. It unlocks LSM share utility, creates organic USDC demand, and enables leveraged staking. But traditional lending pools (Aave, Compound) are exactly the honeypots we want to avoid.</p> | |
| <p class="reveal">Ajna Protocol proves lending can work <strong>without oracles</strong> — lenders set their own collateral prices. But Ajna still creates shared capital pools. We keep the oracle-free insight and apply pool minimalism.</p> | |
| <div class="lending-flow reveal"> | |
| <div class="lending-flow-steps"> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Borrower signs intent</div> | |
| <p>"Borrow 10K USDC against 100 stATOM, 30 days, max 12% APR"</p> | |
| </div> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Lending solvers compete</div> | |
| <p>Solver A: 8% · Solver B: 7.5% · Solver C: 9% — best quote wins</p> | |
| </div> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Per-loan escrow</div> | |
| <p>Collateral locked in isolated escrow (or lien on stATOM). Loan disbursed.</p> | |
| </div> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Settlement</div> | |
| <p>Repayment releases collateral. Default triggers intent-based liquidation auction.</p> | |
| </div> | |
| </div> | |
| </div> | |
| <h3 class="reveal">Pool-based vs. intent-mediated: security comparison</h3> | |
| <div class="reveal"> | |
| <table class="comparison-table"> | |
| <thead> | |
| <tr> | |
| <th>Property</th> | |
| <th>Pool-Based (Aave/Ajna)</th> | |
| <th>Intent-Mediated</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td class="label-cell">Capital at risk</td> | |
| <td class="bad-cell">All deposits in pool</td> | |
| <td class="good-cell">Individual loan in escrow</td> | |
| </tr> | |
| <tr> | |
| <td class="label-cell">Bug blast radius</td> | |
| <td class="bad-cell">Entire pool drained</td> | |
| <td class="good-cell">Single escrow compromised</td> | |
| </tr> | |
| <tr> | |
| <td class="label-cell">Collateral custody</td> | |
| <td class="bad-cell">Transferred to pool contract</td> | |
| <td class="good-cell">Lien-based (stays with borrower)</td> | |
| </tr> | |
| <tr> | |
| <td class="label-cell">Worst case</td> | |
| <td class="bad-cell">$500M pool drain</td> | |
| <td class="good-cell">Single loan size</td> | |
| </tr> | |
| <tr> | |
| <td class="label-cell">Oracle dependency</td> | |
| <td class="bad-cell">Chainlink (Aave) / None (Ajna)</td> | |
| <td class="good-cell">None — solver-discovered rates</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| <h3 class="reveal">Collateral stays staked</h3> | |
| <p class="reveal">For stATOM specifically, collateral doesn't even need to move. A <strong>lien</strong> is recorded on-chain — the stATOM stays in the borrower's account earning staking yield. The lien prevents transfer/unbonding. Only on default does collateral transfer to a liquidation auction. <strong>Zero custody during the happy path.</strong></p> | |
| <h3 class="reveal">The killer use case: leveraged stATOM</h3> | |
| <div class="lending-flow reveal"> | |
| <div class="lending-flow-steps"> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Stake ATOM</div> | |
| <p>Get stATOM earning ~15-20% APR staking yield</p> | |
| </div> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Borrow USDC</div> | |
| <p>Sign borrow intent. Collateral stays staked via lien. Solver disburses USDC.</p> | |
| </div> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Buy more ATOM</div> | |
| <p>Use borrowed USDC to acquire and stake more ATOM</p> | |
| </div> | |
| <div class="lending-step"> | |
| <div class="lending-step-title">Compound</div> | |
| <p>Leveraged staking. No pool to drain. Collateral never leaves custody.</p> | |
| </div> | |
| </div> | |
| </div> | |
| <h3 class="reveal">One architecture, many primitives</h3> | |
| <p class="reveal">ATOM Intents already has a modular solver framework for trading. Lending doesn't require a new system — it's the <strong>same pattern</strong> with a different solver type. Every economic primitive follows the identical three-step flow:</p> | |
| <div class="solver-extend reveal"> | |
| <div class="solver-extend-row"> | |
| <div class="solver-extend-label trading">Trading<br><span>(exists today)</span></div> | |
| <div class="solver-extend-steps"> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Intent</div> | |
| <div class="se-step-detail">"Swap 1000 ATOM for USDC at best price"</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Solver competes</div> | |
| <div class="se-step-detail">DEX routing, CEX hedging, P2P matching</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Settlement</div> | |
| <div class="se-step-detail">Two-phase escrow, IBC delivery</div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="solver-extend-row"> | |
| <div class="solver-extend-label lending">Lending<br><span>(new solver)</span></div> | |
| <div class="solver-extend-steps"> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Intent</div> | |
| <div class="se-step-detail">"Borrow 10K USDC against stATOM, max 12% APR"</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Solver competes</div> | |
| <div class="se-step-detail">Rate discovery, collateral assessment, risk pricing</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Settlement</div> | |
| <div class="se-step-detail">Lien on collateral, loan disbursement</div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="solver-extend-row"> | |
| <div class="solver-extend-label liquidation">Liquidation<br><span>(new solver)</span></div> | |
| <div class="solver-extend-steps"> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Intent</div> | |
| <div class="se-step-detail">"Liquidate undercollateralized position #4821"</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Solver competes</div> | |
| <div class="se-step-detail">Auction bidding, collateral valuation</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Settlement</div> | |
| <div class="se-step-detail">Collateral transfer, debt repayment</div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="solver-extend-row"> | |
| <div class="solver-extend-label future">DCA / Options / ...<br><span>(future solvers)</span></div> | |
| <div class="solver-extend-steps"> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Intent</div> | |
| <div class="se-step-detail">User describes desired outcome</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Solver competes</div> | |
| <div class="se-step-detail">Specialized solvers bid to fill</div> | |
| </div> | |
| <div class="se-arrow">→</div> | |
| <div class="solver-extend-step"> | |
| <div class="se-step-label">Settlement</div> | |
| <div class="se-step-detail">Same escrow infrastructure</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="callout insight reveal"> | |
| <p>Adding a new economic primitive to Hub doesn't mean building a new protocol. It means writing a <em>new solver type</em> that plugs into the existing ATOM Intents framework. Same auction, same escrow, same settlement — new capability.</p> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- FULL STACK --> | |
| <section id="stack"> | |
| <div class="section-inner"> | |
| <div class="section-label reveal">The Complete Stack</div> | |
| <h2 class="reveal">Pool-minimal architecture</h2> | |
| <p class="reveal">Every layer built on the same principle: the protocol coordinates, it doesn't custody. Capital at risk equals only in-flight settlements plus bounded Tier 3 pools.</p> | |
| <div class="stack-diagram"> | |
| <div class="stack-layer l-user reveal"> | |
| <div class="stack-layer-name">User Layer</div> | |
| <div class="stack-layer-desc">Keplr, Skip:Go, dApps, wallets</div> | |
| </div> | |
| <div class="stack-connector reveal">↓</div> | |
| <div class="stack-layer l-coord reveal stagger-1"> | |
| <div class="stack-layer-name">Intent Coordination</div> | |
| <div class="stack-layer-desc">Trade intents · Borrow intents · Liquidation · DCA</div> | |
| </div> | |
| <div class="stack-connector reveal">↓</div> | |
| <div class="stack-layer l-settle reveal stagger-2"> | |
| <div class="stack-layer-name">Settlement Layer</div> | |
| <div class="stack-layer-desc">Two-phase commit · IBC · Isolated escrow · Lien registry</div> | |
| </div> | |
| <div class="stack-connector reveal">↓</div> | |
| <div class="stack-layer l-lend reveal stagger-3"> | |
| <div class="stack-layer-name">Intent-Mediated Lending</div> | |
| <div class="stack-layer-desc">Solver-discovered rates · Per-loan escrow · Lien-based collateral</div> | |
| </div> | |
| <div class="stack-connector reveal">↓</div> | |
| <div class="stack-layer l-found reveal stagger-4"> | |
| <div class="stack-layer-name">Foundation</div> | |
| <div class="stack-layer-desc">ATOM staking · LSM · IBC Eureka · USDC (Noble) · Governance</div> | |
| </div> | |
| </div> | |
| <h3 class="reveal">Primitives inventory</h3> | |
| <div class="reveal"> | |
| <table class="comparison-table"> | |
| <thead> | |
| <tr> | |
| <th>Primitive</th> | |
| <th>Model</th> | |
| <th>Pool Profile</th> | |
| <th>Status</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr><td class="label-cell">Intent-based trading</td><td>ATOM Intents</td><td class="good-cell">Zero (escrow only)</td><td>In progress</td></tr> | |
| <tr><td class="label-cell">Major-pair trading</td><td>Intent/RFQ + solver MMs</td><td class="good-cell">Zero (solver-held)</td><td>Design phase</td></tr> | |
| <tr><td class="label-cell">Intent-mediated lending</td><td>Solver-matched P2P</td><td class="good-cell">Zero (per-loan escrow)</td><td>Not started</td></tr> | |
| <tr><td class="label-cell">Long-tail listing</td><td>Bounded AMM pools</td><td style="color:var(--warning)">Small, isolated</td><td>Available (Neutron)</td></tr> | |
| <tr><td class="label-cell">LSM lien framework</td><td>Lien registry for stATOM</td><td class="good-cell">Zero (lien, not transfer)</td><td>Not started</td></tr> | |
| <tr><td class="label-cell">Intent-derived prices</td><td>Solver fills as signal</td><td class="good-cell">Zero</td><td>Not started</td></tr> | |
| <tr><td class="label-cell">Automated strategies</td><td>Composed intents</td><td class="good-cell">Zero</td><td>Future</td></tr> | |
| <tr><td class="label-cell">Derivatives settlement</td><td>Hub as collateral layer</td><td class="good-cell">Zero (settlement only)</td><td>Future</td></tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- ROADMAP --> | |
| <section id="roadmap"> | |
| <div class="section-inner"> | |
| <div class="section-label reveal">Sequencing</div> | |
| <h2 class="reveal">The critical path</h2> | |
| <p class="reveal">Trading and lending develop in parallel — they share the same solver framework and settlement layer. Under pool minimalism, lending doesn't need a massive upfront capital pool. It needs lending solvers willing to quote on borrow intents.</p> | |
| <div class="timeline reveal"> | |
| <div class="timeline-phase"> | |
| <div class="timeline-dot"></div> | |
| <div class="phase-name">Phase 0 — Now</div> | |
| <div class="timeline-items"> | |
| <div class="timeline-item"><span class="marker done">✓</span> IBC Eureka — Ethereum connectivity live</div> | |
| <div class="timeline-item"><span class="marker done">✓</span> Noble USDC — stablecoin supply on Hub</div> | |
| <div class="timeline-item"><span class="marker active">•</span> ATOM Intents — in development</div> | |
| </div> | |
| </div> | |
| <div class="timeline-phase"> | |
| <div class="timeline-dot"></div> | |
| <div class="phase-name">Phase 1 — Next</div> | |
| <div class="timeline-items"> | |
| <div class="timeline-item"><span class="marker">•</span> RFQ/solver MM integration for ATOM/USDC</div> | |
| <div class="timeline-item"><span class="marker">•</span> Intent-mediated lending (new LendingSolver type)</div> | |
| <div class="timeline-item"><span class="marker">•</span> Bounded permissionless AMM for long-tail</div> | |
| <div class="timeline-item"><span class="marker">•</span> ATOM Intents launch (cross-chain trading)</div> | |
| </div> | |
| </div> | |
| <div class="timeline-phase"> | |
| <div class="timeline-dot"></div> | |
| <div class="phase-name">Phase 2</div> | |
| <div class="timeline-items"> | |
| <div class="timeline-item"><span class="marker">•</span> LSM lien registry (bank module changes)</div> | |
| <div class="timeline-item"><span class="marker">•</span> Intent-derived price feeds</div> | |
| <div class="timeline-item"><span class="marker">•</span> Revenue capture framework</div> | |
| </div> | |
| </div> | |
| <div class="timeline-phase"> | |
| <div class="timeline-dot"></div> | |
| <div class="phase-name">Phase 3</div> | |
| <div class="timeline-items"> | |
| <div class="timeline-item"><span class="marker">•</span> Composed intent strategies (leveraged stATOM, DCA)</div> | |
| <div class="timeline-item"><span class="marker">•</span> Derivatives settlement layer</div> | |
| <div class="timeline-item"><span class="marker">•</span> Structured products</div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- VALUE CAPTURE --> | |
| <section id="value"> | |
| <div class="section-inner"> | |
| <div class="section-label reveal">Value Capture</div> | |
| <h2 class="reveal">Protocol-owned DeFi</h2> | |
| <p class="reveal">L1s capture only ~12% of fees despite ~90% of market cap. Hub must <strong>own</strong> the core primitives so fees flow to ATOM stakers, not third-party protocols.</p> | |
| <div class="revenue-grid reveal"> | |
| <div class="revenue-card"> | |
| <div class="revenue-source">Intent trading fees</div> | |
| <p class="revenue-mech">1-5 bps protocol fee per fill. $100K-500K/month at $1B volume.</p> | |
| </div> | |
| <div class="revenue-card"> | |
| <div class="revenue-source">Lending spread</div> | |
| <p class="revenue-mech">% of borrower-lender rate spread. Scales with loan volume.</p> | |
| </div> | |
| <div class="revenue-card"> | |
| <div class="revenue-source">Settlement fees</div> | |
| <p class="revenue-mech">Per-settlement fee for escrow/IBC. Scales with cross-chain activity.</p> | |
| </div> | |
| <div class="revenue-card"> | |
| <div class="revenue-source">Liquidation surplus</div> | |
| <p class="revenue-mech">Auction surplus above debt repayment. Countercyclical.</p> | |
| </div> | |
| <div class="revenue-card"> | |
| <div class="revenue-source">MEV / OEV capture</div> | |
| <p class="revenue-mech">Solver auction surplus directed to stakers. Replaces MEV leakage.</p> | |
| </div> | |
| <div class="revenue-card"> | |
| <div class="revenue-source">ATOM staking flywheel</div> | |
| <p class="revenue-mech">More DeFi fees → higher staking yield → more ATOM demand → more collateral value → more DeFi.</p> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- CORE THESIS --> | |
| <section id="thesis"> | |
| <div class="section-inner" style="text-align: center; max-width: 680px;"> | |
| <div class="section-label reveal" style="justify-content: center;">Core Thesis</div> | |
| <h2 class="reveal" style="font-size: clamp(24px, 3.5vw, 36px);">ATOM Intents is not just a trading system</h2> | |
| <p class="reveal" style="font-size: 18px; max-width: 560px; margin: 0 auto;">It's the coordination layer for a complete economic stack. Its solver competition + IBC settlement architecture generalizes to any primitive expressible as:</p> | |
| <div style="margin: 32px auto; display: flex; align-items: center; justify-content: center; gap: 16px; flex-wrap: wrap;" class="reveal stagger-1"> | |
| <span style="font-family: var(--font-mono); font-size: 14px; padding: 8px 16px; border-radius: 8px; background: rgba(167,139,250,0.1); border: 1px solid rgba(167,139,250,0.2); color: var(--purple);">User Intent</span> | |
| <span style="color: var(--text-muted);">→</span> | |
| <span style="font-family: var(--font-mono); font-size: 14px; padding: 8px 16px; border-radius: 8px; background: rgba(96,165,250,0.1); border: 1px solid rgba(96,165,250,0.2); color: var(--blue);">Solver Quote</span> | |
| <span style="color: var(--text-muted);">→</span> | |
| <span style="font-family: var(--font-mono); font-size: 14px; padding: 8px 16px; border-radius: 8px; background: rgba(110,231,183,0.1); border: 1px solid rgba(110,231,183,0.2); color: var(--accent);">Settlement</span> | |
| </div> | |
| <p class="reveal stagger-2" style="font-size: 18px; max-width: 560px; margin: 0 auto 0;">Trading, lending, liquidation, DCA, derivatives — all through the same architecture. Minimal attack surface. CEX-competitive execution. No honeypots.</p> | |
| </div> | |
| </section> | |
| <!-- FOOTER --> | |
| <footer> | |
| <p>Research by <a href="https://github.com/iqlusioninc/atom-intents">Iqlusion</a> · March 2026 · Built for the Cosmos Hub community</p> | |
| </footer> | |
| <script> | |
| // Intersection Observer for reveal animations | |
| const observer = new IntersectionObserver((entries) => { | |
| entries.forEach(entry => { | |
| if (entry.isIntersecting) { | |
| entry.target.classList.add('visible'); | |
| } | |
| }); | |
| }, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' }); | |
| document.querySelectorAll('.reveal').forEach(el => observer.observe(el)); | |
| // Immediately reveal hero elements on load (they're in viewport but observer may miss them) | |
| window.addEventListener('load', () => { | |
| document.querySelectorAll('.hero .reveal').forEach(el => { | |
| el.classList.add('visible'); | |
| }); | |
| // Also catch any other elements already visible | |
| setTimeout(() => { | |
| document.querySelectorAll('.reveal:not(.visible)').forEach(el => { | |
| const rect = el.getBoundingClientRect(); | |
| if (rect.top < window.innerHeight && rect.bottom > 0) { | |
| el.classList.add('visible'); | |
| } | |
| }); | |
| }, 100); | |
| }); | |
| // Nav hide on scroll down, show on scroll up | |
| let lastScroll = 0; | |
| const nav = document.querySelector('.topnav'); | |
| window.addEventListener('scroll', () => { | |
| const curr = window.scrollY; | |
| if (curr > lastScroll && curr > 100) { | |
| nav.style.transform = 'translateY(-100%)'; | |
| } else { | |
| nav.style.transform = 'translateY(0)'; | |
| } | |
| lastScroll = curr; | |
| }, { passive: true }); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment