From ebc1a8017f58a358d9cd618ad5384eff87c446d0 Mon Sep 17 00:00:00 2001 From: pikaro Date: Thu, 16 Jul 2026 12:51:30 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20documentar=20m=C3=B3dulo=20Peritaje=20f?= =?UTF-8?q?orense=20implementado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CHANGELOG (1.10.0) y README reflejan que el peritaje forense ya está implementado, no solo especificado: qué hace, qué heurísticas reutiliza y cuáles son nuevas, el marco HECHO/INFERENCIA/DECLARACION, y la limitación conocida de depender de /api/address/{addr}/txs en vez de /outspend (el backend Mempool self-hosted no lo expone). --- CHANGELOG.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 9 +++++++++ 2 files changed, 54 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 658e582..86a38fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,51 @@ y el versionado sigue [Versionado Semántico](https://semver.org/lang/es/): - **MENOR** — características nuevas que no rompen lo anterior - **PARCHE** — arreglos de errores +--- +## [1.10.0] — 2026-07-16 +### Añadido +- Peritaje forense: nueva pestaña que rastrea fondos robados o perdidos hacia + adelante, salto a salto, desde una transacción de origen (`txid:vout`) hasta + un punto de parada natural — custodio identificado, dilución excesiva, + CoinJoin real, o fondos aún sin gastar. Todo el rastreo corre sobre tu + propio nodo (Bitcoin Core + Fulcrum + Mempool self-hosted), como el resto + de la app: ninguna consulta sale de tu red. + - Sigue todos los outputs de cada salto (no solo el presunto cambio), + porque los fondos pueden repartirse en varias ramas; cada rama se + detiene de forma independiente y puede ampliarse con "seguir más + saltos" si el límite por defecto se queda corto. + - Reutiliza las heurísticas existentes del analizador (CIOH, detección de + cambio estructural, huella de wallet, CoinJoin, entidades conocidas) y + añade tres nuevas: perfil de dirección (personal vs hot wallet de + exchange), cambio conductual (se gasta rápido vs queda quieto) cruzado + con la señal estructural, y comparación de huella de software entre + saltos consecutivos. + - Confirma cadenas de peeling multi-salto: el check de patrón de pago + simple ya avisaba de que una sola transacción no basta para confirmar + una cadena — este módulo es lo que cierra ese hueco, siguiendo el rastro + hacia adelante de verdad. + - Marco de tres niveles en cada afirmación del informe: HECHO (dato + on-chain verificable), INFERENCIA (conclusión de una heurística, con su + propia sub-etiqueta CERTEZA/PROBABLE/POSIBLE) y DECLARACIÓN (lo que + cuenta el afectado, en un formulario de texto libre, siempre mostrado + aparte y nunca mezclado con los hechos). + - Informe con resumen, declaración del afectado, cronología, direcciones + atribuidas con su fundamento, fondos localizados sin gastar, + conclusiones numeradas, recomendaciones (con un aviso fijo contra + estafas de "recuperación de fondos" siempre que hay declaración), + metodología y anexo de verificación. Exportable a JSON y Markdown, igual + que el informe de wallet. + - No identifica la identidad real de nadie: como mucho llega a "hot wallet + de [exchange]" o "custodio no identificado". No hace denuncias ni envíos + automáticos a terceros — el informe es un documento que decides tú a + dónde llevar. + +### Cambiado +- `unionFindCluster` (vinculación por CIOH) y `guessChangeOutput` (señales de + cambio estructural) se extrajeron de `buildWalletReport` y `analyzeTx` + respectivamente a funciones compartidas, sin cambio de comportamiento, para + que el peritaje forense las reutilice salto a salto. + --- ## [1.9.0] — 2026-06-12 ### Añadido diff --git a/README.md b/README.md index 5572e33..4d8ed2e 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,14 @@ Las únicas dependencias externas son las librerías del frontend (React, Babel) - Bandas de privacidad con distinción explícita CERTEZA / PROBABLE / POSIBLE - Exportación del informe en JSON y Markdown +**Peritaje forense** +- Rastreo de fondos robados o perdidos hacia adelante, salto a salto, desde una transacción de origen hasta un punto de parada natural (custodio identificado, dilución, CoinJoin, o fondos aún sin gastar) +- Reutiliza las heurísticas del analizador (CIOH, cambio, huella de wallet, entidades) y añade perfil de dirección (personal vs hot wallet), cambio conductual y comparación de huella entre saltos +- Confirma cadenas de peeling multi-salto, algo que el análisis de una sola transacción no puede hacer por sí solo +- Cada afirmación del informe se etiqueta como HECHO, INFERENCIA (con su propia certeza) o DECLARACIÓN — nunca se mezclan +- Informe exportable a JSON y Markdown con cronología, direcciones atribuidas, fondos sin gastar, conclusiones y metodología +- No identifica la identidad real de nadie; no envía nada a terceros — el informe es tuyo para decidir qué hacer con él + **Integración con Sparrow** - Importación de etiquetas BIP-329: carga el `.jsonl` que exporta Sparrow y muestra tus propias etiquetas junto al análisis. Se lee en memoria, no sale del navegador - Watch-only por xpub/zpub: pega tu Master Public Key y Txoko deriva tus direcciones en local para marcar, en cada transacción, qué outputs son tuyos (recepción o cambio). La derivación BIP32 está implementada sin librerías externas; el xpub nunca sale del navegador. Requiere HTTPS (ver nota más abajo) @@ -193,6 +201,7 @@ El frontend es un único archivo HTML autocontenido. Sin bundler, sin npm, sin p - **Base de datos de entidades parcial** — ~745 direcciones de exchanges, OFAC y minería. Cubre los casos más comunes; no es completa - **Fingerprinting conservador** — requiere varias señales coincidentes; prefiere no detectar antes que detectar mal - **Sin análisis de red** — no cruza datos con otros nodos ni mempool distribuida +- **Peritaje forense sin `/outspend`** — el backend Mempool self-hosted no expone ese endpoint, así que cada salto se resuelve recorriendo el historial de la dirección receptora. Más peticiones que un `/outspend` directo, con throttling por lotes para no saturar el nodo ---