Este hilo intenta explicar la red Lightning Network usando pocas palabras técnicas, simplificando un poco pero no demasiado. En este post inicial exploraremos el funcionamiento general, el concepto de seguridad del sistema y las ventajas y desventajas.
¿Qué es Lightning?En una sola frase: Lightning Network (LN) es una
red de pagos instantáneos, que usa la tecnología de Bitcoin para garantizar la seguridad, pero no requiere que todas las transacciones sean almacenadas por todos los participantes de la red.
¿Qué problema resuelve?Transacciones a través de Lightning son más económicas y más rápidas que a través del mecanismo "tradicional" de Bitcoin. La capacidad de la red Bitcoin es limitada. Lightning aumenta esta capacidad por varios órdenes de magnitud. Mientras que Bitcoin soporta hasta 7-8 transacciones tradicionales por segundo, Lightning no tiene un límite duro una vez que los participantes estén conectados entre si.
De esta manera, Lightning
mejora la escalabilidad de Bitcoin, uno de los mayores desfíos de esta criptomoneda.
Expicación en pocas frases:Bitcoin requiere normalmente que todas las transacciones entre los participantes de la red sean almacenadas en una base de datos. Esta base de datos es llamada ''cadena de bloques'' o ''blockchain'' (del inglés), porque aproximadamente cada 10 minutos se agrega un conjunto de (generalmente entre 500 y 3000) transacciones procesadas y publicadas llamado "bloque", formándose así una cadena.
Todos los participantes plenos de la red Bitcoin deben procesar y almacenar todos los bloques.[1] Debido a que esto requiere volumen de datos para la conexión de Internet, además de capacidad de procesamiento y de almacenamiento en disco, se limitan las transacciones que pueden ser almacenadas en un bloque. Si este límite [2] es superado, una transacción debe esperar al próximo bloque para ser integrada a la base de datos. Cuanto más alta sea la comisión que pagues, más chances tiene la transacción de entrar en un bloque.
Lightning Network (LN) se puede describir como una segunda capa (second layer, en inglés) para Bitcoin. Es un protocolo (un conjunto de reglas estandarizadas) para una red. Las transacciones enviadas por Lightning no son almacenadas por todos los nodos de la red, sino solamente por los que participan en la transacción (que son, generalmente, menos de diez personas o nodos). Esto hace que todo el proceso sea más rápido y que se necesite mucho menos espacio de almacenamiento.
Para decirlo de manera corta: Con el sistema tradicional de Bitcoin, debo procesar y almacenar todas las transacciones entre todas las personas del mundo. En cambio, con Lightning, solo tengo que procesar las transacciones de mis amigos, y de amigos de amigos, quizá de algunos amigos de amigos de amigos (de los cuales algunos se pueden encontrar en otros continentes del mundo).
La estructura de Lightning: una red social de pagosLightning se puede describir como una red social: Cada participante tiene un conjunto de pares (como los "amigos" de Facebook) con los que está conectado directamente. Si yo quiero realizar un pago a uno de mis "amigos", en Lightning lo puedo hacer directamente, siempre cuando ambos estemos conectados a la red.
Pero Lightning es todavía más potente. Puedo pagar también a todos los amigos de mis amigos. Y a amigos de amigos de amigos. Y así sucesivamente - de hecho, un participante de Lightning puede pagar a gran parte de los otros participantes de la red de LN.[3] El único requisito: que estén ambos conectados a Internet en este momento. También mis amigos pueden realizar pagos entre ellos a través de mi propio nodo, si no están conectados directamente entre ellos.
Un ejemplo: Quizá un amigo de un amigo de otro amigo es el dueño de un supermercado en el que quiero hace una compra. Si todos estamos conectados a través de LN, puedo hacer la compra con Lightning.
La conexión que tengo con un par (o "amigo") en Lightning se denomina "
canal de pago". Cuando se realiza un pago a través de Lightning, lo que hacemos es que formamos una
cadena entre varios canales de pagos. A través de esta cadena, intercambiamos transacciones de Bitcoin, pero no las mandamos a los mineros para que las guarden en la cadena de bloques. En cambio, a cada transacción solo la guardamos los que participamos en ella. Es importante guardar al menos las últimas transacciones, porque sirven para recuperar dinero cuando algo sale mal (esto lo veremos en
Por qué Lightning es seguro).
¿Como se crean estas "cadenas de pagos"? Consideremos que quiero pagarle a Carlos, el dueño del supermercado, que no está conectado conmigo directamente. Pero otra participante de LN, Beatriz, tiene canales hacia Carlos y hacia mí. Entonces primero mando un pago a Beatriz, y ella manda el pago a Carlos. Un contrato inteligente (el llamado "
HTLC" [4]) en cada paso posibilita que el pago nunca se puede quedar trabado: el pago solo se realiza si toda la cadena está conectada y coopera. Si algo sale mal, por ejemplo si Beatriz se desconecta en el proceso, se prueba otro "camino", es decir, el software intentará de conectarme con Carlos a través de otros amigos.
Obviamente, en Lightning, conviene conectarse con alguien que tenga otros contactos "útiles" para nosotros, no a un nodo que no tiene ninguna otra conexión.
Para
abrir un canal de pago, tenemos que hacer una transacción tradicional de Bitcoin, en común acuerdo con el par de nuestro canal. Esta transacción determina el
saldo inicial de cada uno. Pero luego al canal lo podemos usar cuantas veces querramos. Cuando no lo necesitamos más, lo podemos cerrar con otra transacción tradicional. Para este cierre no necesitamos el consentimiento de nadie. Quedarán reflejados los últimos saldos.
Este es el
principio básico de Lightning: Coopero con mis pares de Lightning "fuera de la cadena" (off-chain), y si alguno deja de cooperar, publico transacciones en la red de Bitcoin para que los mineros los incluyan en la blockchain. Es decir, en cada momento puedo "saltar" a la red tradicional, y beneficiarme de su seguridad.
Hay que aclarar que usamos el término "amigo" en este texto solo por razones ilustrativas. Lo importante es que
podemos tratar a un "par" o "amigo" en Lightning, con el/la que compartimos un canal,
como si no le tuvieramos confianza. La seguridad de LN está diseñada de tal manera que la confianza entre pares no es requerida (trustless).
Por qué Lightning es seguroPara entender el concepto de seguridad de Lightning, primero tenemos que entender como funciona una
transacción de Bitcoin. Una transacción es una autorización para un pago a través de una
firma digital. A través de esta firma, la persona que realiza el pago da el consentimiento de que un cierto monto de Bitcoins de su propiedad puede ser utilizado por un destinatario, al cual identifica con una dirección de Bitcoin.
Cuando usamos Bitcoin de manera tradicional y enviamos un pago, esta autorización es enviada a todos los otros participantes de la red. Estos la procesan (por ejemplo, chequean que el dinero que envié realmente es mío) y si está todo en orden, un "minero" la incluye en un bloque, y el pago queda confirmado. (Explicar la minería excede el alcance de esta pequeña guía, por eso enlazo a
esta FAQ en bitcoin.org.)
Pero también podemos enviar una transacción por otros medios. Por ejemplo, en teoría puedo enviar una transacción por E-mail o WhatsApp a un amigo para que éste la mande a la red. Si esta transacción tiene como destinatario a este mismo amigo, puedo enviarle Bitcoins que este puede utilizar, sin necesitar conectarme yo mismo con la red.
Algo similar ocurre cuando hacemos pagos en Lightning. Si le hago un pago a través de un canal de pago, envío la transacción a mi par ("amigo"). Hay una pequeña diferencia: En Lightning, tanto el emisor como el destinatario del pago firman las transacciones. Podemos decir que, cuando realizo un pago a mi par, en común acuerdo le transfiero "saldo". Este saldo queda reflejado en el software de Lightning.
Firmar las transacciones de Lightning entre ambos participantes es importante, porque así en cualquier momento, cualquiera de las dos partes puede agregar pagos, puede cerrar el canal, y en el caso que uno de los dos haga trampa, castigarlo (ver más abajo).Lamentablemente hay un problema que hace que Lightning no sea tan simple, y que necesitemos
un paso más.
El problema es que despues de hacer un pago a mi amigo, hay una posibilidad de
hacer trampa. Es que
puedo usar el saldo anterior, antes de hacer el pago, para cerrar el canal. Entonces el último pago no queda reflejado en la transacción real. Mi amigo, entonces, perdería estos Bitcoins.
La manera exacta con la que resuelve Lightning este problema es bastante complicado. Pero lo importante es entender el concepto general. Este es:
No mando una sola transacción a mi amigo cuando realizo un pago, sino dos. En la transacción A actualizamos el saldo. En la transacción B lo autorizo a mi amigo que se lleve todo el resto de mi saldo si llego a cerrar el canal usando el saldo del pago inmediatamente anterior.Recién cuando mi amigo reciba ambas transacciones, el software de Lightning actualizará el saldo. Recién en este momento queda confirmado el pago. Si no acepto esta condición, no puedo hacer el pago, y por ende no hacer compras. Nadie me aceptará un pago sin esta "transacción de seguridad".
Es importante comprender que mi amigo no puede utilizar la transacción B para robarme saldo de otras transacciones.
Cada transacción especifica exactamente una transacción anterior de la cual saca los Bitcoins, que en este caso corresponde al pago inmediatamente anterior. Por eso, si no hago trampa, mi par no me puede robar los Bitcoins a través de este mecanismo.
Ahora bien, si mi amigo intenta hacer la misma trampo conmigo,
tengo que estar atento. Puedo "castigarlo" de esta manera solo durante un lapso de tiempo que se acuerda entre las partes (muy popular es una semana, en caso de conectarse poco es mejor dos). Lo bueno es que el software normalmente hará este trabajo para mí cuando detecta la trampa.
Por eso
no es aconsejable desconectarse demasiado tiempo de Lightning. En el caso que, por ejemplo, querramos irnos de vacaciones a un lugar remoto del Himalaya sin posibilidad de conectarnos, debemos asegurar que al menos alguna otra persona vigile nuestro canal. Para este propósito existen también servicios llamados
watchtowers ("torres de vigilancia"). Como última posibilidad nos queda cerrar el canal y abrirlo nuevamente cuando nos reconectamos de manera segura.
Ventajas de Lightning- Lightning es muy rápido, los pagos son casi instantáneos y aún así muy seguros.
- Las comisiones son muy bajas.
- Permite aumentar la capacidad de la red de Bitcoin sin almacenar las transacciones en todos los nodos de los participantes.
- Permite ganar dinero a los participantes que acepten que otras personas realicen pagos a través de su canal.
Desventajas de Lightning- En el momento del pago, deben estar conectados a Internet la persona que realiza el pago y el destinatario del mismo. No se puede mandar el pago mientras que el destinatario esté ausente, como sí se puede con el mecanismo de transacción "tradicional" de Bitcoin.
- Lightning pierde efectividad cuando los pagos involucran sumas grandes, ya que la capacidad de cada canal es limitada. Solo se puede enviar montos menores a los saldo de nuestros "amigos" con los que tenemos abiertos canales de pago.
- Si el dispositivo de un participante de Lightning es hackeado, y le roban las transacciones que tiene almacenado, existen algunos ataques que puede realizar la contraparte (para esto, obviamente, el hacker se debe comunicar con ésta).
Más información:Explicación de Lightning en Bit2Me (un poco más avanzada, no tanto para principiantes sino para los que ya entienden algo de los conceptos de Bitcoin)
Artículo en Wikipedia sobre Lightning NetworkServicios que aceptan Lightning Network, hilo en este foro.
Lo que sigueMás adelante, tengo planeado agregar posts para algunos temas más avanzados y sobre algunas aplicaciones existentes para usar Lightning. ¡Todos los comentarios son bienvenidos!
Notas al pie[1] No es siempre necesario almacenar todos los bloques. Por un lado existe el "pruning", con el que los usuarios de Bitcoin Core pueden borrar bloques antiguos. Por otro lado, existen aplicaciones llamadas "clientes SPV" como Electrum que consultan los datos a otros nodos y solo almacenan información básica.
[2] El límite desde la introducción de "Segwit" en 2017 es de aproximadamente 2 MB (no es siempre igual, ya que depende de las características de las transacciones).
[3] Parece increíble, pero en general se cree que en la vida real, entre cada persona del mundo y cada otra, en promedio hay solo seis "pasos" (ver la
Teoría de los seis grados de separación).
[4] HTLC es una abreviación de "Hashed Time-Lock Contract".
Explicación en CoinTelegraph