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 costo 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 cadena de bloques. 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, 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 forma muy efectiva de brindar una gran escalabilidad a las criptomonedas.
En este punto seguramente te preguntarás ¿Cómo funcionarán? ¿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 presentó como una posibilidad tecnológica aplicable a Bitcoin. Esto apoyó sobre los OP_CODES de Bitcoin Script que sirvieron 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 descritos 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 pueden 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 transacción determinada 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 impiden el nLockTime final para las transacciones, y esperan a que se confirme. Con su confirmación el canal se cierra y todas las descritas por las operaciones entradas y salidas se realizan en una misma transacción.
Sin embargo, ambas opciones son seguras. 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 canal de pago.
- Los fondos para gastar en un canal de pago 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.
Primeras implementaciones de Canales de Pago
Ahora bien, las implementaciones de canales de pagos o canales de pago han evolucionado durante estos últimos años, y sigue evolucionando. Aquí nombraremos algunas propuestas y características han sido sus logros más destacados.
BitcoinJ y sus canales de pago
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 el sistema de pagos de este tipo, pero tal como comentamos al principio de esta página, era inseguro debido a que los mineros o nodos podrían manipular estos canales usando los medios existentes (nLockTime y nSequence).
BIP-65, el nacimiento de CLTV
Bitcoin Core dio un gran avance en la capacidad de crear canales de pago 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 transacciones hasta algún momento en el futuro. Esto es posible gracias a que CLTV permite implementar una prueba capaz de saber si se ha creado una firma para una transacción válida diferente que gaste una salida determinada. De detectarse ese caso, CLTV puede invalidar la nueva transacción, impidiendo 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 imposible 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.
Canales de pago en otras blockchains
Como sabrás, Bitcoin no es la única cadena de bloques de criptomonedas, y tampoco es la única en la que es capaz de integrar protocolos de canales de pago. Criptomonedas como Litecoin o Ethereum, también son capaces de usar este tipo de sistemas. Casi toda la 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 cadenas de bloques.
Por ejemplo, en Litecoin podemos usar un 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 distintos.
Como estás viendo Blockchain no descansa, y la innovación entorno a ello es incesante. Los canales de pagos parecen 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.