From 586d4443d13039585a260de89b3e23d610b2768b Mon Sep 17 00:00:00 2001 From: JMSBPP Date: Fri, 12 Dec 2025 00:44:04 -0500 Subject: [PATCH] docs: add demo presentation and Loom video link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add pitch.md with HookBazaar pitch content - Add beamer presentation (presentation.tex) with 7 slides - Add demo video link to README.md Demo section - Update attestation simulation instructions in README 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .gitignore | 5 + README.md | 8 +- demo/presentation.pdf | Bin 33342 -> 40805 bytes demo/presentation.tex | 594 ++++++++++++++++++++++-------------------- 4 files changed, 325 insertions(+), 282 deletions(-) diff --git a/.gitignore b/.gitignore index a46de762..a2e9b4dc 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,8 @@ agents/ *.temp .cache/ .temp/ + +# ============================================================================= +# Demo Pitch (Internal Use Only) +# ============================================================================= +demo/pitch.md diff --git a/README.md b/README.md index b5198b79..5ca4a546 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,9 @@ Hook Bazaar solves **9 critical market failures** in the Uniswap v4 ecosystem: ## Demo - +[![Watch the Demo](https://img.shields.io/badge/Watch-Demo-E85A4F?style=for-the-badge&logo=loom&logoColor=white)](https://www.loom.com/share/8f8f5873702b4f6db3215892d824bba2) + +[🎥 Watch the full demo on Loom](https://www.loom.com/share/8f8f5873702b4f6db3215892d824bba2) --- @@ -191,7 +193,9 @@ cd operator && npm test anvil # Terminal 2 -cd operator && npx tsx integration/runSimulation.ts +cd operator +npm install +npx tsx integration/runSimulation.ts ``` ### Deploy diff --git a/demo/presentation.pdf b/demo/presentation.pdf index 1b36990b227ee5913034dc27e4fd16c1a406c1b6..ba66660c3ca178ae9932f08a9cec2db699a2f073 100644 GIT binary patch literal 40805 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 literal 33342 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 WJDQk6F)^~UvqO=P{M{f9^}hh80RVyk diff --git a/demo/presentation.tex b/demo/presentation.tex index cf7bddcb..d10d6c75 100644 --- a/demo/presentation.tex +++ b/demo/presentation.tex @@ -1,21 +1,12 @@ \documentclass[aspectratio=169]{beamer} % ============================================ -% HOOK BAZAAR THEME - MATCHING UI AESTHETICS +% HOOKBAZAAR THEME - DIAGRAM-FOCUSED PRESENTATION % ============================================ -% Colors from client2/src/index.css: -% --color-primary: gold (#FFD700) -% --color-bg-darkest: #000814 (deep navy) -% --color-bg-dark: #001f3f (navy) -% --color-secondary: #003366 -% --color-accent: #e85a4f (coral/terracotta) -% --color-white: #fff - \usepackage{fontspec} \usepackage{tikz} -\usetikzlibrary{positioning} +\usetikzlibrary{positioning, arrows.meta, shapes.geometric, fit, calc} \usepackage{graphicx} -\usepackage{booktabs} \usepackage{hyperref} \usepackage{fontawesome5} @@ -27,376 +18,419 @@ \definecolor{hbAccent}{HTML}{E85A4F} % Coral/Terracotta \definecolor{hbWhite}{HTML}{FFFFFF} % White \definecolor{hbMarble}{HTML}{F5F5F0} % Marble Light +\definecolor{hbSuccess}{HTML}{28A745} % Green -% Beamer theme configuration +% Beamer configuration \usetheme{default} \usecolortheme{default} -% Set background and foreground \setbeamercolor{background canvas}{bg=hbBgDarkest} \setbeamercolor{normal text}{fg=hbWhite} \setbeamercolor{frametitle}{fg=hbPrimary} -\setbeamercolor{title}{fg=hbPrimary} -\setbeamercolor{subtitle}{fg=hbWhite} -\setbeamercolor{author}{fg=hbMarble} -\setbeamercolor{date}{fg=hbMarble} \setbeamercolor{item}{fg=hbPrimary} -\setbeamercolor{subitem}{fg=hbAccent} -\setbeamercolor{block title}{fg=hbBgDarkest, bg=hbPrimary} -\setbeamercolor{block body}{fg=hbWhite, bg=hbSecondary} -\setbeamercolor{structure}{fg=hbPrimary} -% Remove navigation symbols \setbeamertemplate{navigation symbols}{} -% Custom frame title with gold underline \setbeamertemplate{frametitle}{ - \vspace{0.5cm} - {\Large\bfseries\insertframetitle} - \vspace{0.1cm} + \vspace{0.25cm} + {\large\bfseries\insertframetitle} \par - \textcolor{hbPrimary}{\rule{\textwidth}{2pt}} - \vspace{0.3cm} + \textcolor{hbPrimary}{\rule{\textwidth}{1.5pt}} + \vspace{0.15cm} } -% Custom footline \setbeamertemplate{footline}{ \hbox{% - \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,left]{author in head/foot}% - \hspace*{2ex}\textcolor{hbPrimary}{\tiny Hook Bazaar} + \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2ex,dp=1ex,left]{author in head/foot}% + \hspace*{2ex}\textcolor{hbPrimary}{\tiny HookBazaar} \end{beamercolorbox}% - \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}% - \textcolor{hbMarble}{\tiny\insertshorttitle} + \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2ex,dp=1ex,center]{title in head/foot}% + \textcolor{hbMarble}{\tiny Hook-as-a-Service} \end{beamercolorbox}% - \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}% + \begin{beamercolorbox}[wd=.333333\paperwidth,ht=2ex,dp=1ex,right]{date in head/foot}% \textcolor{hbMarble}{\tiny\insertframenumber{} / \inserttotalframenumber}\hspace*{2ex} \end{beamercolorbox}}% - \vskip0pt% } -% Custom itemize \setbeamertemplate{itemize item}{\textcolor{hbPrimary}{\faAngleRight}} -\setbeamertemplate{itemize subitem}{\textcolor{hbAccent}{\faAngleDoubleRight}} -% Fonts - Space Grotesk style (use system sans as fallback) -\setsansfont{Inter}[ - BoldFont={Inter Bold}, - Scale=1.0 -] +\begin{document} -% Title and content -\title{\textbf{Hook Bazaar}} -\subtitle{Decentralized Marketplace for Uniswap v4 Hooks} -\author{UHI7 Team} -\date{December 2025} +% ============================================ +% SLIDE 0: TEAM INTRODUCTION +% ============================================ +\begin{frame}{Meet the Team} -\begin{document} +\begin{center} +\vspace{0.3cm} +\textcolor{hbPrimary}{\large\textbf{UHI7 Team}} + +\vspace{0.8cm} + +\begin{tikzpicture}[scale=0.9] + % Team member 1 - JMSBPP + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=8pt, minimum width=3.5cm, minimum height=2.2cm] (m1) at (-4.5,0) {}; + \node[text=hbPrimary, font=\small\bfseries] at (-4.5,0.6) {JMSBPP}; + \node[text=hbMarble, font=\scriptsize] at (-4.5,0.1) {EVM-based DEX}; + \node[text=hbMarble, font=\scriptsize] at (-4.5,-0.25) {AMM Hooks}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, font=\tiny, text=hbAccent] at (-4.5,-0.75) {\faGithub\ JMSBPP}; + + % Team member 2 - viktor81562 + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=8pt, minimum width=3.5cm, minimum height=2.2cm] (m2) at (0,0) {}; + \node[text=hbPrimary, font=\small\bfseries] at (0,0.6) {Viktor}; + \node[text=hbMarble, font=\scriptsize] at (0,0.1) {Smart Contract}; + \node[text=hbMarble, font=\scriptsize] at (0,-0.25) {Development}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, font=\tiny, text=hbAccent] at (0,-0.75) {\faGithub\ viktor81562}; + + % Team member 3 - iam-Truong + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=8pt, minimum width=3.5cm, minimum height=2.2cm] (m3) at (4.5,0) {}; + \node[text=hbPrimary, font=\small\bfseries] at (4.5,0.6) {Truong}; + \node[text=hbMarble, font=\scriptsize] at (4.5,0.1) {Full Stack}; + \node[text=hbMarble, font=\scriptsize] at (4.5,-0.25) {Development}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, font=\tiny, text=hbAccent] at (4.5,-0.75) {\faGithub\ iam-Truong}; +\end{tikzpicture} + +\vspace{0.8cm} + +\textcolor{hbMarble}{\small Building infrastructure for the Uniswap v4 hooks economy} +\end{center} +\end{frame} % ============================================ -% SLIDE 1: TITLE / INTRO +% SLIDE 1: TITLE - MARKETPLACE DIAGRAM % ============================================ \begin{frame} \begin{center} -\vspace{1cm} -{\Huge\textcolor{hbPrimary}{\textbf{Hook Bazaar}}} +\vspace{0.3cm} +{\Huge\textcolor{hbPrimary}{\textbf{HookBazaar}}} +\vspace{0.2cm} + +\textcolor{hbMarble}{\large Hook-as-a-Service for Uniswap v4} \vspace{0.5cm} -\textcolor{hbMarble}{\large Decentralized Marketplace for Uniswap v4 Hooks} +\begin{tikzpicture}[scale=0.85] + % Central marketplace + \node[draw=hbPrimary, line width=2pt, fill=hbSecondary, rounded corners=8pt, minimum width=3.2cm, minimum height=1.3cm] (market) {\textcolor{hbPrimary}{\textbf{HookBazaar}}}; -\vspace{1.5cm} + % Hook developers (left) + \node[draw=hbAccent, fill=hbBgDark, rounded corners=4pt, minimum width=2.2cm, minimum height=0.7cm, left=2.2cm of market] (dev1) {\textcolor{hbWhite}{\small Hook Dev}}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=4pt, minimum width=2.2cm, minimum height=0.7cm, above=0.25cm of dev1] (dev2) {\textcolor{hbWhite}{\small Hook Dev}}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=4pt, minimum width=2.2cm, minimum height=0.7cm, below=0.25cm of dev1] (dev3) {\textcolor{hbWhite}{\small Hook Dev}}; -\begin{tikzpicture} - \draw[hbPrimary, line width=2pt] (-4,0) -- (4,0); -\end{tikzpicture} + % Protocols (right) + \node[draw=hbSuccess, fill=hbBgDark, rounded corners=4pt, minimum width=2.2cm, minimum height=0.7cm, right=2.2cm of market] (proto1) {\textcolor{hbWhite}{\small Protocol}}; + \node[draw=hbSuccess, fill=hbBgDark, rounded corners=4pt, minimum width=2.2cm, minimum height=0.7cm, above=0.25cm of proto1] (proto2) {\textcolor{hbWhite}{\small Protocol}}; + \node[draw=hbSuccess, fill=hbBgDark, rounded corners=4pt, minimum width=2.2cm, minimum height=0.7cm, below=0.25cm of proto1] (proto3) {\textcolor{hbWhite}{\small Protocol}}; -\vspace{1cm} + % Arrows + \draw[-{Stealth}, hbAccent, thick] (dev1) -- (market) node[midway, above, font=\tiny, text=hbMarble] {Hooks}; + \draw[-{Stealth}, hbAccent, thick] (dev2) -- (market); + \draw[-{Stealth}, hbAccent, thick] (dev3) -- (market); -\textcolor{hbWhite}{Building the Infrastructure Layer for the}\\[0.3cm] -\textcolor{hbPrimary}{\textbf{Uniswap v4 Hooks Economy}} + \draw[-{Stealth}, hbSuccess, thick] (market) -- (proto1) node[midway, above, font=\tiny, text=hbMarble] {Verified}; + \draw[-{Stealth}, hbSuccess, thick] (market) -- (proto2); + \draw[-{Stealth}, hbSuccess, thick] (market) -- (proto3); -\vspace{1.5cm} + % Revenue flow + \draw[-{Stealth}, hbPrimary, thick, dashed] (proto1.south) to[bend right=35] node[midway, below, font=\scriptsize, text=hbPrimary] {Revenue \$} (dev1.south); +\end{tikzpicture} -{\small\textcolor{hbMarble}{UHI7 Team $\cdot$ December 2025}} +\vspace{0.4cm} +\textcolor{hbMarble}{\small IP Protection $\cdot$ Formal Verification $\cdot$ Revenue Share} + +\vspace{0.3cm} +\href{https://www.loom.com/share/8f8f5873702b4f6db3215892d824bba2}{\textcolor{hbAccent}{\faVideo\ \underline{Watch Demo}}} \end{center} \end{frame} % ============================================ -% SLIDE 2: PROBLEM / CHALLENGES +% SLIDE 2: THE PROBLEM - VISUAL COST BREAKDOWN % ============================================ -\begin{frame}{The Problem: 9 Critical Market Failures} - -\begin{columns}[T] -\begin{column}{0.48\textwidth} -\textcolor{hbAccent}{\textbf{Market Infrastructure}} -\begin{itemize} - \item \textbf{No marketplace} for hooks - \item Supply \& demand exist --- no connection - \item No competition mechanism -\end{itemize} +\begin{frame}{The Problem: Broken Economics} -\vspace{0.5cm} +\begin{center} +\begin{tikzpicture}[scale=0.8] + % Cost barrier at top + \node[draw=hbAccent, line width=2pt, fill=hbBgDark, rounded corners=6pt, minimum width=5cm, minimum height=1.3cm, align=center] (cost) at (0,2.5) { + \textcolor{hbAccent}{\large\textbf{\$30k -- \$130k+}}\\[-2pt] + \textcolor{hbMarble}{\scriptsize per hook deployment} + }; -\textcolor{hbAccent}{\textbf{Developer Pain Points}} -\begin{itemize} - \item No monetization model - \item No IP protection (code is public) - \item No reputation system -\end{itemize} -\end{column} - -\begin{column}{0.48\textwidth} -\textcolor{hbAccent}{\textbf{Protocol Barriers}} -\begin{itemize} - \item Custom hooks: \textcolor{hbPrimary}{\$10k--\$100k+} - \item Development time: \textcolor{hbPrimary}{weeks--months} - \item High audit costs \& risk -\end{itemize} + % Three problem pillars + \node[draw=hbPrimary, fill=hbSecondary, rounded corners=4pt, minimum width=3.5cm, minimum height=2.2cm, align=center] (devs) at (-5,-0.5) { + \textcolor{hbPrimary}{\faCode}\\[3pt] + \textcolor{hbWhite}{\small\textbf{Hook Devs}}\\[5pt] + \textcolor{hbMarble}{\scriptsize No IP compensation}\\ + \textcolor{hbMarble}{\scriptsize <20\% win prizes}\\ + \textcolor{hbMarble}{\scriptsize No revenue share} + }; -\vspace{0.5cm} + \node[draw=hbPrimary, fill=hbSecondary, rounded corners=4pt, minimum width=3.5cm, minimum height=2.2cm, align=center] (protocols) at (0,-0.5) { + \textcolor{hbPrimary}{\faBuilding}\\[3pt] + \textcolor{hbWhite}{\small\textbf{Protocols}}\\[5pt] + \textcolor{hbMarble}{\scriptsize High dev costs}\\ + \textcolor{hbMarble}{\scriptsize Audit expenses}\\ + \textcolor{hbMarble}{\scriptsize No hook choice} + }; -\textcolor{hbAccent}{\textbf{Ecosystem Gaps}} -\begin{itemize} - \item No standardization - \item No multi-hook composition - \item Unsustainable economics -\end{itemize} -\end{column} -\end{columns} + \node[draw=hbPrimary, fill=hbSecondary, rounded corners=4pt, minimum width=3.5cm, minimum height=2.2cm, align=center] (pools) at (5,-0.5) { + \textcolor{hbPrimary}{\faWater}\\[3pt] + \textcolor{hbWhite}{\small\textbf{Pools}}\\[5pt] + \textcolor{hbMarble}{\scriptsize No routing agency}\\ + \textcolor{hbMarble}{\scriptsize Single hook limit}\\ + \textcolor{hbMarble}{\scriptsize No flexibility} + }; -\vspace{0.8cm} + % Arrows from cost + \draw[-{Stealth}, hbAccent, thick] (cost.south) -- (devs.north); + \draw[-{Stealth}, hbAccent, thick] (cost.south) -- (protocols.north); + \draw[-{Stealth}, hbAccent, thick] (cost.south) -- (pools.north); -\begin{center} -\begin{tikzpicture} - \node[draw=hbAccent, thick, rounded corners, fill=hbSecondary, text=hbWhite, inner sep=10pt] { - \textbf{Result:} Despite v4's power, the ecosystem lacks infrastructure for adoption - }; + % Question + \node[text=hbPrimary, font=\large\bfseries] at (0,-3) {What if this could be different?}; \end{tikzpicture} \end{center} \end{frame} % ============================================ -% SLIDE 3: SOLUTION OVERVIEW +% SLIDE 3: SOLUTION - SYSTEM ARCHITECTURE % ============================================ -\begin{frame}{The Solution: Hook Bazaar} +\begin{frame}{The Solution: HookBazaar Architecture} \begin{center} -\textcolor{hbPrimary}{\large\textbf{A Decentralized Marketplace \& Infrastructure Layer}} -\end{center} +\begin{tikzpicture}[scale=0.75] + % Protocol Developer + \node[draw=hbSuccess, line width=1.5pt, fill=hbBgDark, rounded corners=5pt, minimum width=2.5cm, minimum height=0.9cm] (protodev) at (-6.5,2) {\textcolor{hbSuccess}{\small Protocol Dev}}; + + % Protocol with pools + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=6pt, minimum width=4cm, minimum height=2.2cm] (protocol) at (-6.5,-0.8) {}; + \node[text=hbPrimary, font=\small\bfseries] at (-6.5,0.1) {Protocol}; + + % Pools + \node[draw=hbMarble, fill=hbBgDark, rounded corners=2pt, minimum width=0.8cm, minimum height=0.5cm, font=\tiny] at (-7.5,-0.8) {Pool}; + \node[draw=hbMarble, fill=hbBgDark, rounded corners=2pt, minimum width=0.8cm, minimum height=0.5cm, font=\tiny] at (-6.5,-0.8) {Pool}; + \node[draw=hbMarble, fill=hbBgDark, rounded corners=2pt, minimum width=0.8cm, minimum height=0.5cm, font=\tiny] at (-5.5,-0.8) {Pool}; + \node[draw=hbPrimary, fill=hbBgDark, rounded corners=2pt, minimum width=3cm, minimum height=0.4cm, font=\tiny, text=hbPrimary] at (-6.5,-1.5) {Revenue Vault}; + + \draw[-{Stealth}, hbSuccess, thick] (protodev) -- (protocol); + + % Master Hook + \node[draw=hbPrimary, line width=2pt, fill=hbSecondary, rounded corners=5pt, minimum width=2cm, minimum height=1cm, align=center] (master) at (-2.5,-0.8) { + \textcolor{hbPrimary}{\scriptsize\textbf{Master}}\\[-2pt] + \textcolor{hbPrimary}{\scriptsize\textbf{Hook}} + }; -\vspace{0.5cm} + \draw[-{Stealth}, hbPrimary, thick] (protocol) -- (master); -\begin{columns}[T] -\begin{column}{0.32\textwidth} -\begin{block}{\faCode\ For Developers} -\begin{itemize} - \item Direct monetization - \item IP protection via FHE - \item Reputation profiles - \item Professional exposure -\end{itemize} -\end{block} -\end{column} - -\begin{column}{0.32\textwidth} -\begin{block}{\faBuilding\ For Protocols} -\begin{itemize} - \item Instant deployment - \item \textcolor{hbPrimary}{\$100s} vs \$10k+ - \item Pre-audited hooks - \item Multi-hook composition -\end{itemize} -\end{block} -\end{column} - -\begin{column}{0.32\textwidth} -\begin{block}{\faGlobe\ For Ecosystem} -\begin{itemize} - \item Self-sustaining model - \item Quality via competition - \item Network effects - \item V4 adoption boost -\end{itemize} -\end{block} -\end{column} -\end{columns} + % HookBazaar + \node[draw=hbPrimary, line width=2pt, fill=hbBgDark, rounded corners=8pt, minimum width=3.2cm, minimum height=2.4cm] (bazaar) at (1.5,-0.8) {}; + \node[text=hbPrimary, font=\bfseries] at (1.5,0.1) {HookBazaar}; -\vspace{0.8cm} + % Hooks in marketplace + \node[draw=hbAccent, fill=hbSecondary, rounded corners=2pt, minimum width=0.6cm, minimum height=0.4cm, font=\tiny] at (0.8,-0.8) {H1}; + \node[draw=hbAccent, fill=hbSecondary, rounded corners=2pt, minimum width=0.6cm, minimum height=0.4cm, font=\tiny] at (1.5,-0.8) {H2}; + \node[draw=hbAccent, fill=hbSecondary, rounded corners=2pt, minimum width=0.6cm, minimum height=0.4cm, font=\tiny] at (2.2,-0.8) {H3}; + \node[draw=hbAccent, fill=hbSecondary, rounded corners=2pt, minimum width=0.6cm, minimum height=0.4cm, font=\tiny] at (1.15,-1.4) {H4}; + \node[draw=hbAccent, fill=hbSecondary, rounded corners=2pt, minimum width=0.6cm, minimum height=0.4cm, font=\tiny] at (1.85,-1.4) {H5}; + + \draw[{Stealth}-{Stealth}, hbPrimary, thick] (master) -- (bazaar); + + % Hook Developer + \node[draw=hbAccent, line width=1.5pt, fill=hbBgDark, rounded corners=5pt, minimum width=2.5cm, minimum height=0.9cm] (hookdev) at (6,2) {\textcolor{hbAccent}{\small Hook Dev}}; + + % Submission + \node[draw=hbAccent, fill=hbSecondary, rounded corners=4pt, minimum width=2.5cm, minimum height=1.6cm, align=center] (submission) at (6,-0.8) { + \textcolor{hbMarble}{\tiny Encrypted Code}\\ + \textcolor{hbMarble}{\tiny Formal Spec}\\ + \textcolor{hbMarble}{\tiny Metadata} + }; + + \draw[-{Stealth}, hbAccent, thick] (hookdev) -- (submission); + \draw[-{Stealth}, hbAccent, thick] (submission) -- (bazaar); + + % Revenue flow + \draw[-{Stealth}, hbPrimary, thick, dashed] (bazaar.north) to[bend left=25] node[midway, above, font=\tiny, text=hbPrimary] {Revenue \$} (hookdev.west); + + % Labels + \node[text=hbMarble, font=\tiny] at (-6.5,0.8) {Full Control}; + \node[text=hbMarble, font=\tiny] at (1.5,1.2) {Verified Hooks}; + \node[text=hbMarble, font=\tiny] at (6,0.8) {IP Protected}; +\end{tikzpicture} +\end{center} +\vspace{0.2cm} \begin{center} -\textcolor{hbMarble}{Time-to-market: \textcolor{hbAccent}{\textbf{weeks}} $\rightarrow$ \textcolor{hbPrimary}{\textbf{minutes}}} +\textcolor{hbMarble}{\small Protocols plug in hooks safely $\cdot$ Developers earn proportional rewards} \end{center} \end{frame} % ============================================ -% SLIDE 4: SOLUTION APPROACH +% SLIDE 4: HOW IT WORKS - 5-STEP FLOW % ============================================ -\begin{frame}{Architecture \& Approach} +\begin{frame}{How HookBazaar Works} \begin{center} -\begin{tikzpicture}[ - box/.style={draw=hbPrimary, thick, rounded corners=3pt, fill=hbSecondary, text=hbWhite, minimum width=2.8cm, minimum height=1cm, align=center, font=\small}, - external/.style={draw=hbAccent, thick, rounded corners=3pt, fill=hbBgDark, text=hbMarble, minimum width=2.2cm, minimum height=0.8cm, align=center, font=\scriptsize}, - arrow/.style={->, thick, hbPrimary} -] - % Core packages - \node[box] (protocol) at (0,2) {protocol-pkg\\{\tiny Protocol Lifecycle}}; - \node[box] (hook) at (4,2) {hook-pkg\\{\tiny Marketplace + IP}}; - \node[box] (avs) at (0,0) {hooks-operator-avs\\{\tiny Attestation}}; - \node[box] (master) at (4,0) {master-hook-pkg\\{\tiny Composition}}; - - % External systems - \node[external] (uniswap) at (-3,2) {Uniswap V4}; - \node[external] (eigen) at (-3,0) {EigenLayer}; - \node[external] (ipfs) at (7,2) {IPFS}; - \node[external] (fhenix) at (7,0) {Fhenix FHE}; +\begin{tikzpicture}[scale=0.72] + % Step boxes + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=5pt, minimum width=2.2cm, minimum height=1.2cm] (s1) at (0,0) {}; + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=5pt, minimum width=2.2cm, minimum height=1.2cm] (s2) at (3.2,0) {}; + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=5pt, minimum width=2.2cm, minimum height=1.2cm] (s3) at (6.4,0) {}; + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=5pt, minimum width=2.2cm, minimum height=1.2cm] (s4) at (9.6,0) {}; + \node[draw=hbPrimary, line width=1.5pt, fill=hbSecondary, rounded corners=5pt, minimum width=2.2cm, minimum height=1.2cm] (s5) at (12.8,0) {}; + + % Step labels (separate nodes) + \node[text=hbPrimary, font=\scriptsize\bfseries] at (0,0.35) {1}; + \node[text=hbWhite, font=\scriptsize] at (0,-0.1) {Protocol}; + \node[text=hbPrimary, font=\scriptsize\bfseries] at (3.2,0.35) {2}; + \node[text=hbWhite, font=\scriptsize] at (3.2,-0.1) {Browse}; + \node[text=hbPrimary, font=\scriptsize\bfseries] at (6.4,0.35) {3}; + \node[text=hbWhite, font=\scriptsize] at (6.4,-0.1) {AVS}; + \node[text=hbPrimary, font=\scriptsize\bfseries] at (9.6,0.35) {4}; + \node[text=hbWhite, font=\scriptsize] at (9.6,-0.1) {IP}; + \node[text=hbPrimary, font=\scriptsize\bfseries] at (12.8,0.35) {5}; + \node[text=hbWhite, font=\scriptsize] at (12.8,-0.1) {Market}; + + % Details below + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, minimum width=1.8cm, minimum height=0.5cm, font=\tiny, text=hbMarble] at (0,-1.1) {Pools+Master}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, minimum width=1.8cm, minimum height=0.5cm, font=\tiny, text=hbMarble] at (3.2,-1.1) {Specs+Compat}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, minimum width=1.8cm, minimum height=0.5cm, font=\tiny, text=hbMarble] at (6.4,-1.1) {EigenLayer}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, minimum width=1.8cm, minimum height=0.5cm, font=\tiny, text=hbMarble] at (9.6,-1.1) {Fhenix FHE}; + \node[draw=hbAccent, fill=hbBgDark, rounded corners=3pt, minimum width=1.8cm, minimum height=0.5cm, font=\tiny, text=hbMarble] at (12.8,-1.1) {Price/Demand}; % Arrows - \draw[arrow] (protocol) -- (uniswap); - \draw[arrow] (avs) -- (eigen); - \draw[arrow] (hook) -- (ipfs); - \draw[arrow] (hook) -- (fhenix); - \draw[arrow, hbAccent] (protocol) -- (hook); - \draw[arrow, hbAccent] (avs) -- (hook); - \draw[arrow, hbAccent] (master) -- (hook); -\end{tikzpicture} -\end{center} + \draw[-{Stealth}, thick, hbPrimary] (s1) -- (s2); + \draw[-{Stealth}, thick, hbPrimary] (s2) -- (s3); + \draw[-{Stealth}, thick, hbPrimary] (s3) -- (s4); + \draw[-{Stealth}, thick, hbPrimary] (s4) -- (s5); -\vspace{0.5cm} + % Hook Submission Flow (bottom) + \node[draw=hbPrimary, dashed, rounded corners=8pt, minimum width=13cm, minimum height=1.6cm] at (6.4,-2.8) {}; + + \node[draw=hbAccent, fill=hbSecondary, rounded corners=3pt, minimum width=1.6cm, minimum height=0.6cm, font=\tiny, text=hbMarble] (c1) at (1.5,-2.7) {Encrypted}; + \node[draw=hbAccent, fill=hbSecondary, rounded corners=3pt, minimum width=1.6cm, minimum height=0.6cm, font=\tiny, text=hbMarble] (c2) at (4.5,-2.7) {Formal Spec}; + \node[draw=hbSuccess, fill=hbSecondary, rounded corners=3pt, minimum width=1.6cm, minimum height=0.6cm, font=\tiny, text=hbMarble] (c3) at (7.5,-2.7) {AVS Check}; + \node[draw=hbPrimary, fill=hbSecondary, rounded corners=3pt, minimum width=1.6cm, minimum height=0.6cm, font=\tiny, text=hbMarble] (c4) at (10.5,-2.7) {Listed}; + + \draw[-{Stealth}, hbAccent, thick] (c1) -- (c2); + \draw[-{Stealth}, hbAccent, thick] (c2) -- (c3); + \draw[-{Stealth}, hbSuccess, thick] (c3) -- (c4); -\begin{columns}[T] -\begin{column}{0.48\textwidth} -\textcolor{hbPrimary}{\textbf{Core Packages}} -\begin{itemize} - \item \textbf{protocol-pkg}: Pool administration - \item \textbf{hook-pkg}: Development \& marketplace - \item \textbf{hooks-operator-avs}: EigenLayer attestation - \item \textbf{master-hook-pkg}: Diamond composition -\end{itemize} -\end{column} - -\begin{column}{0.48\textwidth} -\textcolor{hbPrimary}{\textbf{Sponsor Integrations}} -\begin{itemize} - \item \textbf{Fhenix CoFHE}: Encrypted hooks for IP protection - \item \textbf{EigenLayer AVS}: Cryptoeconomic guarantees via staked operators -\end{itemize} -\end{column} -\end{columns} + \node[text=hbMarble, font=\tiny] at (6.4,-3.5) {Hook Submission Flow}; +\end{tikzpicture} +\end{center} \end{frame} % ============================================ -% SLIDE 5: FEATURE 1 - HOOK SPECIFICATION FORMAT +% SLIDE 5: AVS VERIFICATION FLOW % ============================================ -\begin{frame}{Key Feature: Mathematical Hook Specifications} +\begin{frame}{Formal Verification via EigenLayer AVS} -\begin{columns}[T] -\begin{column}{0.55\textwidth} -\textcolor{hbPrimary}{\large\textbf{Hook Specification Format (HSF)}} +\begin{center} +\begin{tikzpicture}[scale=0.8] + % Hook Developer + \node[draw=hbAccent, line width=1.5pt, fill=hbBgDark, rounded corners=5pt, minimum width=2cm, minimum height=0.9cm] (dev) at (-5.5,2) {\textcolor{hbAccent}{\small Hook Dev}}; + + % Submission + \node[draw=hbPrimary, fill=hbSecondary, rounded corners=5pt, minimum width=2.8cm, minimum height=1.8cm, align=center] (submit) at (-5.5,-0.2) { + \textcolor{hbWhite}{\scriptsize\textbf{Submission}}\\[4pt] + \textcolor{hbMarble}{\tiny Bytecode}\\ + \textcolor{hbMarble}{\tiny Formal Spec}\\ + \textcolor{hbMarble}{\tiny State Model} + }; -\vspace{0.3cm} + \draw[-{Stealth}, hbAccent, thick] (dev) -- (submit); -\textcolor{hbAccent}{\textbf{Why It Matters}} -\begin{itemize} - \item Objective behavior verification - \item Formal state machine definitions - \item Machine-readable specifications - \item Foundation for AVS attestation -\end{itemize} + % AVS Operator + \node[draw=hbSuccess, line width=2pt, fill=hbBgDark, rounded corners=8pt, minimum width=3.2cm, minimum height=2.2cm, align=center] (avs) at (-1,-0.2) {}; + \node[text=hbSuccess, font=\small\bfseries] at (-1,0.5) {AVS Operator}; + \node[text=hbMarble, font=\tiny, align=center] at (-1,-0.3) {Off-chain\\Attestation}; + \node[draw=hbPrimary, fill=hbSecondary, rounded corners=2pt, font=\tiny, text=hbWhite] at (-1,-1) {EigenLayer}; -\vspace{0.5cm} + \draw[-{Stealth}, hbPrimary, thick] (submit) -- (avs) node[midway, above, font=\tiny, text=hbMarble] {verify}; -\textcolor{hbAccent}{\textbf{What It Enables}} -\begin{itemize} - \item \textbf{Trust}: Verify before integrating - \item \textbf{Comparison}: Objective evaluation - \item \textbf{Slashing}: Proof of misbehavior - \item \textbf{Composition}: Safe multi-hook stacking -\end{itemize} -\end{column} - -\begin{column}{0.42\textwidth} -\begin{tikzpicture} - \node[draw=hbPrimary, thick, fill=hbSecondary, text=hbMarble, rounded corners, inner sep=8pt, font=\scriptsize, align=left] { - \textcolor{hbPrimary}{\texttt{// Hook State Model}}\\[2pt] - \texttt{States: \{Inactive, Active\}}\\[2pt] - \texttt{Events: \{beforeSwap, afterSwap\}}\\[2pt] - \texttt{Invariants:}\\ - \texttt{\ \ fee $\leq$ MAX\_FEE}\\ - \texttt{\ \ balance $\geq$ 0}\\[4pt] - \textcolor{hbPrimary}{\texttt{// Transition}}\\[2pt] - \texttt{beforeSwap(params):}\\ - \texttt{\ \ require(state == Active)}\\ - \texttt{\ \ fee = computeFee(params)}\\ - \texttt{\ \ emit FeeUpdated(fee)} + % Verification + \node[draw=hbPrimary, fill=hbSecondary, rounded corners=5pt, minimum width=3.2cm, minimum height=2cm, align=center] (checks) at (3.5,-0.2) { + \textcolor{hbPrimary}{\scriptsize\textbf{Verification}}\\[4pt] + \textcolor{hbSuccess}{\tiny\faCheck\ Code $\leftrightarrow$ Spec}\\ + \textcolor{hbSuccess}{\tiny\faCheck\ State Invariants}\\ + \textcolor{hbSuccess}{\tiny\faCheck\ Behavior Match}\\ + \textcolor{hbSuccess}{\tiny\faCheck\ Compatibility} }; -\end{tikzpicture} -\vspace{0.3cm} + \draw[-{Stealth}, hbSuccess, thick] (avs) -- (checks); -\begin{center} -\textcolor{hbMarble}{\scriptsize Specifications stored on IPFS}\\ -\textcolor{hbMarble}{\scriptsize Verified by EigenLayer operators} + % Approved + \node[draw=hbPrimary, line width=2pt, fill=hbSecondary, rounded corners=5pt, minimum width=2.2cm, minimum height=0.9cm] (approved) at (3.5,-2.5) {\textcolor{hbPrimary}{\small\textbf{Approved}}}; + + \draw[-{Stealth}, hbSuccess, thick] (checks) -- (approved); + + % Marketplace + \node[draw=hbPrimary, fill=hbBgDark, rounded corners=5pt, minimum width=2.2cm, minimum height=0.9cm] (market) at (-1,-2.5) {\textcolor{hbPrimary}{\small Marketplace}}; + + \draw[-{Stealth}, hbPrimary, thick] (approved) -- (market); + + % Key insight + \node[draw=hbAccent, dashed, rounded corners=4pt, minimum width=4.5cm, minimum height=0.7cm, align=center] at (-5.5,-2.5) {\textcolor{hbMarble}{\tiny Math spec aligns with deployed code}}; +\end{tikzpicture} \end{center} -\end{column} -\end{columns} \end{frame} % ============================================ -% SLIDE 6: FEATURE 2 - AVS ATTESTATION +% SLIDE 6: IP PROTECTION VIA FHENIX % ============================================ -\begin{frame}{Key Feature: EigenLayer AVS Attestation} +\begin{frame}{IP Protection via Fhenix FHE} -\begin{columns}[T] -\begin{column}{0.55\textwidth} -\textcolor{hbPrimary}{\large\textbf{Cryptoeconomic Guarantees}} +\begin{center} +\begin{tikzpicture}[scale=0.8] + % Original code + \node[draw=hbAccent, fill=hbSecondary, rounded corners=5pt, minimum width=2.8cm, minimum height=1.6cm, align=center] (original) at (-5,0.5) { + \textcolor{hbWhite}{\scriptsize\textbf{Original}}\\[3pt] + \textcolor{hbMarble}{\tiny Hook Code}\\ + \textcolor{hbMarble}{\tiny Types + Logic} + }; -\vspace{0.3cm} + % Fhenix + \node[draw=hbPrimary, line width=2pt, fill=hbBgDark, rounded corners=8pt, minimum width=3cm, minimum height=1.8cm, align=center] (fhenix) at (0,0.5) { + \textcolor{hbPrimary}{\textbf{Fhenix}}\\[4pt] + \textcolor{hbMarble}{\scriptsize FHE Encryption}\\[3pt] + \textcolor{hbWhite}{\tiny\faLock\ Bytecode}\\ + \textcolor{hbWhite}{\tiny\faLock\ Types} + }; -\textcolor{hbAccent}{\textbf{Why It Matters}} -\begin{itemize} - \item Staked operators verify hook behavior - \item Economic penalties for false attestations - \item Decentralized trust --- no central authority - \item Continuous compliance monitoring -\end{itemize} + \draw[-{Stealth}, hbAccent, thick] (original) -- (fhenix); -\vspace{0.5cm} + % Protected + \node[draw=hbSuccess, fill=hbSecondary, rounded corners=5pt, minimum width=2.8cm, minimum height=1.6cm, align=center] (encrypted) at (5,0.5) { + \textcolor{hbSuccess}{\scriptsize\textbf{Protected}}\\[3pt] + \textcolor{hbMarble}{\tiny Encrypted Bytecode}\\ + \textcolor{hbMarble}{\tiny Secure Execution} + }; -\textcolor{hbAccent}{\textbf{Slashing Mechanism}} -\begin{itemize} - \item \textbf{50\% slash}: False positive attestation - \item \textbf{30\% slash}: False negative (missed violation) - \item Challenge window for disputes - \item Proof submitted on-chain -\end{itemize} -\end{column} - -\begin{column}{0.42\textwidth} -\begin{tikzpicture}[ - node distance=0.8cm, - box/.style={draw=hbPrimary, thick, rounded corners=2pt, fill=hbSecondary, text=hbWhite, minimum width=2.5cm, minimum height=0.7cm, align=center, font=\scriptsize}, - arrow/.style={->, thick, hbPrimary} -] - \node[box] (task) {Task Created}; - \node[box, below=of task] (sample) {Operator Samples\\Hook State}; - \node[box, below=of sample] (verify) {Verify Against\\Specification}; - \node[box, below=of verify] (attest) {Submit\\Attestation}; - \node[box, below=of attest] (challenge) {Challenge\\Window}; - - \draw[arrow] (task) -- (sample); - \draw[arrow] (sample) -- (verify); - \draw[arrow] (verify) -- (attest); - \draw[arrow] (attest) -- (challenge); -\end{tikzpicture} + \draw[-{Stealth}, hbPrimary, thick] (fhenix) -- (encrypted); -\vspace{0.3cm} + % Economic model + \node[draw=hbPrimary, dashed, rounded corners=8pt, minimum width=11cm, minimum height=1.8cm] at (0,-2.2) {}; -\begin{center} -\textcolor{hbMarble}{\scriptsize Powered by EigenLayer restaking} + \node[text=hbPrimary, font=\small\bfseries] at (0,-1.4) {Economic Security Model}; + + % Price vs cost + \node[draw=hbAccent, fill=hbSecondary, rounded corners=4pt, minimum width=2.8cm, minimum height=0.9cm, align=center] (price) at (-3,-2.5) { + \textcolor{hbPrimary}{\scriptsize Hook Price}\\[-1pt] + \textcolor{hbMarble}{\tiny Market-driven} + }; + + \node[text=hbPrimary, font=\Large] at (0,-2.5) {\textbf{<}}; + + \node[draw=hbAccent, fill=hbSecondary, rounded corners=4pt, minimum width=2.8cm, minimum height=0.9cm, align=center] (decompile) at (3,-2.5) { + \textcolor{hbAccent}{\scriptsize Decompile Cost}\\[-1pt] + \textcolor{hbMarble}{\tiny Extremely High} + }; + + % Result + \node[text=hbSuccess, font=\scriptsize] at (0,-3.6) {\faArrowRight\ Incentivizes legitimate usage over reverse engineering}; +\end{tikzpicture} \end{center} -\end{column} -\end{columns} \end{frame} \end{document}