¿Cómo puedo decodificar la cadena de características de un nodo Lightning con BOLT #9?

Escribiendo el siguiente comando (con un relámpago en ejecución) :

 lightning-cli listpeers

Obtengo compañeros que tienen una featuresbandera, por ejemplo 0252a1. En la página de manual lightning-listpeers(7)dice que corresponde a las características mencionadas en BOLT #9.

¿Cómo accedo 0252a1a las características enumeradas en la tabla que se ve en el documento BOLT #9 ?

Respuestas (1)

Un bit es una excavación binaria con las dos expresiones posibles 0 y 1. Los datos binarios a menudo se representan como hexadecimales por escrito, ya que son más compactos y legibles por humanos. Hexadecimal (base 16) codifica los números (decimales) del 0 al 15 con los símbolos 0-9 y AF (donde AF representa 10-15).

Algunos ejemplos (el subíndice indica la base):
1 10 = 1 16 = 0001 2
5 10 = 5 16 = 0101 2
10 10 = A 16 = 1010 2
13 10 = D 16 = 1101 2

La matriz de banderas que cita, 0252a1se traduciría a la matriz binaria100101001010100001

Para usarlo como una matriz de banderas, no lo interpretamos como un número sino que interpretamos un 1 como una función que se está configurando y un 0 como una función que se está desactivando. Nos referimos a cada bit por su posición contando desde el extremo derecho. El más a la derecha es el bit cero e incluso.

Los indicadores de características (BOLT #9) en Lightning siempre se asignan en pares. Los bits pares se refieren a funciones que nuestro nodo considerará obligatorias, los bits impares se refieren a funciones opcionales que admite nuestro nodo. Otros nodos ignorarán los bits extraños que no entienden ("Está bien ser extraño"), pero se desconectarán si hay bits pares establecidos que no admiten.

1001010010101000_01_
Los bits 0/1 se refieren a la característica option_data_loss_protect. La bandera está en el bit par (el 0), por lo que la función es obligatoria.

10010100101010_00_01
Los bits 2/3 se refieren a initial_routing_sync. Dado que ninguno de los bits está configurado, nuestro nodo no admite esa función.

100101001010_10_0001
Señal de bits 4/5 option_upfront_shutdown_script. La bandera está en el bit 5 y, por lo tanto, es una característica opcional.

1001010010_10_100001
Señal de bits 6/7 gossip_queries. La bandera está en el bit 7, también opcional.

10010100_10_10100001
Señal de bits 8/9 var_onion_optin. Como la bandera está en el bit impar, es una característica opcional.

100101_00_1010100001
Los bits 10/11 son para gossip_queries_ex. Nuestro nodo no admite esta característica.

1001_01_001010100001
Los bits 12/13 indican que option_static_remotekeyes obligatorio para los pares de este nodo, ya que está configurado en el bit 12, el bit par.

10_01_01001010100001
Los bits 14/15 se refieren a payment_secretlo que también es obligatorio.

_10_0101001010100001
La bandera en el bit 17 indica que basic_mppes opcional.

La ausencia de las banderas de característica en los bits 18-27 indica que el nodo no reconoce ninguna de las características correspondientes.