JoinMarket: coinjoin sin coordinador central
La arquitectura que lo hace resistente
La debilidad fundamental de los sistemas de CoinJoin con coordinador central —Wasabi, el coordinador de Samourai— es que ese coordinador es un punto de fallo único: puede ser presionado legalmente, bloqueado o comprometido. JoinMarket elimina esa superficie de ataque mediante un diseño radicalmente diferente. No existe ninguna entidad que coordine las rondas; en su lugar, opera un mercado de liquidez distribuido donde los participantes se encuentran a través de canales IRC anónimos sobre Tor.
Makers y takers: el modelo económico
JoinMarket divide a los participantes en dos roles con incentivos opuestos pero complementarios. Los makers (proveedores de liquidez) publican ofertas en el orderbook indicando qué UTXO están dispuestos a incluir en un CoinJoin, bajo qué condiciones de monto mínimo y máximo, y qué comisión cobran (típicamente entre 0,01 % y 0,1 % del monto mezclado, más una comisión base fija). Los makers mantienen sus UTXO disponibles pasivamente; pueden acumular pequeñas ganancias simplemente por participar en las mezclas de otros.
Los takers son quienes inician activamente una transacción de CoinJoin. Consultan el orderbook, seleccionan un número de makers suficiente (habitualmente 4–9), coordinan la transacción directamente con ellos mediante mensajes cifrados sobre IRC/Tor, y pagan las comisiones acordadas. El taker controla la estructura de la transacción resultante pero no puede vincular los inputs de los makers con sus outputs porque el intercambio de outputs usa firmas ciegas.
El orderbook y la infraestructura de comunicación
El orderbook de JoinMarket se replica en tiempo real entre todos los participantes conectados al canal IRC. No hay servidor central de orderbook; cualquiera que se conecte al canal recibe el estado actual de todas las ofertas activas. Los canales IRC usados son accesibles por Tor, lo que protege la IP de los participantes. La dependencia en IRC es una elección pragmática de robustez: IRC es simple, federado y extremadamente resiliente a censura. Existen propuestas para migrar a protocolos más modernos (nostr, por ejemplo), pero IRC sigue siendo el mecanismo principal.
YOLO joins vs. joins manuales
JoinMarket ofrece dos modos de operación para el taker. El modo manual permite especificar exactamente el monto, el número de makers y los parámetros de la transacción. El modo automatizado (tumbler.py o su equivalente en Jam) ejecuta una serie de joins encadenados automáticamente, dividiendo y mezclando los fondos en múltiples rondas con delays aleatorios, lo que aumenta el anonset a costa de tiempo y comisiones. Este proceso puede durar horas o días según la configuración, pero produce UTXO con anonsets muy superiores a una sola ronda.
Jam: la interfaz gráfica moderna
JoinMarket fue durante años una herramienta exclusivamente de línea de comandos, lo que limitó su adopción a usuarios técnicos. Jam es una interfaz web de código abierto que se ejecuta localmente junto a JoinMarket y proporciona una UI accesible para gestionar el orderbook, iniciar joins como taker, y operar como maker de forma pasiva. Jam está disponible como aplicación nativa en Umbrel, lo que simplifica significativamente la instalación para usuarios con nodo doméstico. Aun con Jam, JoinMarket requiere entender los conceptos básicos de makers/takers y gestionar manualmente la wallet interna.
Trade-offs respecto a Wasabi
La comparación honesta entre JoinMarket y Wasabi implica reconocer ventajas y costes reales en cada dirección. JoinMarket tiene mayor resistencia a la censura por ausencia de coordinador central, produce anonsets potencialmente más altos con el tumbler automatizado, y genera ingresos para los makers. Pero exige mayor conocimiento técnico, tiene liquidez más baja (especialmente para montos grandes), y los joins individuales pueden tardar más en encontrar makers disponibles. Wasabi (con coordinadores alternativos) es más rápido, más automatizado y más accesible para usuarios no técnicos, pero introduce dependencia en un coordinador que puede desaparecer o ser comprometido.
Consideraciones de implementación y seguridad
JoinMarket mantiene su propia wallet HD interna separada de otras billeteras. Los fondos deben transferirse explícitamente hacia y desde esta wallet. El software requiere un nodo de Bitcoin Core sincronizado. La conexión IRC debe configurarse para usar Tor; sin esta configuración, los participantes del orderbook pueden ver tu IP. Los makers corren el riesgo teórico de que un taker malicioso intente correlacionar sus UTXOs a través de múltiples joins donde el mismo maker aparece, aunque el protocolo incluye defensas contra los ataques de Sybil más obvios. El paper de Greg Maxwell sobre CoinJoin (2013) y el trabajo de Adam Gibson (waxwing) sobre JoinMarket documentan estos trade-offs en detalle.
Estado regulatorio y perspectiva
JoinMarket no tuvo coordinador central que arrestar en 2024. Mientras los desarrolladores de Samourai fueron detenidos y zkSNACKs cerró su coordinador, JoinMarket continuó operando sin interrupción. Esto valida el argumento de diseño original: la resistencia a la censura surge de la arquitectura, no de las promesas de los operadores. Para usuarios con modelo de amenaza que incluye presión estatal o regulatoria, JoinMarket representa la opción de CoinJoin más robusta disponible actualmente en producción.
Errores habituales
- Asumir que ser maker en JoinMarket es pasivo y sin riesgo: los UTXO del maker participan en transacciones CoinJoin que podrían ser analizadas; aunque el protocolo protege al maker, es importante entender qué fondos se exponen.
- Creer que JoinMarket no requiere nodo propio: necesita un nodo Bitcoin Core sincronizado y accesible, lo que es un prerrequisito técnico significativo.
- Pensar que un único join de JoinMarket produce privacidad equivalente al tumbler automatizado: una sola ronda mejora la privacidad pero el anonset real depende del número de makers participantes y de rondas encadenadas.
Conceptos relacionados
Fuentes primarias
- JoinMarket documentation: https://github.com/JoinMarket-Org/joinmarket-clientserver
- Jam (JoinMarket UI): https://jamapp.org
- Adam Gibson (waxwing): JoinMarket design papers
- Greg Maxwell: CoinJoin original proposal (BitcoinTalk, 2013)
- Chris Belcher: JoinMarket whitepaper