Dans un système de routage classique, Alice 100 000 -> 30 000 Susie 250 000 -> Bob 0, comment s’assurer qu’Eden ne triche pas et respecte bien sa part du contrat ?
HTLC – Hashed Time Locked Contract
HTLC est donc un contact de paiement où l’on peut déverrouiller uniquement avec un secret. S’il n’est pas dévoilé, alors le contrat expire. C’est donc un paiement conditionnel. Comment sont-ils utilisés ?
Si Bob est offline et ne relève jamais le secret qui lui donne la légitimité pour recevoir l’argent, dans ce cas le HTLC va expirer après un certain nombre de bloc.
Les HTLC expirent dans l’ordre du dernier au premier : donc expiration Susie – Bob puis Alice – Susie.
Comme ça, si Bob revient, ça ne change rien. Dans le cas contraire, si Alice annule alors que Bob revient, ce sera le bordel et des gens peuvent avoir travaillé pour rien.
Bon et alors, la question c’est : en cas de clôture, il se passe quoi ? En fait, nos transactions d’engagement sont encore plus complexes. Il faut représenter la balance intermédiaire si jamais le canal se fait fermer.
Il y a donc un HTLC-out de 40 000 satoshis (avec les limitations vues avant) dans la transaction d’engagement via un output n°3
Alice a donc dans la transaction d’engagement :
Out-put n°1 : 60 000 SAT pour Alice via un Timelock et clé de révocation (ce qui lui reste)
Out_put n°2 : 30 000 qui appartienne déjà à Susie
Out-put n°3 : 40 000 en HTLC
La transaction d’engagement d’Alice est avec un HTCL-out car elle envoie et Susie un HTLC-in car elle reçoit.
Donc si l’on publie cette transaction d’engagement, Susie peut récupérer l’argent du HTCL avec l’imagine « s ». Si elle n’a pas la préimage, Alice récupère l’argent une fois que le HTCL expire.
Pensez les out-put comme différents paiements avec différentes conditions.
Une fois le paiement passé (expiration ou exécution), l’état du canal change et la transaction avec HTCL n’existe plus. On retourne avec quelque chose de classique.
En cas de fermeture coopérative : on arrête les paiements et donc on attend l’exécution des transferts/HTCL, la transaction est légère donc moins chère car il y a maximum 1 ou 2 outputs.
Si fermeture forcée : on publie avec tous les HTLC en cours, ça devient donc très lourd et très coûteux. Et c’est le bordel.