leonett commited on
Commit
6b55438
·
verified ·
1 Parent(s): adb8f1d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -11
app.py CHANGED
@@ -186,8 +186,8 @@ def analizar_transaccion(tx_id):
186
  if es_mixer:
187
  mensaje_mixer = (
188
  "<p style='color: #FF5252;'><strong>Alerta de Mixer / CoinJoin:</strong> "
189
- "La transacción presenta patrones compatibles con un servicio de mezcla (CoinJoin) "
190
- "múltiples entradas/salidas y salidas con valores casi homogéneos. Se recomienda un análisis forense adicional.</p>"
191
  )
192
  else:
193
  mensaje_mixer = (
@@ -226,29 +226,59 @@ def analizar_transaccion(tx_id):
226
  except Exception as e:
227
  return f"⚠️ Error durante el análisis: {str(e)}", None
228
 
 
229
  with gr.Blocks(theme=gr.themes.Soft(), title="🔍 Detector de Mixers / CoinJoin en Transacciones Bitcoin") as demo:
230
  gr.Markdown("# 🔍 Detector de Mixers / CoinJoin en Transacciones Bitcoin")
231
  gr.Markdown("Desarrollado por José R. Leonett para la comunidad de Peritos Forenses Digitales de Guatemala [www.forensedigital.gt](http://www.forensedigital.gt)")
232
- gr.Markdown("**Nota:** Este analizador funciona únicamente con transacciones de Bitcoin. "
233
- "No se pueden analizar transacciones de Ethereum u otro tipo de criptomoneda.")
234
 
235
  with gr.Row():
 
236
  with gr.Column(scale=1):
237
- tx_input = gr.Textbox(label="TXID de la Transacción",
238
- placeholder="Ej: 9dd51e2d45f4f7bddcc3f0f7a05c3fd60543a11cfc9fbd0e1ca4434668cfa3e1")
 
 
 
 
 
239
  btn = gr.Button("Analizar Transacción")
240
  gr.Markdown("### Ejemplos de TXIDs válidos:")
241
  gr.Examples(
242
  examples=[
243
- ["0042c32659ef432276a0feb59e0418dee97e80ecd0ffa8a3f6228744388e65ac"],
244
- ["cdacd625a332f46913209aa3480002fc5beb67d031e5b99a0bfe3fddbaef402b"]
245
  ],
246
  inputs=tx_input
247
  )
248
- with gr.Column(scale=2):
 
 
249
  reporte_html = gr.HTML()
250
- plot_output = gr.Plot()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
 
 
252
  btn.click(fn=analizar_transaccion, inputs=tx_input, outputs=[reporte_html, plot_output])
253
-
254
  demo.launch()
 
186
  if es_mixer:
187
  mensaje_mixer = (
188
  "<p style='color: #FF5252;'><strong>Alerta de Mixer / CoinJoin:</strong> "
189
+ "La transacción presenta patrones compatibles con un servicio de mezcla (CoinJoin) "
190
+ "múltiples entradas/salidas y salidas con valores casi homogéneos. Se recomienda un análisis forense adicional.</p>"
191
  )
192
  else:
193
  mensaje_mixer = (
 
226
  except Exception as e:
227
  return f"⚠️ Error durante el análisis: {str(e)}", None
228
 
229
+ # INTERFAZ GRÁFICA CON GRADIO
230
  with gr.Blocks(theme=gr.themes.Soft(), title="🔍 Detector de Mixers / CoinJoin en Transacciones Bitcoin") as demo:
231
  gr.Markdown("# 🔍 Detector de Mixers / CoinJoin en Transacciones Bitcoin")
232
  gr.Markdown("Desarrollado por José R. Leonett para la comunidad de Peritos Forenses Digitales de Guatemala [www.forensedigital.gt](http://www.forensedigital.gt)")
233
+ gr.Markdown("**Nota:** Este analizador funciona únicamente con transacciones de Bitcoin. No se pueden analizar transacciones de Ethereum.")
 
234
 
235
  with gr.Row():
236
+ # Columna Izquierda: Grafo y controles de entrada
237
  with gr.Column(scale=1):
238
+ # Espacio para el grafo
239
+ plot_output = gr.Plot()
240
+ # Controles de entrada debajo del grafo
241
+ tx_input = gr.Textbox(
242
+ label="TXID de la Transacción",
243
+ placeholder="Ej: 9dd51e2d45f4f7bddcc3f0f7a05c3fd60543a11cfc9fbd0e1ca4434668cfa3e1"
244
+ )
245
  btn = gr.Button("Analizar Transacción")
246
  gr.Markdown("### Ejemplos de TXIDs válidos:")
247
  gr.Examples(
248
  examples=[
249
+ ["a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d"],
250
+ ["a83926f2fba1e446c0d5731a6866e78730fc3e21e31207fc0a3ee56e752843e9"]
251
  ],
252
  inputs=tx_input
253
  )
254
+
255
+ # Columna Derecha: Resultados y explicación
256
+ with gr.Column(scale=1):
257
  reporte_html = gr.HTML()
258
+ explanation_text = """
259
+ <div style="overflow-y: scroll; height: 200px; border: 1px solid #cccccc; padding: 10px;">
260
+ <h4>Explicación de los campos:</h4>
261
+ <ul>
262
+ <li><strong>TXID:</strong> Identificador único de la transacción.</li>
263
+ <li><strong>Fecha y Hora:</strong> Fecha y hora de la confirmación de la transacción.</li>
264
+ <li><strong>Versión:</strong> Versión del protocolo de la transacción.</li>
265
+ <li><strong>Tamaño:</strong> Tamaño en bytes de la transacción.</li>
266
+ <li><strong>Peso:</strong> Peso de la transacción en unidades de peso.</li>
267
+ <li><strong>Fee rate:</strong> Tarifa pagada por byte (sat/byte).</li>
268
+ <li><strong>Inputs:</strong> Número de entradas utilizadas en la transacción.</li>
269
+ <li><strong>Outputs:</strong> Número de salidas generadas.</li>
270
+ <li><strong>Montos únicos en outputs:</strong> Cantidad de valores únicos en las salidas (esto ayuda a detectar patrones de mezcla).</li>
271
+ <li><strong>Total Entradas:</strong> Suma total de los valores de entrada (en BTC y su equivalente en USD).</li>
272
+ <li><strong>Total Salidas:</strong> Suma total de los valores de salida (en BTC y su equivalente en USD).</li>
273
+ <li><strong>Fee:</strong> Diferencia entre entradas y salidas, representa la tarifa de la transacción (en BTC y USD).</li>
274
+ <li><strong>Estado de Confirmación:</strong> Indica si la transacción está confirmada o no.</li>
275
+ <li><strong>Alerta de Mixer / CoinJoin:</strong> Indica si se detectaron patrones compatibles con un servicio de mezcla.</li>
276
+ </ul>
277
+ </div>
278
+ """
279
+ explanation_box = gr.HTML(value=explanation_text)
280
 
281
+ # Configuración de la acción del botón
282
  btn.click(fn=analizar_transaccion, inputs=tx_input, outputs=[reporte_html, plot_output])
283
+
284
  demo.launch()