Glosario / Lightning y capa 2
Bit de funcionalidad
- ¿Qué es un bit de funcionalidad?
- Un bit de funcionalidad indica a otros nodos Lightning que su nodo admite una extensión concreta del protocolo, y los números impares la marcan como opcional y los números pares, como obligatoria.
Lightning no incluye ningún número de versión que los pares puedan comparar, así que dos nodos averiguan qué pueden hacer juntos intercambiando un campo de bits en el momento en que se conectan. BOLT 9 asigna 25 parejas con nombre, desde el bit 0 hasta el bit 67, y nadie puede activar los dos bits de una misma pareja. Si su billetera rechaza una factura que otra billetera paga, un bit de funcionalidad ausente es una de las cosas que conviene comprobar.
Cómo funciona
Los bits de funcionalidad se cuentan desde el bit menos significativo de un campo de bits, empezando por el bit 0, que tiene el valor 0x1 y cuenta como bit par.
Se reparten por parejas, y el emparejamiento es todo el truco: el bit impar significa que el nodo admite la funcionalidad y el bit par, que la exige. Así, una capacidad puede lanzarse como opcional, extenderse sin hacer ruido y más tarde volverse obligatoria, algo que, según BOLT 9, los nodos no actualizados rechazarán, de modo que la incompatibilidad aparece cuando dos nodos se encuentran y no a mitad de un pago. Los requisitos dicen el resto con claridad: un nodo de origen no debe activar los dos bits de una pareja, y un nodo que, aun así, recibe ambos activados trata la funcionalidad como obligatoria.
Algunas funcionalidades dependen de otras, y el remitente carga con toda la cadena de dependencias. Los pagos multiparte básicos ocupan los bits 16 y 17 y dependen de la funcionalidad payment_secret; los canales zeroconf ocupan el 50 y el 51 y dependen de la opción option_scid_alias; la opción option_onion_messages_only_channels, en el 66 y el 67, depende de los mensajes cebolla ordinarios. El nodo de origen debe activar todas las dependencias transitivas, de modo que el código condicionado a una sola funcionalidad puede dar por hecho que los bits de los que depende están presentes en lugar de volver a validarlos.
Cinco de las 25 parejas ahora solo dicen ASSUMED: 0/1, 8/9, 12/13, 14/15 y 44/45. Cada una se generalizó tanto que se da por hecho que todos los nodos la tienen, y su semántica solo sobrevive en revisiones anteriores de la especificación. La tabla también se salta números, sin nada asignado en 2/3, 20/21, 30/31, 32/33, de 52 a 59 ni en 64/65, así que los huecos son normales.
Dónde aparece
Los bits de funcionalidad viajan en varios lugares distintos, y la columna Context de la tabla de BOLT 9 indica a cuáles de ellos pertenece cada pareja; está en blanco en seis de las 25 filas.
I marca el mensaje init que dos pares intercambian al conectarse; N, un mensaje node_announcement propagado por el grafo de gossip; C, un mensaje channel_announcement; 9, una factura BOLT 11; B, el campo allowed_features de una ruta ciega, y T, el campo channel_type que se acuerda al abrir un canal. Muchos bits aparecen en un solo contexto: la opción option_payment_metadata, bits 48 y 49, solo aparece en facturas, mientras que la opción option_anchors, en el 22 y el 23, aparece en init, en el gossip y como tipo de canal, pero nunca en una factura.
Cuando dos contextos discrepan, gana la factura: la justificación de BOLT 9 establece que, para los indicadores presentes tanto en el mensaje node_announcement como en BOLT 11, los valores de la factura prevalecen sobre los anunciados. Por eso una billetera lee las capacidades en la factura que usted pegó, no en lo que el destino anunció a la red de gossip horas antes.
Phoenix, creada por ACINQ sobre su implementación Eclair, ejecuta un nodo real en su teléfono, así que si acepta un pago multiparte o una ruta ciega lo decide un campo de bits intercambiado con su par, no una página promocional. Muun muestra on-chain y Lightning como un solo saldo, y sus pagos Lightning siguen dependiendo de los bits de la factura.
Bit de funcionalidad frente a bit de versión
Un bit de funcionalidad negocia capacidades entre dos pares Lightning; un bit de versión señaliza una bifurcación blanda (soft fork) en un encabezado de bloque de bitcoin. BIP-9 da a los mineros los bits 0 a 28 del campo de versión del encabezado y hace que un despliegue quede fijado con 1.916 de una ventana de 2.016 bloques en la mainnet, tras lo cual queda activo en todos los bloques siguientes. Un bit de funcionalidad no obliga a nadie: es una afirmación entre dos pares, verdadera en una conexión y falsa en la siguiente, sin umbral, sin timeout (fecha de expiración) y sin activación en toda la red. Lightning negocia lo que dos nodos harán el uno por el otro; bitcoin decide lo que todos deben aceptar.