-
![](https://loratu.bitcointxoko.com/a2123bd53fae0ef155d2ac743b55a0f791a8fe8a441b91bcd1bbda287b1169c8.webp)
@ Bitcoin Txoko
2024-11-20 21:25:38
### ¿Qué es un canal?
Un canal Lightning es simplemente una multifirma 2-de-2 en la cadena. Para abrir un canal, solo enviamos fondos a una transacción multifirma 2-de-2. Esto crea un UTXO y el canal está abierto hasta que este UTXO se gaste. Durante la vida del canal, se crean un montón de transacciones que gastan doblemente la transacción de financiamiento, pero eventualmente una (y solo una) de estas se publicará en la cadena para cerrar el canal. Así que, idealmente, un canal Lightning condensa efectivamente un montón de transacciones en dos transacciones en la cadena: la que lo abre y la que lo cierra. Podríamos decir que así es como Lightning "eleva" las transacciones fuera de la cadena.
### Creando un canal
Una **transacción de financiamiento** para un canal entre Alice y Bob es simplemente una transacción que tiene una salida como sigue:
```
2 <pubkeyA> <pubkeyB> 2 OP_CHECKMULTISIG
```
Donde `<pubkeyA>` es la clave pública de Alice y `<pubkeyB>` es la de Bob. Entonces, si Alice quiere abrir un canal con Bob, ¿simplemente le envía fondos al script anterior?
La respuesta es no, es un poco más complicado que eso. Existe la posibilidad de que Bob desaparezca para siempre y nunca vuelva a firmar ninguna transacción que intente gastar de la transacción de financiamiento. Esto significa que, efectivamente, los fondos de Alice quedarían atrapados en este UTXO para siempre. ¡No es ideal!
Aquí es donde entra una **transacción de compromiso**. Cubriremos la transacción de compromiso con más detalle en el futuro, pero por ahora lo importante que hay que saber es que una vez que una transacción de financiamiento es confirmada, las transacciones de compromiso definen el **estado** del canal (es decir, cómo se distribuyen los fondos entre los participantes del canal). Así que, esencialmente, cada transacción de compromiso gasta la transacción de financiamiento como entrada y tiene salidas que definen la distribución de fondos entre los participantes del canal.
Para ver cómo se utilizan estos dos conceptos para negociar la apertura de un canal, se intercambiará una serie de mensajes entre los nodos de Alice y Bob, como se muestra en el diagrama a continuación.
![messages](https://cdn.satellite.earth/9c37526398e56dd466edcc36655eb5d77609958c01b33b539afccbba81c1f2d8.png)
Es un poco como negociar un contrato; cada parte solo firma cuando está contento con los términos. Vamos a revisar cada uno de estos mensajes con más detalle.
#### open_channel
Alice envía este mensaje a Bob para indicar que quiere abrir un canal con él. Este mensaje contiene varios detalles sobre los requisitos de Alice para el canal. El más importante es `funding_pubkey`. Esta es la clave pública que Alice tiene la intención de usar como su clave pública en el script de la transacción de financiamiento.
![open_channel](https://cdn.satellite.earth/d9b15d0315f2537a6b1195b4058fa292eb0dd329c4557e302a03fceff11d07b2.png)
#### accept_channel
Si Bob está contento con los requisitos que Alice ha presentado en su oferta de canal, puede enviar de vuelta el mensaje `accept_channel`, que también contiene algunos de sus requisitos junto con su `funding_pubkey`.
![accept_channel](https://cdn.satellite.earth/9d8d4f2dd76fdc1396592765d39870635bb772eaeae0b47a29822f8b1d754a46.png)
En este punto, Alice tiene todo lo que necesita para construir la transacción de financiamiento. Sin embargo, aún no tiene garantía de que Bob no desaparecerá, lo que haría que sus fondos no se pudieran gastar. Por lo tanto, aún no transmite la transacción de financiamiento. En cambio, lo que necesita es una transacción de compromiso firmada por Bob que gaste de la transacción de financiamiento y divida el saldo del canal en consecuencia. La transacción de financiamiento podría asignar algunos fondos a Bob también, por lo que Bob también querría una transacción de compromiso válida firmada por Alice, en caso de que ella desaparezca.
Entonces, lo que Alice hace ahora es construir la transacción de financiamiento y enviar a Bob el siguiente mensaje:
#### funding_created
![funding_created](https://cdn.satellite.earth/7e8dd661e4427b08e362da9462b761845561b24c8aab73dd3c01ef7bead573d8.png)
Este mensaje contiene el TXID de la transacción de financiamiento, el índice de salida relevante de la transacción de financiamiento junto con una firma de la transacción de compromiso de Bob. Alice puede construir la transacción de compromiso exacta de Bob utilizando la información que ya conoce.
Ten en cuenta que Bob no puede hacer nada aún con su transacción de compromiso porque está gastando de una transacción que aún no está en la blockchain.
#### funding_signed
![funding_signed](https://cdn.satellite.earth/249b01d85e603d1c78443b129646fc37f2b1a4a6f169d7fd02ae8779df86a9e9.png)
Si Bob está contento, entonces puede enviar a Alice un mensaje `funding_signed`, que contiene la firma de Bob para la transacción de compromiso de Alice.
Ahora, Alice tiene una transacción de compromiso válida firmada por Bob que puede usar para gastar sus fondos de vuelta a sí misma en caso de que Bob desaparezca. Por lo tanto, es seguro para ella transmitir la transacción de financiamiento.
#### channel_ready
Tanto Alice como Bob estarán ahora observando la blockchain esperando que la transacción de financiamiento alcance el número deseado de confirmaciones. Una vez que cada uno lo vea, se enviarán mutuamente el mensaje `channel_ready` que contiene el ID del canal.
![channel_ready](https://cdn.satellite.earth/fc523d78363cd8db57152eb146ecec0272b43fb42cef9fab57eba78b63a980d7.png)
¡El canal ahora está abierto y listo para transacciones!
### Revisión
Terminaremos con un breve resumen de los conceptos importantes que hemos aprendido en este capítulo. Siéntete libre de volver aquí en el futuro en caso de que necesites un recordatorio.
- **canal**: un contrato multifirma 2-de-2 en la cadena utilizado para elevar transacciones fuera de la cadena
- **transacción de financiamiento**: una transacción multifirma 2-de-2 con un script de salida P2WSH que contiene las claves públicas de ambos participantes del canal
- **transacción de compromiso**: una transacción que define el estado de un canal, es decir, la distribución de fondos entre los participantes del canal
### Referencias
- [BOLT2](https://github.com/lightningnetwork/lightning-rfc/blob/master/02-peer-protocol.md)
- [LN Things Part 1: Creating a channel](https://ellemouton.com/posts/creating-a-channel/) por nostr:nprofile1qqswrt9pnxatlplu49h6meld8svmwqt87wwvk256rqk07n6eu4qeh5gpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0dszpfjtz