fbpx Comment créer un exchange décentralisé sur la Blockchain Ethereum et pourquoi ? | Développeur Blockchain France

Comment créer un exchange décentralisé sur la Blockchain Ethereum et pourquoi ?

Posté par Vincent Ton le octobre 22, 2019 dans Formation Développeur Blockchain
Card Image

Créer un exchange décentralisé semble compliqué pour vous ?

Comment créer un exchange décentralisé en 5 étapes

Vous ou votre entreprise souhaite mettre en place un crypto exchange, mais vous ne savez pas par où commencer ?

Rassurez-vous, c’est normal. Créer un EXchange Décentralisé ou DEX demande beaucoup de temps et des connaissances poussées en Solidity. La bonne nouvelle, c’est qu’en lisant cet article, vous allez découvrir les grandes lignes pour développer un prototype d’exchange décentralisé.

Dans cet article, on va voir comment créer un DEX qui permet de faire un échange entre l’ether et un token de type ERC20. On va créer le pair ETH/TDEX (pour Token Decentralized EXchange).

Et si vous voulez le code pour créer un DEX, cliquez sur le bouton ci-dessous et je vous enverrai le script.

Pourquoi créer un exchange décentralisé ?

Créer un exchange décentralisé commence donc par la création d’un smart-contract avec Solidity.

Si vous ne savez pas créer un smart-contract, je vous renvoie à la partie « créer un smart-contract de type HelloWorld » … ou vous pouvez m’appeler ici :

Si vous lisez cet article et que vous ne savez pas ce qu’est un exchange décentralisé ou un DEX, voici la définition : Un exchange décentralisé ou DEX est une plateforme d’échange de cryptomonnaie fonctionnant de manière décentralisée, c’est-à-dire sans autorité centrale.

Les principaux DEX sont : ForkDelta (le fork de EtherDelta), IDEX ou KyberNetwork.

logo de forkdelta, un DEX

Si vous n’avez jamais entendu de ces plateformes d’échange, c’est normal.

Habituellement, pour acheter des cryptomonnaies, on échange de l’euro avec du bitcoin en passant par Kraken. Seulement, Kraken ou Binance sont des crypto exchange centralisés ! Ces plateformes sont utilisées par un grand nombre et il est possible d’échanger de la monnaie fiduciaire avec un cryptomonnaie. Ce qui n’est pas possible (à l’heure actuelle) avec un DEX.

Vous vous demandez si cela vaut la peine de faire autant d’effort pour réaliser un crypto exchange. Alors voici 4 raisons fortes qui vont vous convaincre de créer votre propre exchange décentralisé.

Raison 1 : Les DEX sont plus sécurisants

Les plateformes les plus connus comme Kraken, Binance ou Coinbase sont centralisés. C’est l’entreprise qui gère les fonds monétaires. Et ils sont même propriétaires des portefeuilles en cryptomonnaies.

Ce qui fait une cible privilégiée pour les hackers.

Avez-vous déjà entendu l’histoire de Mt. Gox ? C’était un bitcoin exchange centralisé qui s’est fait pirater en 2014. Les Hackers ont dérobé plus de 850000 bitcoin, ce qui faisait plus de 450 Million de dollars à l’époque (et bien plus aujourd’hui). Mt. Gox est aujourd’hui mort.

Et la peur principale de Kraken, Binance ou Coinbase c’est d’avoir le même destin que Mt. Gox.

Un exchange décentralisé réduit le risque de piratage car pour pirater un DEX, il faut pirater la Blockchain. Ce qui est difficile car il faut beaucoup de puissance de calcul pour pirater l’ethereum (attaque 51%).

Et c’est pourquoi Binance s’intéresse à la création d’un DEX.

Raison 2 : Les DEX empêchent les manipulations des prix

Avec un exchange centralisé, l’entreprise peut par malhonnêteté créer des faux ordres d’achat ou de vente, privilégier un ordre d’achat parmi d’autre. Et même geler les comptes, empêchant les utilisateurs de récupérer de l’argent.

En théorie, un DEX ne pourra pas faire des opérations malhonnêtes, du fait de sa décentralisation. Maintenant, il y a des DEX qui ne sont pas complètement décentralisés. Mais les principaux DEX (ForkDelta, IDEX) font des efforts pour viser le 100% de décentralisation.

Raison 3 : Une opportunité de marché sur les DEX

Aujourd’hui, seulement 1% des transactions des cryptomonnaies passent par des exchanges décentralisés. La plupart se concentre sur les exchanges centralisés.

La raison, c’est parce que les DEX sont peu connus du grand public. Il n’y a pas d’action marketing qui a été faite sur les DEX.

Pourtant, les avantages sont nombreux pour que les utilisateurs passent de Kraken à un DEX.

Et le premier qui arrive à créer un DEX dont l’interface est claire avec une bonne expérience utilisateur a gagné. Il prendra beaucoup de part de marché et donc gagnera beaucoup d’argent.

D’ailleurs, des acteurs comme Binance ou même John McAfee sont en train de développer leur exchange décentralisé.

Il y a bien sûr des obstacles, le principal étant le manque de liquidité sur les DEX du fait qu’il n’y a que peu d’utilisateurs. Mais la raison 4 va vous convaincre pour créer un DEX.

Raison 4 : La technologie est presque prête pour répondre au manque de liquidité des exchanges décentralisés

Comme il y a un manque de liquidité sur les exchanges décentralisés, les ordres d’achat ou de vente peuvent prendre du temps à se valider. Voire même ne jamais aboutir.

Cependant, des développeurs ont déjà identifié ce problème de liquidité et il existe des solutions face aux manques de liquidité. Une des solutions est d’utiliser le protocole 0x.

Le protocole 0x permet de gérer les ordres d’achats et de ventes via un relai, ce qui fluidifie les transactions. Nous verrons le fonctionnement de ce protocole dans un prochain article, et comment mettre en place un relai.

Maintenant que vous avez vu pourquoi créer un exchange décentralisé, il est temps pour moi de partager tout ce que je sais sur la création d’un exchange décentralisé.

Vous allez découvrir les 5 étapes à suivre pour créer un exchange décentralisé sur la Blockchain Ethereum.

Comment créer un exchange décentralisé concrètement ?

Le but de cet article est de vous donner les grandes lignes pour créer votre prototype de DEX. L’exchange décentralisé que vous allez créer permettra d’échanger la paire ETH / TDEX.

Le TDEX est un token de type ERC20 que vous allez créer d’ici peu. Mais tout d’abord, commençons par installer les logiciels nécessaires pour tout développeurs Blockchain.

Etape 1 : Mettre en place votre environnement de travail

Node.js

Nous allons tout d’abord installer node.js (https://nodejs.org/en/). En installant node.js, vous allez obtenir la commande npm. Cette commande permet de gérer les dépendances.

(Définition donnée par java.developpez.com : Une dépendance est une référence vers un artefact spécifique contenu dans un repository. Cet artefact est nécessaire pour une ou plusieurs phases du cycle de vie du projet.)

En utilisant la commande npm, vous allez créer un fichier appelé package.json. C’est ce fichier qui permet de gérer les dépendances.

Metamask

Ensuite, vous allez installer metamask sur votre navigateur Chrome ou Mozilla. C’est un plugin qui permet de faire le lien entre la partie visible (ou front-end) de votre exchange décentralisée et la Blockchain Ethereum.

Grâce à Metamask, les utilisateurs peuvent, en payant les frais de transactions (les gas) :
– s’inscrire à l’exchange décentralisée
– passer des ordres d’achats ou de vente

Ganache

Puis, vous pouvez installer les outils de Truffle suite. D’abord Ganache, qui va vous installer un blockchain « ethereum-like » sur votre ordinateur.

C’est idéal pour créer votre code et réaliser les tests unitaires de votre smart-contract.

Truffle

Et enfin vous allez installer truffle en utilisant la commande ci-dessous dans votre terminal :

$ npm install truffle -g

Truffle est un outil qui facilite la vie des développeurs Blockchain. En installant Truffle, vous allez obtenir plusieurs dossiers :

  • contracts/ : le dossier permettant d’écrire les smart-contracts via Solidity
  • migration/ : le dossier qui permet de créer des scripts pour déployer les smart-contracts
  • test/ : un dossier réservé aux tests unitaires
  • truffle.js ou truffle-config.js : c’est un fichier qui permet de gérer la partie configuration de votre projet. C’est dans ce fichier que vous allez dire où déployer votre smart-contract.
Les dossiers créés via Truffle

Dans le dossier contracts : créez les fichiers Token.sol et Exchange.sol.
Dans le dossier migration, il y a un fichier : 2_deploy_contracts.js. Rentrez le code suivant :

const Token = artifacts.require("Token");
const Exchange = artifacts.require("Exchange");

module.exports = async function(deployer) {
    const accounts = await web3.eth.getAccounts();

    await deployer.deploy(Token);

    const feeAccount = accounts[0];
    const feePercent = 10;

    await deployer.deploy(Exchange, feeAccount, feePercent)
};

Dans le dossier test : créez Exchange.test.js et Token.test.js

Et dans le fichier truffle.js (pour mac) ou truffle-config.js (pour windows), renseignez le réseau que vous allez utiliser. Ici, ce sera Ganache que vous allez utiliser.

networks: {
     development: {
        host: "127.0.0.1",
        port: 7545,
        network_id: "*", //match any network id
    },
},

Une fois que ces outils sont installés et les fichiers créés, il est temps pour vous de créer un Token de type ERC20.

Étape 2 : Créer un Token de type ERC20

Vous allez tout d’abord modifier le fichier : Token.sol

Nous allons créer un token qui a les caractérisques suivant :
– nom (name) : Token Decentralized EXchange
– symbole (symbol) : TDEX
– Décimal (decimals) : 18
– Quantité (totalSupply) : 1 Million (dans le code, n’oubliez pas de multipliez le 1 million avec les décimals)

Pour créer un Token, nous allons utiliser le standard ERC20.

ERC20 est un document qui définit les règles et les événements que doivent avoir un Token. Je vous invite à lire ce document pour connaître les règles et les événements qui doivent apparaître dans le smart-contract : https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md

Voici les fonctions que doivent avoir un Token pour être qualifié d’ERC20 :

  • name : fonction permettant de renvoyer le nom du Token
  • symbol : fonction permettant de renvoyer le symbole du Token. Par exemple : OMG est le symbole du token OmiseGo. Appelons : TDEX (pour Token Decentralized EXchange)
  • decimals : cette fonction permet de définir le nombre de 0 derrière la virgule. Par exemple, 1 ether contient 18 zéro dérrière la virgule
  • totalSupply : le nombre total de Token existant
  • balanceOf : c’est une fonction qui renvoie le nombre de tokens détenu par une adresse
  • transfer : fonction permettant à une adresse qui possède déjà des tokens d’en envoyer à une autre adresse. Cette fonction doit déclencher l’événement (ou event) Transfer
  • transferFrom : similaire à transfer, avec une petite différence : l’adresse qui envoie la transaction avec transferFrom n’est pas forcément l’adresse détenteuse du Token. Cette fonction doit déclencher l’événement (ou event) Transfer
  • approve : une fonction qui permet au propriétaire du smart-contract d’approuver un retrait pour un montant déterminé par un compte précis. Cette fonction doit déclencher l’événement (ou event) Approval.
  • allowance : renvoie la quantité de tokens qu’une adresse est autorisée à retirer par rapport à l’adresse propriétaire du smart-contract

Et les 2 événements à mettre dans le smart-contract sont :

  • Transfer : événement qui se déclenche lorsque les Tokens sont transférés avec la fonction transfer ou transferFrom. N’oubliez pas le T majuscule (car c’est un event)
  • Approval : événement qui se déclenche lorsque la fonction approve est utilisée.

Vous pouvez utiliser OpenZeppelin pour créer rapidement un Token de type ERC20 (futur article).
Ou vous pouvez le créer à la main, en renseignant un par un les fonctions et les événements sur votre code.

À noter : dans le dossier test, il y a le fichier Token.test.js qui permet de faire des tests unitaires. Je vais parler dans un prochain article tout ce qui est test unitaire. C’est une étape importante pour tout projet Blockchain qui se respecte. Mais en gros, vous pouvez utiliser MochaJS et ChaiJS pour réaliser les tests unitaires.

Étape 3 : Créer les fonctionnalités de l’exchange décentralisée

Maintenant que vous avez créé le Token, il est temps d’attaquer à un gros morceau.

Mais d’abord, revenons aux fondamentaux : imaginez que vous souhaitez faire du trading sur le couple ETH/TDEX. Quelles fonctions doivent avoir votre exchange décentralisé ?

deposit, withdraw, makeOrder, fillOrder, cancelOrder sont les fonctions qu’on utilisera dans le smart-contract.

Prenez un stylo et une feuille de papier pour imaginer le comportement d’une plateforme d’échange de cryptomonnaies.

Voici les principales fonctions que je vois :

  • Déposer de l’ether sur l’exchange
  • Retirer de l’ether depuis l’exchange
  • Déposer du Token sur l’exchange
  • Retirer du Token depuis l’exchange
  • Renvoyer le nombre de l’ether ou du token détenu par un compte (balanceOf)
  • Passer les ordres (makeOrder)
  • Annuler les ordres (cancelOrder)
  • Exécuter les ordres (fillOrder)

Vous pouvez télécharger le script détaillant les fonctionnalités d’un exchange décentralisé en cliquant ci-dessous (bouton).

À noter : dans le dossier test, il y a le fichier Exchange.test.js qui permet de faire des tests unitaires. Même remarque que pour Token.test.js, je vais créer un article pour montrer comment faire des tests unitaires.

Maintenant que vous avez créés les smart-contracts pour le Token et pour l’exchange décentralisé, vous pouvez maintenant réaliser l’interface de l’exchange décentralisé.

Étape 4 : Réaliser l’interface de l’exchange décentralisé

Tout d’abord, il faut lier les smart-contracts à l’interface graphique. Pour cela, Metamask permet de créer le pont entre la Blockchain et la partie cliente de votre DEX.

Pour mettre en place Metamask, vous devez mettre le bout de code dans le fichier App.js

async loadBlockchainData(dispatch) {
    const web3 = loadWeb3(dispatch)
    await web3.eth.net.getNetworkType()
    const networkId = await web3.eth.net.getId()
    await loadAccount(web3, dispatch)
    const token = await loadToken(web3, networkId, dispatch)
    if(!token) {
        window.alert('Token smart contract not detected on the current network. Please select another network with Metamask.')
        return
    }
    loadExchange(web3, networkId, dispatch)
}

Ce code va forcer les visiteurs à installer Metamask. S’ils ont installé Metamask et s’il y a un message d’erreur, les utilisateurs doivent choisir le bon réseau.

Vous pouvez faire l’interface en utilisant React.JS. Pour gérer la partie graphique de l’interface, on peut utiliser : react-apexcharts.

Une fois que la partie cliente fonctionne bien, il est temps de faire la transition Ganache <=> Ethereum (le vrai !). En résumé, vous allez déployer l’exchange décentralisé sur la Blockchain Ethereum.

Étape 5 : Déployer le DEX sur la Blockchain Ethereum.

Dans cette partie, vous allez voir comment mettre son projet sur la Blockchain Ethereum. On va choisir un réseau de test, ici le réseau Kovan.

Pourquoi utiliser les réseaux de tests ? (futur articles)

Tout d’abord, vous allez demander de l’ether gratuit sur : https://gitter.im/kovan-testnet/faucet

Une fois que vous avez obtenu de l’ether sur votre adresse, il est temps de déployer votre DEX sur le réseau de test Kovan.

Pour cela, il faut modifier le fichier truffle-config.js. Vous pouvez regarder le code sur ce site

Ensuite, avec le terminal, faites la commande :

truffle migrate –network kovan

Voilà, c’est fini !

Conclusion :

Si créer un exchange décentralisé vous effraie, rappelez-vous de ces 5 étapes :

  • Étape 1 : Je mets en place mon environnement de travail
  • Étape 2 : Je crée un Token de type ERC20, permettant ainsi d’échanger avec de l’ether
  • Étape 3 : Je crée un smart-contract qui décrit les fonctionnalités de l’exchange décentralisé
  • Étape 4 : Je crée l’interface du DEX avec React (en n’oubliant pas Metamask)
  • Étape 5 : Je déploie l’exchange décentralisée sur le réseau de test Kovan.

Alors oui, créer une exchange décentralisé est long. Mais si vous voulez participer à la création d’une nouvelle économie (basée sur la décentralisation), créer un exchange décentralisé est une bonne idée.

Et si vous suivez les 5 étapes, vous êtes sur le bon chemin pour créer un exchange décentralisé. Pour cela, je vous invite à réaliser la première étape le plus vite possible.

Laisser un commentaire

Your email address will not be published. All fields are required.