¿Qué son los Payments Channels?
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.