Tutoriel Kyber – Création d’un échange décentralisé

Apparu en 2017, le réseau Kyber est un projet basé sur le protocole Ethereum qui cherche à décentraliser complètement l’échange sans confiance de cryptomonnaies sur la blockchain. Grâce au réseau Kyber, les utilisateurs devraient être en mesure de convertir ou d’échanger instantanément n’importe quelle cryptomonnaie.

Voici un tutoriel permettant de mettre en place un échange décentralisé minimaliste. En effet, il permettra uniquement d’échanger la paire ETH/MANA. Le token d’entrée étant l’ETH et celui de sortie le MANA.

Détails techniques importants : Ce tutoriel est codé en JavaScript sur une machine Ubuntu. Rappelons que ce développement s’effectue au sein du réseau Kovan d’Ethereum (Testnet).

1. Mise en place de Web3

var Web3 = require('web3');
var url = 'https://kovan.infura.io/v3/1ddecb8f28c94eab8d84230e8d109bdd';
var web3 = new Web3(url);

Ajoutons la bibliothèque Web3 à notre script que nous faisons interagir avec un nœud Kovan d’Ethereum qui nous est fourni par Infura.

2. Récupération de l’ABI du smart contract Kyber Network Proxy

var abi_KNP = [ ... ];

Récupérons l’ABI du smart contract Kyber Network Proxy ici.

3. Mise en place d’un wallet

var wallet = await web3.eth.accounts.wallet.add('0x87214a3bad248a1e82e0a86a107bdb020d740e9d3ce4f8c64b025f0f1e60adcd');

Ajoutons un wallet existant, alimenté auparavant grâce à un faucet Kovan.

4. Création de l’instance du smart contract Kyber Network Proxy

var KyberNetworkProxy = new web3.eth.Contract(abi_KNP,'0x692f391bCc85cefCe8C237C01e1f636BbD70EA4D');

Créons une instance du smart contract Kyber Network Proxy avec son ABI et son adresse sur le réseau Kovan.

5. Mise en place de la transaction

var amount ='10000000000000000';
var uint256Amount = web3.eth.abi.encodeParameter('uint256',amount);
var rates = await KyberNetworkProxy.methods.getExpectedRate('0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee','0xcb78b457c1F79a06091EAe744aA81dc75Ecb1183',uint256Amount).call();
var gasEstimated = await KyberNetworkProxy.methods.swapEtherToToken('0xcb78b457c1F79a06091EAe744aA81dc75Ecb1183',rates.slippageRate).estimateGas({from:wallet.address,value:10000000000000000});

La variable amount représente le nombre de WEI que nous voulons échanger.
La variable uint256Amount représente la variable amount codé en uint256.
La variable rates récupère le taux de glissement (slippage rate, en anglais), c’est à dire la valeur d’emprunt conseillé afin d’éviter les possibles problèmes lors du change.
La variable gasEstimated représente le gas qu’il faut fournir pour la transaction à venir.

6. Déploiement de la transaction

var trade = await KyberNetworkProxy.methods.swapEtherToToken('0xcb78b457c1F79a06091EAe744aA81dc75Ecb1183',rates.slippageRate).send({from:wallet.address,gas:gasEstimated,value:10000000000000000});

Cette fonction lance la transaction sur la Blockchain. Celle-ci envoie un montant de 0.01 ETH afin de récupérer l’équivalent en MANA.

7. Vérification sur kovan.etherscan.io

Récupérons l’adresse de notre Wallet (0x102fFcdc8E00A259695b4E243c9724435aD625bB) que nous recherchons
sur kovan.etherscan.io. Nous pouvons alors constater que la transaction a bien été effectuée.

Intégralité du code

var Web3 = require('web3');
var url = 'https://kovan.infura.io/v3/1ddecb8f28c94eab8d84230e8d109bdd';
var web3 = new Web3(url);

var abi_KNP = [ ... ];

async function run() {

	var wallet = await web3.eth.accounts.wallet.add('0x87214a3bad248a1e82e0a86a107bdb020d740e9d3ce4f8c64b025f0f1e60adcd');
    var balance = await web3.eth.getBalance(wallet.address);
    console.log('Adresse de mon Wallet : ' + wallet.address);
    console.log('Solde avant l échange (en WEI) : ' + balance);

	var KyberNetworkProxy = new web3.eth.Contract(abi_KNP,'0x692f391bCc85cefCe8C237C01e1f636BbD70EA4D');

	var amount ='10000000000000000';
    var uint256Amount = web3.eth.abi.encodeParameter('uint256',amount);
	var rates = await KyberNetworkProxy.methods.getExpectedRate('0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee','0xcb78b457c1F79a06091EAe744aA81dc75Ecb1183',uint256Amount).call();
	var gasEstimated = await KyberNetworkProxy.methods.swapEtherToToken('0xcb78b457c1F79a06091EAe744aA81dc75Ecb1183',rates.slippageRate).estimateGas({from:wallet.address,value:10000000000000000});
	
	var trade = await KyberNetworkProxy.methods.swapEtherToToken('0xcb78b457c1F79a06091EAe744aA81dc75Ecb1183',rates.slippageRate).send({from:wallet.address,gas:gasEstimated,value:10000000000000000});

	var balance = await web3.eth.getBalance(wallet.address);
	console.log('Solde après l échange (en WEI) : ' + balance);
}
run();
Thème : Overlay par Kaira. © Copyright 2020. Tous droits réservés.
Paris, France