StarkDEX en profondeur: Introduction
April 8th, 2022

Initialement publié en anglais par StarkWare le 13 Juin, 2019. Part 1 sur 4

La semaine dernière, nous avons publié la version alpha de StarkDEX sur un testnet Ethereum public, démontrant pour la première fois un système de couche 2 (Layer 2) basé sur STARK. Dans les semaines à venir, nous publierons une série d'articles de blog qui permettant de découvrir la technologie StarkDEX et expliqueront ses différents composants et mécanismes.

Dans cet article, le premier de la série, nous donnerons un aperçu de notre système et aborderons les flux d'utilisateurs et la mise en lots. Les prochains articles de la série porteront sur notre contrat et nos déclarations, la scalabilité STARK et la conception de la Représentation Intermédiaire Algébrique (AIR) pour les DEX.

Découverte de StarkDEX Alpha

StarkDEX permet aux échanges décentralisés d'évoluer en supprimant la limite imposée par le coût du règlement de chaque transaction sur la blockchain comme nous l'avons expliqué en détail dans notre précédent article.

L'économie importante provient de la réduction des opérations de calcul et de stockage sur la blockchain. Pour ce faire, nous déplaçons les données hors de la blockchain (off chain). L'idée principale est de stocker les soldes en utilisant un arbre de Merkle, où seule la racine de cet arbre de Merkle est stockée sur blockchain (on chain). Chaque opération dans l'échange se traduit par une transformation des terminaisons de l'arbre de Merkle. Nous prouvons ensuite au contrat StarkDEX qu'un grand lot d'opérations d'échange est valide (les fonds ne disparaissent pas et ne sont pas créés de toutes pièces, chaque transaction est signée numériquement par les deux contreparties, etc.) et que ces opérations sont cohérentes avec la modification de la racine de l'arbre de Merkle.

Fig 1 : le flux de données - les transactions deviennent des preuves

Pour garder la trace des soldes des utilisateurs, nous introduisons le concept de vault . Un vault représente les fonds d'un certain jeton qui appartiennent à un certain utilisateur. Par exemple, un vault peut contenir 1 ETH appartenant à l'utilisateur A, tandis qu'un deuxième vault peut contenir 3 DAI du même utilisateur. Chaque vault reçoit un identifiant unique de 31 bits et se compose de trois champs : la clé publique de l'utilisateur, le type de jeton et le solde de cet utilisateur.

Tous les vaults sont organisés en un arbre de Merkle. La racine de cet arbre de Merkle représente l'état complet de tous les soldes du système. Ainsi, il suffit de stocker cette racine sur la blockchain (on chain), au lieu de l'arbre complet, pour pouvoir vérifier les déclarations concernant n'importe quel solde. Chaque fois que les soldes des vaults hors de la blockchain (off chain) changent, la seule chose qui doit être enregistrée sur la blockchain est la nouvelle racine Merkle.

Principaux flux d'utilisateurs

Figure 2 : Le flux monétaire - comment les fonds sont déplacés
Figure 2 : Le flux monétaire - comment les fonds sont déplacés

Pour pouvoir négocier sur StarkDEX, l'utilisateur doit d'abord déposer ses fonds dans le contrat StarkDEX. Cela se fait par une simple transaction Ethereum, initiée par l'utilisateur, qui ajoute le dépôt de l'utilisateur à une structure de données appelée "solde de dépôt on chain". StarkDEX surveille cette structure de données et déplace le montant déposé de celle-ci vers le vault en dehors de la blockchain (off chain) correspondant, en calculant la nouvelle racine Merkle en conséquence.

Une fois les fonds enregistrés dans le vault off chain, l'utilisateur peut les utiliser pour négocier. Les différents exchanges peuvent utiliser différents mécanismes de correspondance pour faciliter les transactions, et cette partie est externe au système StarkDEX. Lorsqu'une transaction doit être réglée, les fonds des quatre vaults concernés (une seule transaction signifie que deux traders modifient deux actifs chacun) sont mis à jour et la nouvelle racine Merkle est calculée en conséquence. Pour garantir que cette opération est effectuée avec l'approbation des utilisateurs, ceux-ci doivent signer les ordres. Actuellement, StarkDEX fonctionne selon le modèle du faiseur et du preneur - le faiseur crée un ordre signé, composé des types de jetons à échanger, des montants et de leurs deux ID de vault. Pour effectuer une transaction, le preneur signe le hachage de cet ordre et ses deux identifiants de vault (l'exécution partielle des ordres n'est pas prise en charge par la version alpha de StarkDEX, mais elle sera ajoutée dans la prochaine version).

Lorsque l'utilisateur souhaite utiliser les fonds en dehors de StarkDEX, il demande à l’exhange de retirer une certaine quantité de jetons. Cela se traduit par une réduction du solde du vault off chain (en calculant la nouvelle racine Merkle en conséquence) et une augmentation du "solde de retrait on chain". L'utilisateur peut maintenant retirer les fonds directement du contrat StarkDEX.

Notez que le montant total de jetons qu'un utilisateur possède est la somme de son vault off chain et de ses deux soldes sur la blockchain (dépôt et retrait).

Tout au long de ces flux, l'utilisateur conserve toujours la garde de ses fonds - ils ne peuvent pas être déplacés vers une adresse différente sans la signature explicite de l'utilisateur. Dans des circonstances normales, l'utilisateur a besoin de l'exchange pour retirer des fonds. Cela peut être problématique si l'exchange est compromis, car les fonds de l'utilisateur peuvent être bloqués dans le système (mais notez que même dans ce scénario malheureux, les fonds ne peuvent pas être volés). Pour permettre à l'utilisateur de retirer ses fonds, même dans ce cas extrême, nous introduisons le mécanisme de "trappe de secours" (non pris en charge par la version alpha de StarkDEX, mais qui sera ajouté dans la prochaine version). Pour activer ce mécanisme, l'utilisateur invoque un "retrait total" sur le contrat StarkDEX. Cela oblige le système StarkDEX à libérer les fonds (dans le solde de retrait on chain, d'où l'utilisateur peut retirer les fonds) dans un certain délai. Si le système ne le fait pas, le contrat est gelé - tout règlement futur sera rejeté, gelant l'arbre de Merkle du vault off chain. À partir de ce moment, l'utilisateur peut retirer directement des fonds du contrat en prouvant le chemin d'authentification Merkle de son vault off chain.

Mise en lots

Les preuves STARK permettent une vérification peu coûteuse sur la blockchain d'opérations complexes qui ont été effectuées off chain. Pour maximiser le gain de ce mécanisme, le système StarkDEX regroupe un grand nombre de transactions en une seule preuve. Comme le coût de vérification d'une preuve STARK est presque indépendant de la taille du lot, cela permet de réaliser des économies d'échelle convaincantes : plus le débit est élevé, plus le coût en gaz d'une seule transaction est faible, ce qui permet un débit presque illimité, malgré la limite en gaz d'Ethereum.

Chaque preuve StarkDEX contient un grand nombre de transactions de trois types différents :

  1. Le règlement des transactions.
  2. Dépôt - déplacement de fonds du solde de dépôt on-chain vers le vault off-chain.
  3. Retrait - déplacement de fonds du vault off chain vers le solde de retrait on chain.

La raison pour laquelle StarkDEX utilise des soldes on-chain en plus des vault off-chain est que seul l'utilisateur peut déplacer des fonds de son portefeuille, et ces fonds sont initialement transférés en utilisant une transaction Ethereum régulière, qui ne peut pas modifier les données off-chain. Une fois que les fonds sont dans le contrat, le système StarkDEX peut les déplacer off chain.

Ceci conclut notre présentation de StarkDEX. Dans le prochain article de blog, nous décrirons plus en détail nos contrats et nos déclarations. Si vous avez des questions ou des suggestions, veuillez commenter ici ou nous parler sur Twitter @StarkWareLtd.

Lior Goldberg & Oren Katz
StarkWare

Traduction faite par Valentin

Arweave TX
rvZEyCOfoeLSU782uetp06jCP4JFd82r8jl4gPot1aE
Ethereum Address
0x5046e56Ff40952036a7A55A49A19b1d4E32A9021
Content Digest
w9K3fu95EsMmMOTBDCSv1rC0BKfT5IUUT3agbDBPuM0