Los Payments Channels o Canales de Pagos, son una tecnología diseñada para permitir pagos instantáneos sin custodia entre dos o más personas que usan una criptomoneda. Esto con el fin de ofrecer una mejor experiencia de pago contando con una excelente seguridad y comisiones muy bajas.
Los canales de pagos o Payments Channels, son un medio diseñado para que los usuarios de criptomonedas puedan realizar transacciones instantáneas y de bajo coste sin que estas repercutan negativamente en la blockchain.
Esta necesidad viene motivada por las limitaciones que tienen criptomonedas como Bitcoin, y la mayoría de las criptomonedas del sistema, en cuanto en cuanto a su escalabilidad en transacciones por segundo y el espacio total de la blockchain. De esta forma, un canal de pagos permite que muchas personas puedan realizar gran cantidad de transacciones en segundo plano, pero en la blockchain principal solo se contabilizan dos transacciones.
Por supuesto, al abrir un canal de pago (o payment channel en inglés), los nodos deben bloquear las monedas de los usuarios para que estas no se puedan usar fuera del canal durante la vida útil del mismo. Esto tiene un enorme costo que hace poco atractivo mantener canales de pago abiertos. Pero por ello, los canales de pagos no dejan de ser una una forma muy efectiva de brindar una gran escalabilidad a las criptomonedas.
En este punto seguramente te preguntarás ¿Cómo funcionan? ¿Son seguros? ¿Qué sistemas existen en la actualidad? Todas estas preguntas las responderemos a continuación en este nuevo artículo de Bit2Me Academy.
Origen de los canales de pago en criptomonedas
La idea de los canales de pagos en criptomonedas no es nueva. Desde el inicio del desarrollo de la tecnología esta idea estuvo allí presente. Satoshi Nakamoto la presentó como una posibilidad tecnológica aplicable a Bitcoin. Esto apoyado sobre los OP_CODES de Bitcoin Script que servían para reemplazar transacciones y controlar su validación. Hablamos de los OP_CODES nSequence y nLockTime, que permitían a dos o más partes actualizar repetidamente el estado de una transacción no confirmada antes de que se confirme.
El rudimentario sistema de Nakamoto permitiría crear transacciones que podrían contener varias entradas. Cada una de estas entradas sería firmada y verificada por el usuario y tenedor de los fondos descrito en dicha entrada. Así con cada nueva firma, el valor de nSequence cambia a un valor más alto, hasta que la cadena de firmas termina con la confirmación de la transacción en un bloque. Y al mismo tiempo, la transacción contiene una contabilidad interna con la que los usuarios están de acuerdo.
De esa forma, una sola transacción puede significar varias transacciones distintas para distintos usuarios. El sistema también permite la habilidad de que, en caso de que no se esté de acuerdo con los resultados, el usuario en cuestión evite la firma y con ello salga del sistema. En ese caso, los fondos vuelven a estar bajo su control y puede continuar sin problemas.
Por otro lado, Nakamoto explicó que nLockTime puede ser usado en el comercio de alta frecuencia entre un conjunto de partes. Para lograr esto, nLockTime permitiría seguir actualizando una determinada transacción en mempool, si existe un acuerdo unánime entre las partes. De esa forma, la transacción se actualizaría cada vez que alguna de las partes quiera participar en la transacción (que actúa como canal de pago). Cuando las partes estén de acuerdo en cerrar el canal, las firmas de todos los participantes llegan y establecen el nLockTime final para la transacción, y esperan a que se confirme. Con su confirmación el canal se cierra y todas las operaciones descritas por las entradas y salidas se realizan en una misma transacción.
Sin embargo, ambas opciones son inseguras. Los valores nSequence y nLockTime podrían ser manipulados por un minero malicioso o incluso un nodo malicioso. Sin embargo, la idea básica de los canales de pago había surgido, y detrás de esta comenzaría una amplia investigación para desarrollar una mejor solución segura para todos.
Comienza el desarrollo de los primeros canales de pago
Las ideas de Satoshi Nakamoto rápidamente llamaron la atención de los desarrolladores de la comunidad, quienes pronto se encontraron con un problema complejo de resolver. ¿Cómo hacer que varias personas pudieran participar en un sistema de pago seguro, descentralizado, instantáneo y construido sobre el protocolo Bitcoin sin alterarlo innecesariamente? Idear una funcionalidad como esta es un tema complicado, pero más complicado es programarla, y si a eso le sumamos que dicha programación sea compatible sin romper nada de lo anterior es algo extremadamente complejo. Aun con ello, rápidamente surgieron dos formas de hacer canales de pago y las explicamos a continuación.
Tipos de Payments Channels
Unidireccionales
El sistema de canales de pagos más sencillo es el sistema de canales unidireccionales. En este sistema, el usuario A puede realizar un pago B. Un nuevo usuario C puede unirse al canal, y realizar un pago a D. Y de esa forma, la cadena de pagos en el canal puede seguir ampliándose.
Esos pagos están controlados y asegurados por transacciones del tipo multifirmas, por lo que para que se realicen, la partes involucradas deben firmar de manera conforme con los datos mostrados en las entradas y salidas de la transacción. A medida que el canal crece, las firmas del sistema también crecen y todos deben firmar para que los fondos sean liberados.
Adicionalmente, se aplica un nLockTime de 50 bloques, para evitar que los usuarios puedan usar el dinero de forma inmediata, sino que por el contrario, el dinero solo estará disponible luego de que 50 bloques hayan sido confirmados. En este punto, puedes ver el nLockTime como un cheque que solo es válido luego de una determinada fecha, ante de esa fecha solo es un papel sin valor. El nLockTime puede ser ajustada de la forma en que así lo deseen las partes.
De esta manera, todos los participantes pueden estar seguros de que el pago se ha realizado, pero solo recibirán el dinero luego de que se cumplan las condiciones adicionales de la negociación de ese pago. Entiéndase por ejemplo, que A pago a B por arreglar un ordenador, y B tiene aproximadamente 500 minutos para reparar dicho ordenador. En caso contrario, A puede aún intervenir en la transacción, cambiar su valor, y recuperar su dinero.
Bidireccionales
Los canales de pagos bidireccionales, son en realidad dos canales unidireccionales trabajando juntos. Gracias a esto, A y B pueden enviarse pagos de forma bidireccional, sin necesidad de cerrar un canal previo y abrir otro canal nuevo para las operaciones de pago. El funcionamiento básico se mantiene, con la salvedad de que los canales bidireccionales, son perfectos para realizar operaciones más dinámicas entre dos usuarios o entidades.
¿Por qué se crearon los canales de pago o payments channels?
En Bitcoin las transacciones sólo pueden ser confirmadas si estas son incluidas en un bloque dentro de la blockchain. Un proceso que pasa cada 10 minutos aproximadamente y en el que solo puede entrar 1 MB de información. Esto limita enormemente la cantidad de transacciones que pueden confirmarse en cada bloque, siendo aproximadamente 2200 transacciones las que se confirman cada 10 minutos.
Pero ¿Qué tal si hacemos trampa? ¿Qué tal si incluimos muchas entradas y salidas en una transacción y las partes involucradas en esa transacción firman la misma para dar su aprobación? Con ello, finalmente la transacción es emitida a la red y validada, y así una transacción haría el equivalente de varias transacciones individuales. Una trampa muy sutil cierto, pero también muy útil y es precisamente lo que hace un canal de pago. Al menos en sus rasgos más básicos.
De esta forma, los canales de pagos o payments channels se transforman en una solución de segunda capa que permite a los usuarios realizar transacciones sin tener que depender directamente del siguiente bloque para que una transacción se considere completa. Así, podemos realizar transacciones instantáneas que luego quedarán grabadas de forma unánime en la blockchain principal, cuando el canal de pago se cierra. No se pierde nada, no se crean monedas de la nada, al final todo termina en la misma contabilidad, y los números simplemente cuadran.
Allí está el por qué los payments channels o canales de pago se crearon. Es una herramienta perfecta para flexibilizar el pago usando criptomonedas, y todo ello, sin alterar los protocolos actuales.
Ventajas y desventajas de los canales de pago
Ventajas
- Ofrecen la capacidad de realizar pagos de forma instantánea entre las partes que participan en el canal de pago. Pero además permite programar los pagos, y hacerlos más seguros bajo ciertas condiciones.
- Puedes realizar micropagos, incluso enviar pocos satoshis.
- Permite rebajar las tarifas de transacciones, gracias a que el pago de la tarifa de confirmación on-chain se realiza entre todos los participante del canal.
- Habilita la capacidad de que los negocios puedan recibir pagos en criptomonedas dejando atrás los tiempos de confirmación on-chain, pero sin renunciar a la seguridad.
- Bajo las especificaciones de canales de pago actuales es muy difícil (por no decir imposible) robar fondos. Esto se debe a que las implementaciones de canales de pago usan el esquema de direcciones multifirmas, donde las acciones son solo llevadas a cabo si estas llevan las firmas de todos los participantes.
Desventajas
- Existe un límite en la cantidad de transacciones que podemos hacer con un payment channels.
- Los fondos para gastar en un payment channels deben colocarse por adelantado. Esto significa que si el canal se queda sin dinero, será necesario abrir otro nuevo para realizar más operaciones.
- Existen aún algunos problemas de seguridad concernientes a los canales de pago. Casos como vulnerabilidades en los códigos de los clientes y nodos para este tipo de sistema. O incluso, vulnerabilidades de la propia estructura de funcionamiento, como el caso de los Ataque de Dilatación Temporal. Esto son algunos de los problemas a resolver antes de la masificación de estos sistemas.
¿Cuánto sabes, criptonauta?
¿Los Payments Channels son una solución insegura para escalar criptomonedas?¡FALSO!
Existe un mito en el que muchos usuarios de criptomonedas como Bitcoin caen, y es que, muchos dicen que los payments channels como Lightning Network son inseguros. La realidad es que pese a que la tecnología aún está en su fase de desarrollo, los canales de pagos como LN son muy seguros. Esto a diferencia de otras opciones como las basadas en protocolos de consensos de alta velocidad y que a su vez llevan a la centralización (como PoA o PoET).
Primeras implementaciones de Payments Channels
Ahora bien, las implementaciones de payments channels o canales de pago han evolucionado durante estos últimos años, y sigue evolucionando. Aquí nombraremos algunas propuestas y cuáles han sido sus logros más destacados.
BitcoinJ y sus payments channels
Los desarrolladores Mike Hearn y Matt Corallo agregaron soporte para canales de pagos en BitcoinJ, el 27 de junio de 2013. Con la implementación, BitcoinJ se convirtió en la primera librería externa a Bitcoin Core capaz de soportar este sistema de forma segura. Bitcoin Core, podía usar sistema de pagos de este tipo, pero tal como comentábamos al principio de esta página, era inseguro debido a que los mineros o nodos podrían manipular estos canales usando los medios existente (nLockTime y nSequence).
BIP-65, el nacimiento de CLTV
Bitcoin Core dio un gran avance en la capacidad de crear payments channels con la activación OP_CHECKLOCKTIMEVERIFY o CLTV, un nuevo OP_CODE para Bitcoin.
Gracias a este código es posible probar, que es imposible gastar una salida de transacción hasta algún momento en el futuro. Esto es posible gracias a que CLTV permite implementar una prueba capaz de de saber si se ha creado una firma válida para una transacción diferente que gaste una determinada salida. De detectarse ese caso, CLTV puede invalidar la nueva transacción, evitando posibles esquemas de doble gasto.
En pocas palabras, el BIP-65 permite crear un método de verificación de gasto de fondos que nLockTime es incapaz de manejar, permitiendo la creación de canales bidireccionales seguros.
HTLC
Los HTLC son otro desarrollo en pro de los canales de pago. Básicamente, los HTLC funcionan en la enrutación de pagos. Es decir, dirigen los pagos de forma segura a través de múltiples canales de pago. De esta manera, HTLC evita uno de los problemas de los canales de pago: el coste de abrir nuevos canales de pago. Así HTLC es capaz de usar canales de pago siempre abiertos y enrutar los pagos de todas las personas entre esos pagos. El resultado, es una enorme red de canales de pago abiertos casi de forma permanente, listos para habilitar pagos bidireccionales dentro de ellos.
Esta funcionalidad ha hecho que los HTLC sean parte integral del diseño de canales de pago más avanzados, como los utilizados por Lightning Network.
Payments Channels en otras blockchains
Como sabrás, Bitcoin no es la única blockchain de criptomonedas, y tampoco es la única en la que es capaz integrar protocolos de payments channels. Criptomonedas como Litecoin o Ethereum, también son capaces de usar este tipo de sistemas. Casi toda criptomoneda con problemas de escalabilidad ha buscado un método para valerse de los canales de pagos para escalar. La razón es sencilla: los canales de pagos son más sencillos de implementar que una reescritura de los protocolos ya probados de esas blockchains.
Por ejemplo en Litecoin podemos usar a día de hoy Lightning Network, y en Ethereum podemos usar Raiden Network o Liquidity Network, aunque esta última usa un esquema de canales de pagos distinto.
Como estás viendo Blockchain no descansa, y la innovación entorno a ello es incesante. Los canales de pagos parece que han venido para quedarse, y pese a estar en etapas aun tempranas, apuntan a quedarse, especialmente si queremos ver a las criptomonedas de forma masiva en todo el mundo.