Contratos 0-conf habilitados para Bitcoin Cash en LocalCryptos

Tú lo pediste, y nosotros cumplimos. Desde hoy,los usuarios podrán completar sus operaciones en Bitcoin Cash a una velocidad vertiginosa con las transacciones 0-conf.

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.

0-conf: Velocidad vs Inmutabilidad

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.

Doble gasto: la amenaza fantasma

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:

  • Un ataque de 51% - en el que un hacker tendría que controlar más de la mitad del poder de cómputo (hashrate) de una criptomoneda para, posiblemente, poder alterar su blockchain y ejecutar los ataques de doble gasto.
  • Ataques Finney - los cuales requieren que un minero mine previamente una transacción en un bloque, envíe una segunda transacción desde la misma cartera de la primera y luego, retransmita su bloque pre-minado. Si resulta exitoso, la segunda transacción — que estaría destinada al comerciante o víctima que la aceptó 0-conf — sería invalidada.

No hay riesgo 0, pero se acerca bastante

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…

Implicaciones para un comerciante de LocalCryptos

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:

  1. La persona en riesgo de un ataque de doble gasto es el comprador, ya que será éste quien reciba las criptos al final de la operación.
  2. Durante un intercambio 0-conf, el botón “marcar como pagado” estará disponible tan pronto como el depósito caiga en el contrato de garantía sin custodia, y antes de la primera confirmación de un bloque.
  3. Si el comprador prefiere ir por lo seguro, puede esperar a que la transacción reciba una confirmación antes de hacer el pago.
  4. las transacciones 0-conf están habilitadas únicamente para montos bajos, debido a lo costoso que sería atacar un intercambio con una operación tan baja, lo que lo volvería muy improbable de suceder.

Por qué lo desactivamos, y por qué lo estamos reactivando

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.