Uno de los elementos claves que hacían de Local.Bitcoin.com tan popular y querida por sus usuarios era la capacidad de poder completar intercambios de Bitcoin Cash en menos de 2 minutos. Esto se debe, en parte, a la posibilidad de depositar el BCH en garantía y avanzar a la siguiente fase del intercambio sin tener que esperar por una confirmación en la blockchain (lo cual suele tardar ~10 minutos).
A este tipo de transacciones se les conocen como “transacciones 0-conf” (o transacciones sin confirmación), y aunque fueron deshabilitadas luego de la migración a LocalCryptos, muchos de ustedes nos han pedido reactivarlas de nuevo.
Pero ¿qué significa que una transacción sea 0-conf, y cuáles son las implicaciones para el comerciante en general? y sobretodo, ¿por qué LocalCryptos las deshabilitó en primer lugar luego de lanzarse el mercado P2P de Bitcoin Cash en la plataforma, y por qué tomamos la decisión de habilitarlas de nuevo pero solo para transacciones pequeñas? En este artículo vamos a aclarar todas estas dudas.
Ten en cuenta que en este artículo se hablará sobre lo que implican las transacciones 0-conf únicamente para Bitcoin Cash, dado que esta función está siendo habilitada solo para dicha moneda. Otras criptos podrían ser susceptibles a los mismos riesgos en mayor o menor medida, pero las transacciones 0-conf para éstas no están disponibles o están deshabilitadas en LocalCryptos, por lo que no tienes que preocuparte por ello.
Primero, vamos a ahondar un poquito más en detalles respecto al concepto de una transacción 0-conf. 0-conf significa que la transacción todavía no ha recibido una confirmación en la blockchain, es decir, que aún sigue en una especie de sala de espera — conocida como la ‘mempool’ — a la espera de recibir una ‘confirmación’. Luego, a medida que más bloques son minados y añadidos a la blockchain, la transacción recibirá más y más confirmaciones, reforzando aún más su inmutabilidad — en otras palabras, no podrá ser revertida (salvo un improbable caso de ataque de 51%).
En Bitcoin Cash, el tiempo promedio que tarda un bloque en ser minado y anexado a la blockchain (para que tu transacción reciba una confirmación) es de 10 minutos — un lapso de tiempo un tanto largo para, digamos, alguien que quiere comprarse un cafecito en su panadería más cercana. Y dado que el objetivo subyacente de BCH es el de servir como dinero electrónico, el hecho de que un cliente tenga que esperar esta cantidad de tiempo para recibir lo que compró lo convierte en una opción no muy viable de pago, al menos para las compras del día a día.
Ahora bien, un comerciante que elija aceptar transacciones 0-conf solo necesitaría que tu transacción sea transmitida a la red y aparezca en la mempool, para considerarla válida y entregarte los productos que compraste. Por lo general, esto solo lleva de 2 a 5 segundos — muchísimo más rápido que los mencionados 10 minutos. El comprador se va satisfecho, y el comerciante puede atender a otro cliente. Después de todo, la transacción se confirmará en la blockchain eventualmente, ¿cierto?
Pero aquí surge una gran duda: si el hecho de que una transacción sea 0-conf significa que que aún sigue sin ser confirmada, ¿qué podría pasar durante el tiempo que se mantenga así hasta recibir una confirmación? ¿Habrá alguna forma de que quien la envía pueda “cancelarla” y quedarse tanto con las monedas como con los artículos comprados? Por desgracia, la respuesta es ‘sí’, y esa forma se conoce como ataque de doble gasto.
Un ataque de doble gasto significa que alguien ha gastado la misma moneda en dos transacciones diferentes. Imagínate que alguien te hubiera pagado con un billete de $10, y luego procede a pagarle a alguien más con ese mismo billete, o incluso quedarse con el mismo. Una locura, ¿verdad?
Es obvio que no puedes hacer esto con dinero físico — sencillamente, no puedes darle el mismo billete de $10 a dos personas. Pero con las criptomonedas, esto puede ser posible.
Hay varias formas en las que una persona pueda ejecutar un doble gasto. La más común sería un ataque de carrera (en inglés: race attack). En un ataque de carrera, el perpetrador envía dos transacciones con la misma moneda, al mismo tiempo, pero con comisiones de red distintas — la que está destinada al comerciante tendría la comisión más baja, mientras que la otra (muy probablemente dirigida a una dirección de su propiedad) tendría la comisión más alta, en aras de que los mineros confirmen ésta última por sobre la primera. Y dado que las reglas del blockchain establecen que no puedes gastar la misma moneda dos veces, la transacción que no fue confirmada se considera inválida, y es descartada.
El resultado: el comerciante se queda sin su pago y sin sus productos.
Otras formas de doble gasto podrían involucrar:
Por fortuna, las posiblidades de que sufras alguno de estos ataques son muy, pero muy baja. Un ataque de 51% requiere tener más de la mitad de los mineros de tu lado, lo cual es extremadamente difícil de lograr en una red que tiene un hashrate tan alto y diversificado como Bitcoin Cash, y los costos de esta “operación” superarían los beneficios en casi todos los casos. De forma similar, un ataque Finney necesitaría que se dé una muy improbable secuencia de eventos para que fuese exitoso, lo que lo vuelve un método muy impráctico y muy costoso de ejecutar.
Esto nos dejaría con los ataques de carrera, los cuales no tienen ninguno de los requisitos ya mencionados, son mucho más económicos de realizar en comparación, y los beneficios podrían ser lo suficientemente atractivos como para intentarlo. Sin embargo, el mismo necesitaría que la segunda transacción sea vista por más nodos que la primera para poder tener una oportunidad de éxito, algo que también es extremadamente difícil de lograr puesto que la primera transacción podría tener una ventaja de al menos 1 o 2 segundos — suficiente como para divulgarse por toda la red más rápido y así ser visto por la mayoría de los nodos, reduciendo exponencialmente las oportunidades de ganar esta carrera.
Adicionalmente, tan pronto como los nodos de Bitcoin Cash detecten dos transacciones gastando la misma moneda, se apurarán a alertarse entre sí mediante el protocolo DSproof
. Esta alerta, en cambio, se le hará llegar al comerciante casi de manera instantánea, de modo que pueda decidir sobre si continuar con la operación o abortarla.
Más aún, la capacidad mayor de los bloques de Bitcoin Cash, y la falta de un mercado de comisiones intenso garantiza que las transacciones no se quedarán mucho tiempo en la mempool, con la mayoría de los bloques limpiando la misma de transacciones pendientes por completo, reduciendo así la ventana de tiempo que un ataque de carrera exitoso podría tener.
Y, aunque es cierto que las posibilidades de que sufras alguno de estos ataques es muy, muy baja, en LocalCryptos creemos que es muy necesario que sepas con lo que te estás metiendo, lo que nos lleva a…
Ahora que ya sabes de qué se trata una transacción 0-conf y los riesgos inherentes a su aceptación, existen algunas implicaciones que vas a tener que tomar en cuenta como comerciante de LocalCryptos al operar con Bitcoin Cash:
El motivo por el que LocalCryptos decidió deshabilitar esta opción cuando se migró el mercado de Local.Bitcoin.com a LocalCryptos fue nuestra preocupación por la seguridad de nuestros usuarios. Incluso si los riesgos eran más bajos que los de las tarjetas de crédito, sentíamos que era suficiente como para descartarlo de nuestra fórmula.
Sin embargo, muchos usuarios de esta antigua plataforma han estado trabajando con transacciones 0-conf desde el primer momento en que estuvo disponible, y jamás se vieron envueltos en un escenario como los descritos arriba. Ya estaban acostumbrados a una experiencia de usuario veloz que se vio reducida cuando ocurrió la migración. Hemos oído sus quejas y, luego de revisar nuestra decisión (y tomando algunas medidas extras de seguridad), decidimos que la opción podía volver a ser activada.
Y ahí lo tienen — las operaciones 0-conf están de regreso para los comerciantes de Bitcoin Cash, aunque solo para intercambios de menos de ~US$200. Cualquier operación por encima de este valor tendrá que esperar al menos 1 confirmación en la blockchain, dependiendo del monto del intercambio.
También, cuando un intercambio sea 0-conf, se notificarán a las partes antes de iniciar el mismo, y se agregará un recordatorio luego de que el vendedor haya depositado los BCH en garantía.