mirror of
https://github.com/LORDBABUINO/stealth.git
synced 2026-06-09 14:11:52 -07:00
Add Slidev pitch presentation
This commit is contained in:
@@ -35,7 +35,8 @@ Detects UTXOs that were created by, or whose history involves, transactions wher
|
||||
```
|
||||
stealth/
|
||||
├── frontend/ # User interface
|
||||
└── backend/ # Descriptor parsing, chain data fetching, and analysis engine
|
||||
├── backend/ # Descriptor parsing, chain data fetching, and analysis engine
|
||||
└── slides/ # Slidev pitch presentation
|
||||
```
|
||||
|
||||
## Privacy notice
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Stealth Pitch Slides
|
||||
|
||||
Slidev presentation for the Stealth hackathon pitch.
|
||||
|
||||
## Run
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
pnpm run dev
|
||||
```
|
||||
|
||||
Opens at http://localhost:3030/
|
||||
|
||||
## Export
|
||||
|
||||
```bash
|
||||
pnpm run build # Static SPA to dist/
|
||||
pnpm run export # PDF export
|
||||
```
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "stealth-pitch",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "pnpm exec slidev slides.md --open",
|
||||
"build": "pnpm exec slidev build slides.md",
|
||||
"export": "pnpm exec slidev export slides.md"
|
||||
},
|
||||
"dependencies": {
|
||||
"@slidev/cli": "^52.0.0",
|
||||
"@slidev/theme-default": "^0.25.0"
|
||||
}
|
||||
}
|
||||
Generated
+5692
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,175 @@
|
||||
---
|
||||
theme: default
|
||||
title: Stealth — Bitcoin Wallet Privacy Analyzer
|
||||
titleTemplate: '%s | Stealth'
|
||||
class: stealth-theme
|
||||
fonts:
|
||||
sans: Inter
|
||||
mono: JetBrains Mono
|
||||
lineNumbers: false
|
||||
drawings:
|
||||
persist: false
|
||||
transition: slide
|
||||
mdc: true
|
||||
---
|
||||
|
||||
# STEAL<span class="accent">TH</span>
|
||||
|
||||
### Bitcoin Wallet Privacy Analyzer
|
||||
|
||||
A privacy audit tool that surfaces vulnerabilities at the UTXO level.
|
||||
|
||||
---
|
||||
|
||||
# The Problem
|
||||
|
||||
<div class="grid grid-cols-2 gap-8">
|
||||
|
||||
<div>
|
||||
|
||||
**Bitcoin privacy is fragile**
|
||||
|
||||
- Chain analysis firms track wallets
|
||||
- Common heuristics link addresses
|
||||
- Users rarely know their exposure
|
||||
- One bad UTXO can taint the rest
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
**Today's tools**
|
||||
|
||||
- Complex, require expertise
|
||||
- No UTXO-level visibility
|
||||
- Hard to understand risk before spending
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
# What Stealth Does
|
||||
|
||||
<div class="grid grid-cols-2 gap-6">
|
||||
|
||||
<div>
|
||||
|
||||
**Input**
|
||||
- Paste wallet descriptor
|
||||
- Supports `wpkh`, `pkh`, `sh(wpkh)`, `tr`, multisig
|
||||
|
||||
**Output**
|
||||
- Every UTXO listed
|
||||
- Privacy flaws per UTXO
|
||||
- Severity badges (high / medium / low)
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
```bash
|
||||
# One click
|
||||
wpkh([xpub...]/0/*) → Analyze
|
||||
```
|
||||
|
||||
→ Full report with actionable insights
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
# Vulnerabilities Detected
|
||||
|
||||
| Vulnerability | What it means |
|
||||
|---------------|---------------|
|
||||
| **Address Reuse** | Same address received >1 payment — links tx history, exposes balance |
|
||||
| **Dust Spend** | UTXO from dust attack — when spent, links previously unconnected addresses |
|
||||
| **UTXO Consolidation** | Multiple inputs merged — strong signal all belong to same wallet |
|
||||
| **CIOH** | Common Input Ownership Heuristic — chain analysis firms use this to cluster addresses |
|
||||
|
||||
---
|
||||
|
||||
# How It Works
|
||||
|
||||
<div class="grid grid-cols-3 gap-4">
|
||||
|
||||
<div class="card p-4">
|
||||
|
||||
**1. Parse**
|
||||
- Extract addresses from descriptor
|
||||
- Support all common formats
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card p-4">
|
||||
|
||||
**2. Fetch**
|
||||
- On-chain history per address
|
||||
- Uses Bitcoin node / API
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card p-4">
|
||||
|
||||
**3. Analyze**
|
||||
- Apply privacy heuristics
|
||||
- Flag each UTXO with findings
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
# Architecture
|
||||
|
||||
```
|
||||
stealth/
|
||||
├── frontend/ # React + Vite — input, loading, report
|
||||
└── backend/ # Java/Quarkus — descriptor parsing, chain data, analysis
|
||||
```
|
||||
|
||||
- **Read-only** — no keys, no storage, no transmission of descriptors
|
||||
- **Self-hostable** — point at your own node for max privacy
|
||||
|
||||
---
|
||||
|
||||
# Demo Flow
|
||||
|
||||
1. **Input screen** — paste descriptor, click Analyze
|
||||
2. **Loading** — fetches and analyzes
|
||||
3. **Report** — summary bar (total / vulnerable / clean) + UTXO cards
|
||||
4. Each card: address, amount, badges, expandable details
|
||||
|
||||
---
|
||||
|
||||
# Why It Matters
|
||||
|
||||
- **Users** — understand exposure before consolidating or spending
|
||||
- **Wallets** — integrate as pre-spend check
|
||||
- **Researchers** — study privacy heuristics at scale
|
||||
- **Privacy-first** — no cloud, no logs, no tracking
|
||||
|
||||
---
|
||||
|
||||
# Thank You
|
||||
|
||||
**STEAL<span class="accent">TH</span>**
|
||||
|
||||
Bitcoin Wallet Privacy Analyzer
|
||||
|
||||
---
|
||||
|
||||
# Appendix — Supported Descriptors
|
||||
|
||||
- `wpkh(...)` — native SegWit
|
||||
- `pkh(...)` — legacy
|
||||
- `sh(wpkh(...))` — nested SegWit
|
||||
- `tr(...)` — Taproot
|
||||
- Multisig variants
|
||||
|
||||
All analysis uses publicly available on-chain data.
|
||||
@@ -0,0 +1,84 @@
|
||||
/* Stealth theme overrides — matches frontend App.css */
|
||||
:root {
|
||||
--slidev-theme-primary: #00d4aa;
|
||||
--slidev-theme-accent: #00d4aa;
|
||||
--stealth-bg: #080c14;
|
||||
--stealth-surface: #0f1623;
|
||||
--stealth-surface-2: #162030;
|
||||
--stealth-border: #1e2d45;
|
||||
--stealth-accent: #00d4aa;
|
||||
--stealth-danger: #ff4d6d;
|
||||
--stealth-warning: #f4a261;
|
||||
--stealth-safe: #2ec4b6;
|
||||
--stealth-text: #e8edf5;
|
||||
--stealth-text-muted: #6b7a99;
|
||||
}
|
||||
|
||||
.slidev-layout {
|
||||
background-color: var(--stealth-bg) !important;
|
||||
color: var(--stealth-text) !important;
|
||||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif !important;
|
||||
}
|
||||
|
||||
.slidev-layout h1,
|
||||
.slidev-layout h2,
|
||||
.slidev-layout h3 {
|
||||
color: var(--stealth-text) !important;
|
||||
font-weight: 700;
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.slidev-layout h1 {
|
||||
font-size: 2.5rem !important;
|
||||
}
|
||||
|
||||
.slidev-layout h1 .accent {
|
||||
color: var(--stealth-accent) !important;
|
||||
}
|
||||
|
||||
.slidev-layout p,
|
||||
.slidev-layout li {
|
||||
color: var(--stealth-text-muted) !important;
|
||||
}
|
||||
|
||||
.slidev-layout a {
|
||||
color: var(--stealth-accent) !important;
|
||||
}
|
||||
|
||||
.slidev-layout code {
|
||||
font-family: 'JetBrains Mono', 'Fira Code', monospace !important;
|
||||
background: var(--stealth-surface) !important;
|
||||
color: var(--stealth-accent) !important;
|
||||
border: 1px solid var(--stealth-border) !important;
|
||||
border-radius: 6px !important;
|
||||
}
|
||||
|
||||
.slidev-layout .badge-danger {
|
||||
background: rgba(255, 77, 109, 0.15);
|
||||
color: var(--stealth-danger);
|
||||
border: 1px solid rgba(255, 77, 109, 0.3);
|
||||
}
|
||||
|
||||
.slidev-layout .badge-warning {
|
||||
background: rgba(244, 162, 97, 0.15);
|
||||
color: var(--stealth-warning);
|
||||
border: 1px solid rgba(244, 162, 97, 0.3);
|
||||
}
|
||||
|
||||
.slidev-layout .badge-safe {
|
||||
background: rgba(46, 196, 182, 0.15);
|
||||
color: var(--stealth-safe);
|
||||
border: 1px solid rgba(46, 196, 182, 0.3);
|
||||
}
|
||||
|
||||
.slidev-layout .card {
|
||||
background: var(--stealth-surface) !important;
|
||||
border: 1px solid var(--stealth-border) !important;
|
||||
border-radius: 12px !important;
|
||||
}
|
||||
|
||||
.slidev-layout .btn-primary {
|
||||
background: var(--stealth-accent) !important;
|
||||
color: #080c14 !important;
|
||||
font-weight: 700 !important;
|
||||
}
|
||||
Reference in New Issue
Block a user