Glosario / Lightning y capa 2
Milisatoshi
También se conoce como msat.
- ¿Qué es un milisatoshi?
- Un milisatoshi es la milésima parte de un satoshi, la unidad en que Lightning cuenta saldos de canal y comisiones de enrutamiento, y un monto que la propia blockchain de bitcoin no puede registrar.
Lightning lleva sus cuentas con un grado más de detalle que la blockchain: en milésimas partes de un satoshi. BOLT 2 establece la proporción sin rodeos: el campo push_msat no puede superar 1000 veces el valor de funding_satoshis, y solo se pueden hacer cumplir on-chain montos en satoshis enteros. Cualquier resto en milisatoshis de su saldo es real dentro del canal y desaparece por redondeo en el momento en que ese canal se cierra.
Cómo funciona
Un milisatoshi es una unidad de cuenta dentro de un canal Lightning, no una unidad de liquidación en la blockchain.
Todo monto de pago dentro de un canal se escribe en milisatoshis y lo indica en el nombre de su campo. El mensaje que añade un pago a un canal, update_add_htlc, lleva un campo amount_msat de 64 bits, y al abrir un canal se negocian los campos push_msat, htlc_minimum_msat y max_htlc_value_in_flight_msat en la misma unidad. BOLT 2 señala la salvedad junto a la definición: los montos están en milisatoshis, "though on-chain enforcement is only possible for whole satoshi amounts greater than the dust limit" (aunque solo pueden hacerse cumplir on-chain los montos en satoshis enteros superiores al límite de polvo), y la transacción de compromiso los redondea hacia abajo.
El factor de conversión no es folclore. Un nodo que abre un canal debe poner en push_msat un valor no superior a 1000 veces funding_satoshis, y el par que recibe el mensaje debe hacer fallar el canal si push_msat es mayor que funding_satoshis por 1000. La proporción de 1.000 a 1 está escrita en la negociación inicial (handshake) desde ambos lados.
Las facturas heredan el mismo piso. Un monto BOLT 11 se expresa en bitcoin con una letra multiplicadora, y la más pequeña, p de pico, lleva una regla que las demás no tienen: el último dígito del monto debe ser cero. Un picobitcoin es la décima parte de un milisatoshi, así que el cero final obliga a que la solicitud sea un número entero de milisatoshis. La especificación explica su razón con claridad: los montos inferiores a un milisatoshi no pueden transferirse en la red porque los HTLC se expresan en milisatoshis, y los vectores de prueba incluyen una factura rechazada bajo el título "Invalid sub-millisatoshi precision" (precisión inferior al milisatoshi no válida).
Los tres decimales extra se ganan su lugar en la aritmética de las comisiones. Un nodo que reenvía cobra una comisión proporcional expresada en millonésimas de satoshi por cada satoshi reenviado, así que una comisión proporcional de 1 sobre un pago de 1.000 satoshis equivale a un solo milisatoshi. Si se redondea a un satoshi entero, la comisión queda multiplicada por mil o se pierde.
Dónde aparece
Las cifras en milisatoshis aparecen allí donde una herramienta Lightning muestra sus números reales en lugar de una presentación redondeada.
Al decodificar una factura BOLT 11, los route hints (pistas de ruta) aparecen en esta unidad. El propio ejemplo práctico de la especificación enumera dos saltos que cobran una comisión base de 1 milisatoshi y de 2 milisatoshis, y su factura de muestra para un pedido de la tienda de Blockstream lleva un route hint cuya comisión base es de 1000, un satoshi entero. La actualización gossip de un canal publica htlc_minimum_msat y fee_base_msat en la misma unidad, así que un panel que lea esos campos muestra un número mil veces mayor que la cifra en satoshis que tiene al lado.
Las billeteras de consumo ocultan la unidad, pero no la aritmética. Phoenix publica una tabla de comisiones en lugar de descubrirlas en el momento del pago, y su envío Lightning cuesta 0,4 % más 4 satoshis; en un pago de 137 satoshis, la parte porcentual sale a 548 milisatoshis, un monto sin ninguna representación on-chain. Muun presenta on-chain y Lightning como un único saldo, lo que oculta la frontera por completo sin eliminarla.
Milisatoshi frente a satoshi
Un satoshi es el monto más pequeño que puede registrar la blockchain de bitcoin, mientras que un milisatoshi es la milésima parte de eso y solo existe en los mensajes de Lightning y en los libros contables que llevan sus dos pares.
La diferencia se hace sentir al cerrar. Un saldo de canal de 1.234.567 milisatoshis es exigible como 1.234 satoshis y nada más, porque la transacción de compromiso que liquida el canal on-chain paga satoshis enteros; los 567 milisatoshis sobrantes no tienen ninguna salida on-chain en la que existir y solo pueden gastarse mientras el canal siga abierto. Esa diferencia vale una fracción de centavo, y aun así es la razón por la que las dos unidades no pueden usarse una en lugar de la otra en nada que toque la blockchain.