Que se passe-t-il réellement lorsque vous exécutez un swap dans le portefeuille Nimiq ?

Traduction de l’article publié en anglais sur le blog officiel de la team Nimiq

Un regard technique sur ce qui se passe sous le capot d’un Atomic Swap Nimiq.

Hey, bienvenue ! Alors que la sortie de Nimiq OASIS est imminente, avec la possibilité d’acheter et de vendre du NIM et du BTC, nous avons pensé qu’il serait intéressant pour les fans de Nimiq les plus férus de technologie d’apprendre comment le Swap dans le portefeuille Nimiq fonctionne réellement !

Que sont les « atomic swaps » et pourquoi en avons-nous besoin ? Les crypto-monnaies sont axées sur la décentralisation et la suppression des intermédiaires, l’objectif étant de pouvoir échanger de la valeur avec un parfait inconnu sans avoir à accorder sa confiance. Les blockchains publiques font un excellent travail en proposant des transactions entre n’importe qui sans qu’aucune confiance ne soit requise. Mais que se passe-t-il si vous voulez échanger un coin A contre un coin B ? Ou même échanger des coins contre autre chose, comme des euros ? En général, de nos jours, vous transférez vos coins sur un exchange et vous les « cash-out » contre des euros. Ou vous leur envoyez des euros par virement bancaire ou par carte de crédit pour acheter des crypto-monnaies. Mais lorsque vous faites cela, vous dépendez de leur service pour vous livrer la contre-valeur. S’ils changent d’avis, par exemple en exigeant des documents supplémentaires, ou s’il sont tout simplement piraté, vos fonds sont inaccessibles, voire disparaissent.

C’est là que les « atomic swaps » prouvent leur utilité! Ils vous permettent d’échanger deux actifs sans avoir à faire confiance à un intermédiaire pour gérer vos fonds et les échanger.

Ainsi, les deux actifs sont verrouillés sur leur chaîne respective – ou, s’il s’agit d’euros, dans une banque utilisant l’API OASIS – et sont ensuite échangés de manière atomique. Cela signifie qu’ils sont soit échangés soit retournés à leurs anciens propriétaires. Aucun autre résultat n’est possible. Cela rend le système très sûr, car même si quelque chose tourne mal, vous ne perdrez jamais vos fonds. C’est pourquoi les échanges atomiques (« Atomic Swaps ») sont si importants !

Vous vous demandez comment cela fonctionne concrètement ? Vous êtes au bon endroit ! Plongeons nous dans les profondeurs des détails techniques qui permettent de préparer et d’effectuer les « Atomic Swaps » dans le portefeuille Nimiq (« Nimiq Wallet »).

Étape 0 : Saisir les montants à échanger

La première chose que vous ferez lors d’un échange atomique avec Nimiq est de saisir le montant que vous souhaitez acheter ou vendre et laisser Fastspot – un fournisseur de liquidité au taux du marché pour les échanges atomiques – vous faire une offre.

Remarque à l’intention des développeurs : Fastspot offre un grand nombre d’options pour demander des estimations de swap. Vous pouvez spécifier le montant que vous voulez envoyer ou recevoir, et si vous voulez exclure ou inclure des frais dans cette estimation, ce qui permet à un portefeuille d’insérer ses propres calculs de frais de transaction par exemple. Les développeurs peuvent lire la documentation de l’API de Fastspot et utiliser la bibliothèque Typescript pour commencer.

Le wallet Nimiq respecte les frais minimums par octet suggérés par Fastspot pour les NIM et les BTC afin de garantir que les échanges seront effectués aussi rapidement et facilement que possible. Pour les NIM, ces frais sont généralement nuls, et pour les BTC, le portefeuille sait combien de vos UTXOs seront utilisés pour l’échange et calcule les frais de transaction en conséquence.

En outre, le portefeuille affiche le véritable taux d’échange dans l’interface, en affichant séparément tous les frais des deux côtés de l’échange.

Lorsque vous êtes satisfait des montants à échanger, vous cliquez sur le bouton « Confirmer » pour passer à l’étape suivante.

Étape 1 : Créer, vérifier et signer le swap

Pour valider un échange, il faut d’abord… en créer un ! En effet, nous n’avons pas encore lancé d’échange. Ce que nous avons obtenu jusqu’à présent est une estimation. Une estimation de Fastspot ne donne aucune garantie quant à la liquidité disponible ou à la possibilité d’échanger les actifs sélectionnés actuellement. Par exemple, l’actif EUR peut être désactivé pour des raisons de maintenance.

Pour commencer, nous devons dans un premier temps obtenir une cotation définitive qui garantit qu’un échange est réellement possible, et peut être exécuté. Le portefeuille demande un devis à Fastspot au moment où vous cliquez sur le bouton de confirmation. Les montants indiqués doivent être identiques ou très proches de l’estimation affichée précédemment.

Avec vos adresses de destination et de remboursement impliquées dans l’échange et les frais calculés pour vos transactions, le portefeuille transmet les détails de l’échange au Keyguard. Le Keyguard vous montrera les montants, le taux d’échange et les frais pour que vous puissiez vous assurer que tout est correct.

Nous arrivons maintenant à un détail important. Jusqu’à présent, l’échange n’a pas été confirmé à Fastspot. Qu’est-ce que cela signifie ? Cela signifie que rien ne s’est encore produit sur la blockchain pour cet échange. Cela signifie également que vos limites d’échange ne sont pas encore prises en compte et que l’annulation du processus ici, avant d’entrer votre mot de passe, n’a aucune conséquence. Cependant, le devis sur lequel l’échange est basé n’est valable que pendant environ 15 minutes, donc si vous ne confirmez pas votre mot de passe dans ce délai, vous devez recommencer.

Vous avez donc saisi votre mot de passe et confirmé votre intention de procéder à l’échange. Le Keyguard – techniquement parlant le Hub, mais pour cette explication nous pouvons considérer qu’il s’agit de la même chose – prend maintenant vos adresses de destination et de remboursement et les envoie à Fastspot pour confirmer l’offre. Alors, Fastspot génère et renvoie les détails du contrat qui sera utilisé pour cet échange. Pour les NIM et BTC, il s’agit de données binaires codant les règles du contrat respectif, et pour les EUR, il s’agit de l’ID d’un contrat OASIS.

Avant que le combo Keyguard-Hub signe effectivement vos transactions et les renvoie au portefeuille pour exécution, les détails du contrat que Fastspot vient de générer sont validés. Plusieurs vérifications sont faites: que ce soit bien vos adresses qui sont utilisées dans les données du contrat en tant qu’adresses du bénéficiaire et du remboursement, que le déverrouillage (unlock-hash) des deux contrats soit le même, que les dates d’expiration des contrats sont dans le bon ordre, etc. En bref, on vérifie que l’échange sera « atomic ». Ce n’est que si tous ces contrôles passent que le Keyguard signe les transactions et les renvoie au portefeuille.

Bon… [on laisse respirer le cerveau…] c’était long et un peu complexe. N’hésitez pas à revenir en arrière et à relire cette section. Nous espérons que cela a clarifié pourquoi ce processus est nécessaire à assurer un échange non-custodial sans besoin de confiance.

Maintenant que tout est prêt, nous pouvons passer à la partie « on-chain » proprement dite !

Étape 2 : attendre le contrat entrant

Récapitulons la situation dans laquelle nous nous trouvons. Le Keyguard vient de signer deux transactions – une pour financer un contrat et une pour racheter un contrat – il a également signé une troisième transaction de remboursement, nous y reviendrons plus tard. Pour l’instant, le portefeuille sait toujours de quel échange il s’agit, et il stocke les transactions car elles ne seront envoyées que dans les étapes suivantes. Il va ensuite récupérer la confirmation de l’échange (« confirmed swap object ») dans l’API Fastspot pour savoir quels contrats sont concernés par le swap et pour confirmer que le swap est toujours en cours. Pour les swaps impliquant des euros, le portefeuille récupère également l’EUR-HTLC, ainsi que les détails de son financement, directement depuis OASIS afin que la transmission correcte de ces informations ne dépende pas de Fastpot.

Important : Le secret

Un contrat HTLC comprend 2 parties: vérification du hash et vérification de la date d’expiration. Le « hash » est généré en encodant un « secret »: une figure ou un mot crée par une combinaison de bits. Le hash est incorporé au script du contrat, et permet donc d’authentifier la validité du contrat lorsque le « secret » est révélé.

Puisque Fastspot contrôle le « secret » du swap, il est également le premier à créer un contrat HTLC on-chain, c’est-à-dire le contrat qui verrouille la monnaie que vous allez recevoir. Nous devons attendre que ce contrat soit créé de manière irréversible. Pour le NIM, cela signifie attendre que la transaction de création soit minée dans un bloc, pour le BTC, il suffit que la transaction soit dans le mempool – avec le « replace-by-fee » désactivé – et pour l’euro, cela signifie qu’OASIS signale que le contrat est « cleared » – le langage FinTech pour « financé ».

Par l’intermédiaire d’une bibliothèque de swap -bientôt disponible pour d’autres projets sous forme de package -, le portefeuille surveille respectivement la blockchain ou l’API OASIS pour les critères mentionnés ci-dessus, en validant notamment que le montant, la propriété et l’expiration du contrat soient corrects.

Pour l’utilisateur, cette période d’attente se matérialise par l’affichage d’une pièce de puzzle dont le labyrinthe de lignes s’anime puis se remplit de couleurs.

Étape 3 : financer le contrat sortant

Une fois que le portefeuille est certain que Fastpot a respecté sa part du marché, le contrat engageant votre côté de l’échange est créé. Cela fonctionne de la même manière que pour Fastpot : le portefeuille diffuse simplement votre transaction de financement, que vous avez signée auparavant dans le Keyguard, sur la blockchain correspondante. Pour EUR, il affiche les détails de paiement que vous devez renseigner lors de l’envoi du virement « SEPA instantané » qui va financer le contrat OASIS. Encore une fois, nous devons attendre que le contrat soit créé de manière irrévocable, c’est-à-dire miné pour Nimiq, dans le mempool pour Bitcoin, et qu’il ait le statut « cleared » dans OASIS. Fastspot attend également cela.

Remarque : Il peut arriver que les frais de transaction BTC aient fortement augmenté entre le moment où le devis du swap a été créée et celui où votre transaction BTC est envoyée. Dans ce cas, Fastspot ne peut pas accepter votre transaction BTC juste parce qu’elle est dans le mempool. A la place, il exige que la transaction soit minée, ce qui, dans le réseau Bitcoin, peut prendre quelques minutes de plus.

Une fois que les deux pièces du puzzle sont entièrement remplies, les contrats sont prêts et la propriété des actifs peut être échangée.

Étape 4 : Échange atomique !

Dans les échanges atomiques, le changement de propriété se produit avec la publication du « secret » de l’échange. Vous vous souvenez que le portefeuille a vérifié à l’étape 1 que les deux contrats sont sécurisés par le même « unlock-hash » ? Il est maintenant essentiel qu’ils soient bien égaux. D’abord, Fastspot réclame le contrat que vous avez créé et transfère les fonds dans son propre portefeuille. Pour ce faire, Fastspot doit inclure le « secret » de l’échange – la clé de déverrouillage des contrats – dans cette transaction de réclamation ! Autrement dit, il doit présenter la clé pour pouvoir débloquer les fonds. Comme les blockchains concernées, ainsi que l’API OASIS, sont publiques, le portefeuille peut obtenir ce secret à partir de la transaction de Fastspot ou du contrat OASIS.

Remarque à l’intention des développeurs : En plus de surveiller la blockchain ou l’API OASIS sur laquelle le « secret » sera révélé, le portefeuille vérifie aussi périodiquement l’API Fastspot elle-même, où Fastspot révèle le « secret » une fois que le contrat est réclamé sur la chaîne.

Avec la connaissance du « secret » de l’échange, le portefeuille peut désormais réclamer vos fonds à l’autre contrat. Alors réclamons-les !

Etape 5: Réclamer le contrat entrant.

Vous avez déjà préparé la transaction de réclamation à la signature de la transaction de financement dans le Keyguard. Le « secret » d’échange ne fait pas partie des données de la transaction signée, donc ajouter le « secret » dans la transaction est toujours possible et ne l’invalide pas. Maintenant que la transaction – appelée instruction de règlement (« settlement instruction ») dans OASIS – est terminée, le portefeuille peut la diffuser sur le réseau concerné. Elle apparaît immédiatement dans votre historique de transactions comme une transaction entrante en attente, ce qui signifie que l’échange est terminé !

Remarque à l’intention des développeurs : Outre le fait que le portefeuille est à l’affût du « secret » de l’échange, Fastspot propose également un service de surveillance. Il s’agit d’un service qui prend votre transaction de réclamation pré-signée et surveille la progression de l’échange. S’il voit le « secret », il diffuse également votre transaction de réclamation. Il s’agit d’une solution de secours lorsque votre portefeuille perd sa connexion Internet, que votre ordinateur tombe en panne ou que vous fermez accidentellement votre navigateur. Cependant, il est important de se rappeler que cette sentinelle n’est pas une garantie, mais plutôt un garde-fou supplémentaire pour s’assurer qu’autant d’échanges que possible seront réussis, ce qui réduit le nombre d’échanges remboursés en raison de délais d’attente.

Étape 5b : Swaps expirés et remboursements automatiques

Mais que se passe-t-il lorsque le « secret » n’est jamais publié ? C’est alors que la partie timelock du contrat Hashed Timelock entre en jeu : après un temps prédéfini, dans notre cas une heure et demi, les contrats expirent, et les fonds sont automatiquement renvoyés aux propriétaires d’origine. Cela s’applique aux deux contrats, donc si, pour une raison quelconque, Fastspot « oublie » de récupérer ses fonds, les contrats expirent et vous récupérez votre part. Ils ne peuvent pas être perdus.

Remarque pour les développeurs : le contrat que vous financez se termine un peu avant celui que Fastspot crée. Ainsi, il est impossible que Fastspot réclame votre contrat, sans que vous n’ayez assez de temps pour réclamer l’autre. Malin, non ? 🙂

Conclusion

Qu’en pensez-vous ? Est-ce que vous comprenez mieux ce qui se passe sous le capot des « Atomic Swaps » du Nimiq Wallet ? Est-ce que cela a été instructif ou plutôt effrayant ? Avez-vous d’autres questions ? Faites-le nous savoir sur Twitter et Telegram, nous serons heureux de prolonger cet article de blog avec plus de détails et de clarifications !

A la prochaine ! Pura Vida !

Sören & Sven

DISCLAIMER: Aucune des déclarations ne doit être considérée comme une approbation ou une recommandation pour Nimiq, une crypto-monnaie ou un produit d'investissement. Ni les informations, ni les opinions contenues dans ce document ne constituent une sollicitation ou une offre par les créateurs ou participants d'acheter ou de vendre des titres ou d'autres instruments financiers ou de fournir des conseils ou des services d'investissement.