feat: rastro de procedencia recursivo + arreglo falso positivo CoinJoin
This commit is contained in:
+18
-8
@@ -16,14 +16,24 @@ y el versionado sigue [Versionado Semántico](https://semver.org/lang/es/):
|
||||
|
||||
### Añadido
|
||||
|
||||
- Rastro de procedencia (primera versión). En la pestaña Auditoría, debajo
|
||||
del informe de privacidad, cada input de la transacción tiene un botón
|
||||
"seguir rastro" que trae la transacción de origen de ese input y muestra un
|
||||
eslabón con: el txid de origen (enlace a tu propio Mempool), cuánto fluyó,
|
||||
la fecha y la banda de privacidad de esa transacción. Funciona bajo demanda
|
||||
—cada consulta la pide el usuario, para no sobrecargar el nodo— y cachea en
|
||||
memoria las transacciones ya consultadas para no repetirlas. Incluye botón
|
||||
para limpiar el rastro y la caché de la sesión.
|
||||
- Rastro de procedencia. En la pestaña Auditoría, debajo del informe de
|
||||
privacidad, cada input de la transacción tiene un botón "seguir rastro" que
|
||||
trae su transacción de origen y muestra un eslabón con: el txid de origen
|
||||
(enlace a tu propio Mempool), cuánto fluyó, la fecha, la banda de privacidad
|
||||
de esa transacción y marcas relevantes (CoinJoin, OFAC, minería, coinbase).
|
||||
- El rastro es recursivo: desde cada eslabón se puede seguir bajando por sus
|
||||
propios inputs, encadenando saltos hacia atrás nivel a nivel. Funciona bajo
|
||||
demanda —cada consulta la pide el usuario, para no sobrecargar el nodo— y
|
||||
comparte una caché en memoria para no repetir transacciones ya consultadas.
|
||||
Incluye un límite de profundidad y un botón para limpiar el rastro.
|
||||
|
||||
### Corregido
|
||||
|
||||
- Detección de CoinJoin en el rastro: antes marcaba como CoinJoin cualquier
|
||||
transacción cuyo análisis mencionara la palabra (lo que ocurría siempre,
|
||||
porque existe un indicador con ese nombre aunque dé negativo), produciendo
|
||||
falsos positivos. Ahora la marca solo aparece cuando el indicador de CoinJoin
|
||||
da positivo de verdad (estructura de varios inputs y salidas de igual valor).
|
||||
|
||||
---
|
||||
|
||||
|
||||
+5
-1
@@ -2401,7 +2401,11 @@
|
||||
if(hit?.cat==="mining") mining=true;
|
||||
}
|
||||
const esCoinbase=(txData.vin||[]).some(v=>v.is_coinbase||v.coinbase)||(txData.vin||[]).length===0;
|
||||
if(ana?.band==="ALTA"&&/coinjoin|whirlpool|mezcla/i.test(JSON.stringify(ana.checks||[]))) marcas.push({txt:"🔀 CoinJoin",color:C.blue});
|
||||
// CoinJoin real: el check con id "coinjoin" dio pass:true (5+ in, 5+ out
|
||||
// con valores iguales). NO buscar la palabra en el texto: el check existe
|
||||
// siempre, incluso cuando dice que NO es CoinJoin -> daría falso positivo.
|
||||
const esCoinJoin = (ana?.checks||[]).find(c=>c.id==="coinjoin")?.pass === true;
|
||||
if(esCoinJoin) marcas.push({txt:"🔀 CoinJoin",color:C.blue});
|
||||
if(ofac) marcas.push({txt:"⚠️ OFAC",color:C.red});
|
||||
if(mining) marcas.push({txt:"⛏️ minería",color:C.green});
|
||||
if(esCoinbase) marcas.push({txt:"⛏️ coinbase (origen)",color:C.green});
|
||||
|
||||
Reference in New Issue
Block a user