Glosario / Lightning y capa 2
Transacción de compromiso
- ¿Qué es una transacción de compromiso?
- Una transacción de compromiso es la transacción de bitcoin firmada y sin difundir que conserva cada lado de un canal Lightning, y que gasta la salida de financiación según el reparto actual del saldo.
Cada pago Lightning reemplaza las transacciones de compromiso de ambos lados por otras dos nuevas, y las dos antiguas se revocan en lugar de borrarse. BOLT 3 establece el peso esperado del compromiso de un canal ancla en 1.124 unidades de peso más 172 por cada pago aún en tránsito. Conservar una significa conservar una vía de salida que usted puede tomar por su cuenta, con una comisión que su par aceptó semanas antes.
Cómo funciona
Una transacción de compromiso tiene exactamente una entrada, la salida de financiación 2 de 2 del canal, y sus salidas son el reparto actual de ese dinero.
En todo momento existen dos transacciones de compromiso, una por par, y a propósito no son la misma transacción. Cada copia retrasa el pago a quien la conserva tras un bloqueo OP_CHECKSEQUENCEVERIFY de to_self_delay bloques mientras paga antes al otro lado, de modo que quien la difunde es quien espera. Con la opción option_anchors, ni siquiera el pago al otro lado es inmediato: la salida to_remote lleva un bloqueo CSV de un bloque, añadido para que ningún par pueda atascar el compromiso adjuntándole transacciones hijas baratas.
La transacción oculta su propio contador. BOLT 3 establece el campo de versión en 2, toma el número de compromiso de 48 bits, le aplica un XOR con los 48 bits inferiores del SHA256 de los dos valores payment_basepoint de los mensajes open_channel y accept_channel, y luego reparte el resultado entre dos campos: los 24 bits superiores van al número de secuencia de la entrada detrás del byte 0x80, y los 24 inferiores al locktime detrás de 0x20. Ambos pares lo recalculan en un instante. Cualquier otra persona que observe la cadena ve dos números de aspecto arbitrario y no puede contar cuántos pagos pasaron por el canal.
El financiador costea la vía de salida. Antes de disponer ninguna salida, la comisión base se resta del lado que financió el canal, y con option_anchors se descuentan también de ese mismo lado dos salidas ancla fijas de 330 satoshis cada una. Después, las salidas se ordenan por valor, de menor a mayor, luego por scriptPubKey comparado byte a byte y luego por cltv_expiry en las salidas HTLC, de modo que ambos pares llegan a una transacción idéntica byte a byte sin enviársela nunca el uno al otro.
Lo que es demasiado pequeño para que valga la pena anotarlo no se escribe. BOLT 3 llama a estos casos "trimmed outputs" (salidas recortadas): un HTLC cuyo monto, menos la comisión que costaría su propia transacción de segunda etapa, queda por debajo del valor dust_limit_satoshis de su propietario no recibe ninguna salida, y el dinero se convierte en comisión de minería en lugar de pasar al saldo de alguien. Los umbrales que enumera BOLT 3 son los de Bitcoin Core: 330 satoshis para "pay to witness script hash", 294 para "pay to witness pubkey hash" y 240 para "pay to anchor". Son un piso y no el valor configurado en sí, y BOLT 3 indica a los canales ancla que se sitúen por encima, porque en esos canales la transacción de segunda etapa no paga comisión y por eso deja de contribuir en absoluto al recorte.
La forma más reciente de la transacción prescinde de la comisión incorporada. Donde se aplica la opción zero_fee_commitments, el campo de versión pasa a 3, el campo feerate_per_kw se establece en 0 y se añade, en ese límite de 240 satoshis, una salida shared_anchor que lleva el script pay to anchor OP_1 <0x4e73>. Cualquiera puede gastarla, así que el compromiso llega a un bloque mediante el child pays for parent (el hijo paga por el padre) al precio que marque el mercado de comisiones ese día, y no al que tenía cuando se firmaron las dos transacciones.
Por qué importa cuando compra bitcoin
La transacción de compromiso es donde un saldo Lightning deja de ser un número en una pantalla y se convierte en satoshis menos comisiones, y dos de sus reglas cuestan dinero real.
La primera es el recorte. Los montos pequeños dentro de un canal no se redondean, se eliminan, y el propio ejemplo práctico de la especificación entrega al minero 1.800 satoshis de pagos en tránsito porque cada uno quedaba por debajo del límite de polvo más el costo de su segunda etapa. Eso pone un piso por debajo del cual no vale la pena llevar nada a Lightning. Phoenix, la billetera de ACINQ que figura en nuestras reseñas, cobra 1.000 satoshis por crear un canal y afirma que recuperarse de un cierre forzado lleva aproximadamente 720 bloques, alrededor de cinco días. Un canal financiado con unos pocos miles de satoshis es una cuenta que nunca sale.
La segunda es que la comisión dentro de una transacción de compromiso se eligió cuando se firmó. Al saldo del financiador se le descontó la comisión según el feerate_per_kw de ese día, y si la mempool se ha movido desde entonces, la transacción que espera en su billetera puede no confirmarse al precio que lleva. Las anclas existen precisamente por esto, y zero_fee_commitments existe para trasladar, en cambio, la decisión al momento de la difusión.
Ninguna de las dos reglas le alcanza si el canal lo tiene otra persona. Strike, calificado con 4,6 en nuestras reseñas de exchanges, es nativo de Lightning y con custodia mientras usted mantenga el saldo en la aplicación, y Coinbase pone a sus retiros por Lightning un precio inferior al de un envío on-chain en montos pequeños y superior en montos grandes. Lo que usted cede a cambio está documentado en las reseñas de billeteras: Wallet of Satoshi, calificada con 2,7 y con la etiqueta de precaución, dejó de dar servicio a los clientes de Estados Unidos el 23 de noviembre de 2023 y más tarde retiró su servicio Lightning con custodia en toda la Unión Europea a medida que se agotaban los períodos transitorios de MiCA. Usted no tenía ninguna transacción de compromiso a la que recurrir.
Recorrido por el ejemplo de comisión de BOLT 3
BOLT 3 publica un único ejemplo práctico de cálculo de comisión, y seguirlo de principio a fin muestra adónde va realmente el dinero de un canal.
Los datos de partida son un feerate_per_kw de 5.000, un dust_limit_satoshis de 546 y cuatro pagos en tránsito: HTLC ofrecidos de 5.000 y 1.000 satoshis, y HTLC recibidos de 7.000 y 800 satoshis. Con esa comisión por kiloweight, una transacción HTLC timeout cuesta 3.315 satoshis y una transacción HTLC success cuesta 3.515.
El peso de la transacción parte de 724, la cifra de un canal sin option_anchors, configuración que todo este ejemplo da por supuesta. El HTLC ofrecido de 5.000 satoshis supera 546 más 3.315, así que recibe una salida y el peso de la transacción sube a 896. El HTLC ofrecido de 1.000 satoshis no lo supera y se recorta. El HTLC recibido de 7.000 satoshis supera 546 más 3.515, así que recibe una salida y el peso de la transacción sube a 1.068. El HTLC recibido de 800 satoshis se recorta.
La comisión base es 5.000 multiplicado por 1.068 y dividido entre 1.000, es decir, 5.340 satoshis, que se descuentan únicamente de la salida del financiador. La comisión que cobra realmente un minero es de 7.140 satoshis, porque se le suman los dos HTLC recortados. De 13.800 satoshis en tránsito, 1.800 dejan de existir como saldo de cualquiera de las partes, y el total puede subir todavía más si la propia salida del financiador queda por debajo del límite de polvo una vez descontada la comisión.
Transacción de compromiso frente a transacción de penalización
Una transacción de compromiso paga un reparto que ambos pares firmaron; una transacción de penalización le quita todo el canal a un par que publicó un reparto que ya había revocado.
Las dos gastan cosas distintas. Una transacción de compromiso gasta la salida de financiación. Una transacción de penalización gasta las salidas de una transacción de compromiso que resultó estar obsoleta, usando la clave de revocación que entregó quien conservaba esa transacción cuando ese estado se reemplazó. El script to_local escribe ambos futuros en una sola salida: una rama necesita la clave con retraso tras to_self_delay bloques, y la otra necesita una firma de revocación y funciona sin retraso alguno.
Transacción de compromiso frente a cierre forzado
Una transacción de compromiso es un objeto que usted conserva; un cierre forzado es el acontecimiento en el que alguien difunde una.
La distinción importa porque usted no tiene por qué ser quien actúe. Si su par fuerza el cierre con un estado vigente, la copia de su par paga a su lado sin que usted haga nada, con la única condición del bloqueo CSV de un bloque que los canales ancla ponen en la salida to_remote. Su propia copia es la alternativa ante un par que ha dejado de responder, y es la copia que le obliga a esperar todo el retraso. Conservar una transacción de compromiso es normal, continuo y gratuito; difundir una es un acontecimiento que preferiría no vivir nunca.