Lightning Network : Un canal peut-il être fermé alors que le financement tx est toujours bloqué dans le mempool ?


J’ai commencé à écrire cette réponse en essayant de le faire moi-même, mais j’ai ensuite découvert que nous ne disposions pas encore d’outils pour modifier manuellement les transactions Bitcoin partiellement signées (PSBT), ce qui est la toute dernière étape avant de finaliser la double dépense. Donc, cette réponse est actuellement incomplète, mais je prévois de construire cet outil et d’écrire un plugin qui automatise tout cela, donc cela deviendra beaucoup plus facile 😉

Étant donné que vous demandez c-lightning, laissez-moi vous expliquer les options dont vous disposez:

Attendez et retransmettez

Si les frais ne sont pas trop bas et que le pair n’a pas encore abandonné, vous pourriez avoir une chance de toujours établir le canal, en confirmant la transaction de financement d’origine. Cela peut vous obliger à rediffuser la transaction de temps en temps lorsqu’elle sort du mempool. Pour ce faire, notez la transaction de financement qui a été retournée lors de l’appel de fundchannel ou récupérez-la dans la base de données en recherchant son identifiant:

Lightning Network : Un canal peut-il être fermé alors que le financement tx est toujours bloqué dans le mempool ?

CHANID = $ (listpeers éclair-cli [peer_id] | jq ‘.peers[].Identifiant de la chaine’)
sqlite3 $ HOME / .lightning / bitcoin / lightningd.sqlite3
« SELECT hex (rawtx) FROM transactions WHERE hex (id) LIKE ‘$ CHANID' »

Cela vous permettra d’obtenir le financement tx pour ce pair en particulier. Vous pouvez utiliser bitcoin-cli decoderawtransaction pour décoder les transactions et vérifier que le txid correspond au financement_txid dans la sortie de lightning-cli listpeers.

Vous pouvez ensuite rediffuser en utilisant les méthodes bitcoin-cli sendrawtransaction ou lightning-cli sendrawtransaction.

Je suggère d’attendre au moins pendant le week-end, car les frais baissent considérablement, ce qui augmente les chances de confirmation du tx de toute façon.

Double-dépenser la transaction de financement

Si vous avez besoin de fonds ailleurs ou si vous décidez que le canal ne vaut pas la peine d’attendre, vous pouvez également dépenser deux fois l’une des entrées et la transaction de financement ne pourra jamais être confirmée.

🚧 Notez que vous ne pourrez pas ouvrir un nouveau canal avec ce pair spécifique tant que les deux côtés n’auront pas abandonné, car du point de vue de c-lightning, cela peut encore arriver et nous devons être prêts si c’est le cas 🚧

Pour ce faire, recherchez la transaction de financement comme ci-dessus, puis utilisez ce qui suit pour répertorier les entrées de la transaction de financement:

décodage bitcoin-clitransaction [tx] | jq ‘.vin[] | [.txid, .vout]’

Ensuite, nous synchronisons le statut UTXO avec bitcoind, car nous avons marqué les sorties dépensées par la transaction de financement comme dépensées (notez que vous devez avoir compilé c-lightning avec DEVELOPER = 1 pour que cela soit disponible):

lightning-cli dev-rescan-sorties

Maintenant, choisissez un sous-ensemble des entrées et créez une nouvelle transaction, qui entre en collision avec la transaction de financement dans le but de la doubler:

lightning-cli utxopsbt satoshi = all feerate = poids de départ normal = 756 utxos =[« ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB:0 »]

Cela vous donne une transaction Bitcoin partiellement signée (PSBT), qui a une entrée ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB: 0 (correspondant au résultat des résultats de la transaction de décodage ci-dessus) et aucune sortie. Notez que le poids de départ est de 756sipa, ce qui correspond approximativement à la taille d’une transaction à entrée unique et à sortie unique que nous essayons de créer.

Ce n’est pas encore une transaction valide, nous devons donc ajouter une sortie qui retourne dans votre portefeuille. Pour ce faire, nous générons d’abord une adresse à envoyer à votre portefeuille:

foudre-cli newaddr

Et maintenant, nous devons modifier le PSBT pour inclure une sortie avec tous les fonds (moins les frais) allant à cette nouvelle adresse.

… mais nous n’avons pas encore d’outils en place pour éditer manuellement un PSBT, ou du moins je n’en connais aucun. Je suivrai une fois que nous aurons.