Creación de grafos de transacciones · Lección 2 de 6
Rastreo de fondos hacia adelante y hacia atrás
9 min de lectura
El rastreo es la habilidad fundamental de un analista de blockchain: seguir el valor desde un punto conocido hasta donde fue, o hacia atrás hasta su origen. Lo difícil no es seguir las conexiones, algo que puede hacer cualquier explorador, sino decidir qué parte del valor de cada conexión es «los fondos que te interesan» una vez que se mezclan con otro dinero. Distintas reglas de asignación dan respuestas muy diferentes a partir de los mismos datos, así que debes conocerlas, elegir una deliberadamente e indicar cuál usaste.
Rastreo hacia adelante y hacia atrás
El rastreo hacia adelante comienza en un origen conocido, como una dirección asociada a un robo, un pago de rescate o una billetera sancionada, y sigue las conexiones salientes para averiguar adónde fueron los fondos: qué servicios los recibieron, qué direcciones todavía los conservan y si alguno llegó a un punto en el que pueda congelarse o explicarse.
El rastreo hacia atrás comienza en un destino, normalmente un depósito entrante en un exchange, y sigue las conexiones entrantes para responder «¿de dónde vino este dinero?». Los equipos de riesgo de los exchanges lo hacen para las verificaciones del origen de los fondos: un depósito que llega a un salto de un mercado de la darknet tiene un riesgo distinto de uno que llega a diez saltos, pasando por un exchange grande.
Ambas direcciones miden la distancia en saltos, es decir, el número de transferencias entre dos puntos. La exposición directa significa que la contraparte está a un salto; la exposición indirecta significa que el vínculo pasa por direcciones intermedias. Los recuentos de saltos solo tienen sentido en un grafo que hayas definido cuidadosamente (consulta la lección Grafos de transacciones: nodos, conexiones y dirección): un salto en un grafo de entidades puede equivaler a diez en un grafo de direcciones.
Contaminación y reglas de detención
La contaminación es la proporción de un saldo o una transferencia que el analista atribuye al origen de interés. La contaminación no es una propiedad de las monedas: es el resultado de una regla que aplicas. Todo rastreo también necesita reglas de detención, decididas de antemano:
- Servicio alcanzado: los fondos entran en un exchange, un procesador de pagos u otro servicio de custodia, donde termina el rastreo en cadena (consulta la lección Seguimiento del valor a través de exchanges y servicios).
- Umbral de dilución: la proporción contaminada cae por debajo de un nivel establecido, por ejemplo, el 1 %.
- Límite de saltos: una distancia máxima, por ejemplo, de 3 a 6 saltos, más allá de la cual los vínculos son demasiado débiles para informar sobre ellos.
- Umbral de valor: montos demasiado pequeños para ser relevantes, como polvo por debajo de una fracción fija de la suma original.
- Ventana temporal: las transferencias que ocurrieron antes de que llegaran los fondos no pueden transportarlos.
La última regla es fácil de olvidar en SQL. Una dirección que recibió fondos robados el 10 de marzo y pagó a alguien el 2 de marzo no le pagó con fondos robados.
Cuatro métodos de asignación
Cuando el valor contaminado y el limpio coinciden en una dirección o una transacción, una regla determina qué valor saliente lleva la contaminación.
| Método | Regla | Supuesto | Efecto |
|---|---|---|---|
| FIFO (primero en entrar, primero en salir) | Las salidas se toman primero de las entradas más antiguas | Los fondos se comportan como una cola | La contaminación permanece concentrada en salidas específicas |
| LIFO (último en entrar, primero en salir) | Las salidas se toman primero de las entradas más recientes | Los fondos se comportan como una pila | La contaminación se transfiere rápidamente si se gasta poco después de llegar |
| Haircut (prorrata) | Cada salida lleva la proporción contaminada del saldo en ese momento | Los fondos se mezclan perfectamente | La contaminación se distribuye de forma tenue entre todas las salidas posteriores |
| Poison (contaminación total) | Cualquier salida de un saldo que tenga contaminación queda totalmente contaminada | Cualquier contacto contamina | La contaminación crece hasta abarcar mucho más que el monto original |
Poison y haircut recibieron sus nombres en un estudio académico temprano sobre puntuación de riesgo para Bitcoin (Möser, Böhme y Breuker, «Towards Risk Scoring of Bitcoin Transactions», 2014). FIFO toma prestada una convención contable de larga data para cuentas bancarias con fondos mezclados; Anderson, Shumailov, Ahmed y Rietmann, de Cambridge, sostuvieron en «Bitcoin Redux» (2018) que es adecuada para Bitcoin porque es determinista y no diluye los fondos: aplicada dentro de una transacción, ordena el valor por posición de entrada y de salida, de modo que la contaminación recae en satoshis específicos de salidas específicas. LIFO es el orden inverso y algunas herramientas de rastreo lo ofrecen como alternativa. Ninguno de los cuatro es «correcto»; cada uno es un modelo.
Un ejemplo resuelto
Una dirección A recibe y gasta fondos en este orden. S son 2 BTC de un robo; C1 y C2 son fondos limpios, no relacionados.
| Paso | Evento | Saldo después |
|---|---|---|
| 1 | +4 BTC de C1 (limpios) | 4 |
| 2 | +2 BTC del robo S | 6 |
| 3 | −3 BTC a X | 3 |
| 4 | +4 BTC de C2 (limpios) | 7 |
| 5 | −5 BTC a Y | 2 |
| 6 | −2 BTC a Z | 0 |
FIFO. Después del paso 2, la cola es [4 limpios, 2 robados]. X toma 3 de la partida más antigua: 3 limpios. La cola ahora es [1 limpio, 2 robados]; luego C2 añade [4 limpios]. Y toma 1 limpio, 2 robados y 2 limpios. Z toma los últimos 2 limpios. Resultado: X, 0; Y, 2; Z, 0 BTC contaminados.
LIFO. Después del paso 2, la pila es [4 limpios, 2 robados], con la partida robada arriba. X toma los 2 robados más 1 limpio. Luego C2 añade 4 limpios arriba. Y toma esos 4 más 1 limpio adicional; Z toma los últimos 2 limpios. Resultado: X, 2; Y, 0; Z, 0.
Haircut. Después del paso 2, el saldo es de 6 BTC, de los cuales 2 están contaminados (33,33 %). X recibe 3 × 2/6 = 1,000 contaminados. Los 3 BTC restantes contienen 1 contaminado; después de C2, el saldo es de 7, con 1 contaminado (14,29 %). Y recibe 5 × 1/7 = 0,714 contaminados, y quedan 2 BTC con 0,286 contaminados, que pasan íntegramente a Z. Resultado: X, 1,000; Y, 0,714; Z, 0,286.
Poison. Todas las salidas después del paso 2 provienen de un saldo que tiene contaminación. Resultado: X, 3; Y, 5; Z, 2; por lo tanto, se etiquetan 10 BTC como contaminados, aunque solo se robaron 2 BTC.
| Destinatario | FIFO | LIFO | Haircut | Poison |
|---|---|---|---|---|
| X (3 BTC) | 0 | 2 | 1,000 | 3 |
| Y (5 BTC) | 2 | 0 | 0,714 | 5 |
| Z (2 BTC) | 0 | 0 | 0,286 | 2 |
| Total contaminado | 2 | 2 | 2,000 | 10 |
FIFO, LIFO y haircut conservan el valor: el monto total contaminado se mantiene en 2 BTC. Poison no lo hace. Los métodos también discrepan sobre quién recibió los fondos robados: FIFO dice que Y, LIFO dice que X y haircut dice que todos recibieron un poco. Si X es un exchange donde se podrían congelar los fondos e Y es una billetera privada, la elección cambia el resultado del caso.
Qué hacen los métodos a gran escala
Si se aplica haircut repetidamente a lo largo de muchos saltos, la contaminación se distribuye de forma cada vez más tenue y amplia con cada mezcla. En el mismo estudio, «Bitcoin Redux», Anderson y sus colegas rastrearon los 46.653 BTC robados en el robo de Linode de 2012: haircut contaminó alrededor del 93 % de las direcciones de su conjunto de datos, mientras que FIFO contaminó cerca del 1,3 %. Poison se propaga aún más rápido, lo que lo hace útil solo para preguntas concretas, como «¿esta dirección tuvo algún contacto con un mezclador?», y engañoso como medida de cantidad.
Orientación práctica:
- Usa haircut para puntuaciones de riesgo y porcentajes de exposición, cuando una respuesta proporcional sea la más honesta.
- Usa FIFO (o LIFO) cuando debas identificar las salidas específicas que llevan los fondos, por ejemplo, para solicitar una congelación, e indica que la atribución sigue la regla, no las monedas.
- Usa poison para indicadores binarios de contacto, nunca para cantidades.
- Ejecuta el rastreo con dos métodos cuando el resultado sea importante. Si ambos señalan el mismo servicio, aumenta la confianza; si divergen, informa el rango.
Ampliar los saltos en SQL
Un rastreo acotado hacia adelante puede comenzar como una consulta recursiva sobre la lista de conexiones creada en la lección anterior. La mayoría de los motores admiten CTE recursivas, pero no todos; en algunos almacenes de datos, en cambio, se itera salto por salto desde un cuaderno.
WITH RECURSIVE hops AS (
SELECT dst AS address, 1 AS hop, block_number
FROM edges
WHERE src = '0xA1b2…9F' -- semilla: la dirección del robo
UNION ALL
SELECT e.dst, h.hop + 1, e.block_number
FROM hops h
JOIN edges e ON e.src = h.address
AND e.block_number >= h.block_number -- el tiempo avanza
WHERE h.hop < 4 -- límite de saltos
AND h.address NOT IN (SELECT address FROM service_labels) -- detenerse en los servicios
)
SELECT address, MIN(hop) AS first_hop, COUNT(*) AS paths
FROM hops
GROUP BY address;
La fila semilla toma cada destinatario de la dirección del robo. La parte recursiva sigue las conexiones salientes de cada dirección alcanzada, solo a través de transferencias en el bloque en que llegaron los fondos o después; se detiene en cuatro saltos y no se expande a través de servicios etiquetados. Esta consulta encuentra direcciones alcanzables; no asigna montos. La asignación de contaminación requiere las entradas y salidas ordenadas de cada dirección, algo más fácil de hacer en un cuaderno o una herramienta de grafos. Es de esperar que los recuentos de rutas se disparen alrededor de direcciones con mucha actividad, otra razón para detenerse en los servicios.
Enfoque del examen: diferencias entre el rastreo hacia adelante y hacia atrás y sus usos habituales; los saltos y la exposición directa frente a la indirecta; reglas de detención, incluida la regla de que las salidas anteriores a una entrada no pueden llevar sus fondos; definiciones y supuestos de FIFO, LIFO, haircut y poison, y cálculo de cada método con un ejemplo pequeño; que FIFO, LIFO y haircut conservan el valor, mientras que poison lo infla; cómo haircut diluye la contaminación entre muchas direcciones a gran escala; qué método es adecuado para puntuaciones de riesgo, solicitudes de congelación e indicadores de contacto; informar el método y ejecutar un segundo como verificación.