¿Cómo encuentro el ID de nodo del nodo que emite una factura de Lightning Network?

Recientemente recibí una factura BOLT11 de una tienda. Por ejemplo este:

LNBC13934430N1PWJUJEZPP5K7FLC2M5CLHTWMTF3HZDN7VVRCA4RNFAFA89F2D6KGYWW4JCSDAQDZ62PSKJEPQW3HJQ4RGV5SYC6T8DP6XU6TWVUSYXMMWVEJHYETWVDJJQ2Z0WFJX2U3QF9ZR5GZ5F3PNZWFD25UY54Z39YXQZURCQP2RZJQG8ZM9WXGVHZPMUQEWY9J9KDQNRVLZHPCWM6S8CVLC2CKRDNELE42Z9U5VQQY3SQQYQQQQL8QQQQPJQQ9Q6KM84F7KTW6UV574UR2LFNKZLM7VNK8NJRZV20JD8SAW6FZ3TQGSZE6YUT0X2UXGDGYJZGTXEFSQSSEVTKFF97P3TER5K23ZPHDDXHQQ95UT4N

Afortunadamente, mi nodo pudo encontrar una ruta al destino, pero ¿no lo haría? ¿Cómo podría averiguar nodeidpara abrir y financiar un canal de pago directo con la tienda? No dijeron nada sobre su ID de nodo en su sitio web.

Respuestas (1)

Las facturas Lightning están firmadas por el nodo que emite la factura para verificar la firma, necesitamos saber la identificación del nodo. Por lo tanto, está incluido en la factura. Los nodos Lightning proporcionan una API para decodificar facturas.

En c-lightning puedes hacer (¡lnd abajo!)

lightning-cli decodepay LNBC13934430N1PWJUJEZPP5K7FLC2M5CLHTWMTF3HZDN7VVRCA4RNFAFA89F2D6KGYWW4JCSDAQDZ62PSKJEPQW3HJQ4RGV5SYC6T8DP6XU6TWVUSYXMMWVEJHYETWVDJJQ2Z0WFJX2U3QF9ZR5GZ5F3PNZWFD25UY54Z39YXQZURCQP2RZJQG8ZM9WXGVHZPMUQEWY9J9KDQNRVLZHPCWM6S8CVLC2CKRDNELE42Z9U5VQQY3SQQYQQQQL8QQQQPJQQ9Q6KM84F7KTW6UV574UR2LFNKZLM7VNK8NJRZV20JD8SAW6FZ3TQGSZE6YUT0X2UXGDGYJZGTXEFSQSSEVTKFF97P3TER5K23ZPHDDXHQQ95UT4N
{
  "currency": "bc", 
  "created_at": 1563314978, 
  "expiry": 899, 
  "payee": "024a8228d764091fce2ed67e1a7404f83e38ea3c7cb42030a2789e73cf3b341365", 
  "msatoshi": 1393443000, 
  "amount_msat": "1393443000msat", 
  "description": "Paid to The Lightning Conference (Order ID: TLC19-U8JTQ)", 
  "min_final_cltv_expiry": 10, 
  "routes": [
    [
      {
        "pubkey": "020e2d95c6432e20ef80cb885916cd04c6cf8ae1c3b7a81f0cfe158b0db3cff355", 
        "short_channel_id": "572579x582x1", 
        "fee_base_msat": 999, 
        "fee_proportional_millionths": 200, 
        "cltv_expiry_delta": 40
      }
    ]
  ], 
  "payment_hash": "b793fc2b74c7eeb76d698dc4d9f98c1e3b51cd3d4f4e54a9bab208e75658837a", 
  "signature": "3045022100d5b67aa7d65bb5c653d5e0d5f4cec2fefcc9d8f390c4c53e4d3c3aed245158110220016744e2de6570c86a09212166ca6008432c5d9292f8315e474b2a220ddad35c"
}

En particular, encontramos la entrada que revela el nodo de la tienda:

 "payee": "024a8228d764091fce2ed67e1a7404f83e38ea3c7cb42030a2789e73cf3b341365"

Podemos consultar la tienda de chismes para obtener más información sobre el nodo con el siguiente comando:

lightning-cli listnodes | grep 024a8228d764091fce2ed67e1a7404f83e38ea3c7cb42030a2789e73cf3b341365 -B 1 -C 13
    {
      "nodeid": "024a8228d764091fce2ed67e1a7404f83e38ea3c7cb42030a2789e73cf3b341365", 
      "alias": "www.fulmo.org", 
      "color": "f2f3f4", 
      "last_timestamp": 1561973177, 
      "globalfeatures": "", 
      "global_features": "", 
      "addresses": [
        {
          "type": "ipv4", 
          "address": "95.211.207.81", 
          "port": 9735
        }
      ]
    }, 

Esto nos brinda toda la información que necesitamos para interactuar con la tienda y financiar un canal. (En caso de que el nodo fuera privado, podríamos usar las routessugerencias de la factura decodificada para conectarnos a un nodo de salida público).

usuarios de lnd

Si está usando, lndpuede usar el comando DecodePayReqy, en lugar de invocar listnodespara obtener la información de la tienda de chismes, puede invocarGetNetworkInfo

Tenga en cuenta también que el payeecampo en una factura BOLT 11 es opcional. Si se omite, la clave pública del nodo de firma se puede recuperar a partir de la firma y la identificación de recuperación. No estoy seguro de si las implementaciones completarán automáticamente el payeecampo en este caso al usar decodepay/ DecodePayReq.
No sabía que las claves de publicación se pueden calcular a partir de firmas en ecdsa. Si otros también se sorprenden, consulte crypto.stackexchange.com/questions/18105/… para ver por qué/cómo es esto posible.