fix: checks positivos (CoinJoin) se marcan en verde, no como advertencia; docs: fixtures verificados
This commit is contained in:
+11
-1
@@ -20,7 +20,7 @@ nodo y corrige la fila).
|
|||||||
|
|
||||||
| # | Tipo | txid | Resultado esperado | Verificado |
|
| # | Tipo | txid | Resultado esperado | Verificado |
|
||||||
|---|------|------|--------------------|------------|
|
|---|------|------|--------------------|------------|
|
||||||
| 1 | Whirlpool CoinJoin | `323df21f0b0756f98336437aa3d2fb87e02b59f1946b714a7b09df04d429dec2` | CoinJoin detectado, banda ALTA, fingerprint "Samourai/Sparrow" inferido | ☐ |
|
| 1 | Whirlpool CoinJoin (5×5, 2019) | `323df21f0b0756f98336437aa3d2fb87e02b59f1946b714a7b09df04d429dec2` | CoinJoin detectado (✓ verde), banda ALTA, fingerprint "Samourai/Sparrow (Whirlpool)" | ✅ 2026-06-03 |
|
||||||
| 2 | WabiSabi CoinJoin | `fb596c9f675471019c60e984b569f9020dac3b2822b16396042b50c890b45e5e` | CoinJoin grande, banda ALTA, "Wasabi" inferido | ☐ |
|
| 2 | WabiSabi CoinJoin | `fb596c9f675471019c60e984b569f9020dac3b2822b16396042b50c890b45e5e` | CoinJoin grande, banda ALTA, "Wasabi" inferido | ☐ |
|
||||||
| 3 | JoinMarket CoinJoin | `4f112abd2eefe3484a7bbf7c1731f784cba19de677468835145e9c448fb18b7d` | CoinJoin con outputs iguales, verificar mínimo ~10k sats | ☐ |
|
| 3 | JoinMarket CoinJoin | `4f112abd2eefe3484a7bbf7c1731f784cba19de677468835145e9c448fb18b7d` | CoinJoin con outputs iguales, verificar mínimo ~10k sats | ☐ |
|
||||||
| 4 | Batch payment 144 outputs (F2Pool, 2022-02-15) | `ef5d100a70eea9b7349a40fdfd51064fc5cebf5e3b4240f92591569836896949` | 1→144 outputs, **NO** CoinJoin, banda **MEDIA**, check "Pago por lotes" penaliza (−45) | ✅ 2026-06-03 |
|
| 4 | Batch payment 144 outputs (F2Pool, 2022-02-15) | `ef5d100a70eea9b7349a40fdfd51064fc5cebf5e3b4240f92591569836896949` | 1→144 outputs, **NO** CoinJoin, banda **MEDIA**, check "Pago por lotes" penaliza (−45) | ✅ 2026-06-03 |
|
||||||
@@ -113,3 +113,13 @@ título de cada check (CERTEZA/PROBABLE/POSIBLE) puede confundir cuando el check
|
|||||||
da resultado negativo —por ejemplo "Estructura CoinJoin / mezcla — PROBABLE"
|
da resultado negativo —por ejemplo "Estructura CoinJoin / mezcla — PROBABLE"
|
||||||
cuando en realidad NO hay CoinJoin (el resultado real está en el detalle, no en
|
cuando en realidad NO hay CoinJoin (el resultado real está en el detalle, no en
|
||||||
el badge). Pendiente de mejorar la claridad de la presentación.
|
el badge). Pendiente de mejorar la claridad de la presentación.
|
||||||
|
|
||||||
|
### 2026-06-03 — Fixture #1 (Whirlpool CoinJoin)
|
||||||
|
Al validar un Whirlpool real (5×5) se confirmó que el motor lo detecta bien
|
||||||
|
(banda ALTA, fingerprint correcto), pero el check de CoinJoin se mostraba con
|
||||||
|
icono gris neutro y badge ámbar, como si fuera una advertencia — cuando detectar
|
||||||
|
un CoinJoin es algo POSITIVO para la privacidad. Corregido: el icono y color de
|
||||||
|
cada check ahora reflejan si el resultado es bueno o malo para la privacidad
|
||||||
|
(verde = bueno), no solo el estado interno. Un CoinJoin detectado sale en verde.
|
||||||
|
El badge de certeza se mantiene aparte, indicando solo el nivel de confianza.
|
||||||
|
Esto resuelve en parte el punto anterior sobre la claridad del badge.
|
||||||
|
|||||||
+4
-4
@@ -1154,7 +1154,7 @@
|
|||||||
? `Detectado: ${cjVariant}. ${tx.vin.length} inputs, ${tx.vout.length} outputs, ${maxEqual} outputs de igual valor. Mejora significativa de privacidad.`
|
? `Detectado: ${cjVariant}. ${tx.vin.length} inputs, ${tx.vout.length} outputs, ${maxEqual} outputs de igual valor. Mejora significativa de privacidad.`
|
||||||
: "No se detecta estructura CoinJoin. La transacción es trazable directamente.",
|
: "No se detecta estructura CoinJoin. La transacción es trazable directamente.",
|
||||||
didactic: "CoinJoin combina inputs de múltiples usuarios en una sola transacción con outputs de igual valor, rompiendo el enlace entre emisor y receptor. Whirlpool usa denominaciones fijas (100k, 1M, 5M, 50M sats). JoinMarket y Wasabi tienen estructuras similares.",
|
didactic: "CoinJoin combina inputs de múltiples usuarios en una sola transacción con outputs de igual valor, rompiendo el enlace entre emisor y receptor. Whirlpool usa denominaciones fijas (100k, 1M, 5M, 50M sats). JoinMarket y Wasabi tienen estructuras similares.",
|
||||||
penalty: 0, informational: true, positive: likelyCJ,
|
penalty: 0, positive: likelyCJ, informational: !likelyCJ,
|
||||||
});
|
});
|
||||||
// Sin penalización por no usar CoinJoin — es una técnica avanzada, no un error
|
// Sin penalización por no usar CoinJoin — es una técnica avanzada, no un error
|
||||||
|
|
||||||
@@ -1846,11 +1846,11 @@
|
|||||||
<div key={check.id} style={{background:C.bgCard,border:`1px solid ${expanded===check.id?C.purple+"60":C.border}`,borderRadius:6,overflow:"hidden"}}>
|
<div key={check.id} style={{background:C.bgCard,border:`1px solid ${expanded===check.id?C.purple+"60":C.border}`,borderRadius:6,overflow:"hidden"}}>
|
||||||
<div onClick={()=>setExpanded(expanded===check.id?null:check.id)}
|
<div onClick={()=>setExpanded(expanded===check.id?null:check.id)}
|
||||||
style={{display:"flex",alignItems:"center",gap:8,padding:"10px 14px",cursor:"pointer"}}>
|
style={{display:"flex",alignItems:"center",gap:8,padding:"10px 14px",cursor:"pointer"}}>
|
||||||
<span style={{fontSize:"0.8rem",color:check.informational?C.blue:check.pass?C.green:C.red,flexShrink:0,fontWeight:700}}>
|
<span style={{fontSize:"0.8rem",color:check.informational?C.blue:(check.positive&&!check.pass)?C.green:check.pass?C.green:C.red,flexShrink:0,fontWeight:700}}>
|
||||||
{check.informational?"·":check.pass?"✓":"✗"}
|
{check.informational?"·":(check.positive&&!check.pass)?"✓":check.pass?"✓":"✗"}
|
||||||
</span>
|
</span>
|
||||||
<span style={{flex:1,fontSize:"0.73rem",color:C.t1,fontFamily:"monospace"}}>{check.label}</span>
|
<span style={{flex:1,fontSize:"0.73rem",color:C.t1,fontFamily:"monospace"}}>{check.label}</span>
|
||||||
{!check.pass&&check.actionability&&(
|
{!check.pass&&!check.positive&&check.actionability&&(
|
||||||
<span style={{fontSize:"0.55rem",fontFamily:"monospace",padding:"2px 6px",borderRadius:3,flexShrink:0,
|
<span style={{fontSize:"0.55rem",fontFamily:"monospace",padding:"2px 6px",borderRadius:3,flexShrink:0,
|
||||||
background: check.actionability==="no_corregible"?C.redMuted:check.actionability==="wallet"?C.purpleMuted:C.amberMuted,
|
background: check.actionability==="no_corregible"?C.redMuted:check.actionability==="wallet"?C.purpleMuted:C.amberMuted,
|
||||||
color: check.actionability==="no_corregible"?C.red:check.actionability==="wallet"?C.purple:C.amber,
|
color: check.actionability==="no_corregible"?C.red:check.actionability==="wallet"?C.purple:C.amber,
|
||||||
|
|||||||
Reference in New Issue
Block a user