De las salidas HTLC ofrecidas,
# To remote node with revocation key
OP_DUP OP_HASH160 <RIPEMD160(SHA256(revocationpubkey))> OP_EQUAL
OP_IF
OP_CHECKSIG
OP_ELSE
<remote_htlcpubkey> OP_SWAP OP_SIZE 32 OP_EQUAL
OP_NOTIF
# To local node via HTLC-timeout transaction (timelocked).
OP_DROP 2 OP_SWAP <local_htlcpubkey> 2 OP_CHECKMULTISIG
OP_ELSE
# To remote node with preimage.
OP_HASH160 <RIPEMD160(payment_hash)> OP_EQUALVERIFY
OP_CHECKSIG
OP_ENDIF
OP_ENDIF
Con las siguientes condiciones,
locktime
se establece en 600900 en la transacción HTLC-Timeout.payment_secret
.Según tengo entendido, para agotar el tiempo de espera de la última transacción de compromiso, el nodo local tiene que,
Mientras tanto, el nodo remoto con payment_secret
puede gastar la transacción de compromiso también. ¿Causará esto una condición de carrera/doble gasto en la red de Bitcoin? Si es así, ¿cómo se puede resolver?
En primer lugar, creo que parece haber una pequeña confusión sobre la notación. Uno no gasta una transacción, sino salidas de transacción. En el caso de htlcs ofrecidos, la salida es solo una salida (entre muchas otras potencialmente).
También entiendo el bloqueo de tiempo ligeramente diferente. Si publica la transacción de compromiso, se puede extraer y verificar directamente. Es la salida bloqueada por tiempo, por ejemplo, el htlc que solo se puede gastar después del bloqueo de tiempo.
Con respecto a la condición de carrera / doble gasto. En primer lugar, los gastos dobles en Bitcoin son imposibles por diseño (a menos que tengamos un exploit desconocido), por lo que podemos reducirlo a la cuestión de una condición de carrera. Aquí tenemos que distinguir dos casos:
yyforyongyu
Subhra Mazumdar
Janus Troelsen