¿Fondos mínimos requeridos en un canal en Lightning?

He notado que no puedo agotar los fondos en mi canal a un lado en lnd. Entiendo que esto tiene sentido para tener algún castigo en caso de fraude, pero no puedo encontrar la razón del valor particular en lnd (o BOLT).

Estos son los pasos que seguí (para reproducir):

$>lncli-alice listchannels
{
"channels": [
    {
        "active": true,
        "remote_pubkey": <bob_pubkey>,
        "channel_point": <channel_point>,
        "chan_id": <chan_id>,
        "capacity": "16777215",
        "local_balance": "370557",
        "remote_balance": "16406475",
        "commit_fee": "183",
        "commit_weight": "724",
        "fee_per_kw": "253",
        "unsettled_balance": "0",
        "total_satoshis_sent": "16506475",
        "total_satoshis_received": "100000",
        "num_updates": "300",
        "pending_htlcs": [
        ],
        "csv_delay": 2016,
        "private": false
    }
 ]
}

Después de agregar una factura de lncli-boby llamar queryroutespara crear la ruta a Bob lncli-alicecon los valores amt 202742 y 202743:

$>cat route_channel_alice_to_bob_amt_202742.txt | lncli-alice sendtoroute --pay_hash=pay)hash -
{
"payment_error": "unable to route payment to destination: TemporaryChannelFailure[...]",
"payment_preimage": "",
"payment_route": null
}

$>cat route_channel_alice_to_bob_amt_202743.txt | lncli-alice sendtoroute --pay_hash=<pay_hash> -
{
"payment_error": "",
"payment_preimage": <payment_preimage>,
"payment_route": {
[...]
 }
}

Dado que tengo 370557, no entiendo por qué un pago de 202743 da como resultado fondos insuficientes, mientras que 202742 no. Me gustaría saber más sobre la naturaleza y el cálculo exacto de este valor mínimo.

Respuestas (1)

Probando más esto, encontré una respuesta: con la configuración actual de lnd, uno no puede transferir una cantidad tal que deje a uno de los lados con menos del 1% de la capacidad del canal. Lo más probable es que esto evite que un lado intente comprometerse con un estado anterior, ya que el castigo sería bajo.

Por ejemplo, en el caso anterior, si el canal capacityes 16777215 y el local_balancees 370557, entonces la cantidad máxima posible de transferir es 202742 porque 370557-202742 ≃ 0.01*16777215 (no es exactamente 1%, probablemente debido a las tarifas que necesitan a contabilizar).

Probé esto dos veces usando un canal de capacity7310000 y teniendo como local_balance4294965, y nuevamente mi valor máximo posible para transferir es 73143 ≃ 0.01 * 7310000 (nuevamente, no exactamente el 1% debido a tarifas no contabilizadas en --amt).

En cuanto al valor extra, se pensaría que es fee_per_weight*172 + feerate*amt(tarifa por millonésima transferida) en el caso del último salto, mientras que se suman en los saltos anteriores. Pero esto significaría una diferencia mayor que 143 mSat o 42 mSat, como se calcula en los ejemplos anteriores. No estoy del todo seguro de cómo se deriva esta diferencia de no ser exactamente del 1%.

Tiene que ver con el ancho de banda de desbordamiento (el ancho de banda del canal que actualmente se está utilizando para otras rutas sin terminar). Pero aún así esto no coincide exactamente con los números. Sin embargo, solo una diferencia de cien satoshis no es más que una fracción de centavo, por lo que no es un gran valor. Sin embargo, no puedo poner mi dedo en el cálculo exacto...