mirror of
https://github.com/LORDBABUINO/stealth.git
synced 2026-07-24 07:38:10 -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/
|
stealth/
|
||||||
├── frontend/ # User interface
|
├── 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
|
## 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