Tutoriel Compound – Emprunt de cryptomonnaies

Le développement du protocole Compound a commencé en 2017. Ce marché monétaire destiné à la finance décentralisée permet aux utilisateurs et aux applications de gagner des intérêts ou d’emprunter des actifs Ethereum sans intermédiaire autre que le protocole en question.

Voici un tutoriel expliquant comment emprunter du DAI. Le token d’entrée étant l’ETH (collatéral) et celui de sortie le DAI. Le collatéral doit être supérieur à 75% de la somme empruntée.

Détails techniques importants : Ce tutoriel est codé en JavaScript sur une machine Ubuntu. Rappelons que ce développement est effectué 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 noeud Kovan d’Ethereum fourni par Infura.

2. Récupération des ABI des différents smart contracts

var abi_cETH = [ … ];
var abi_DAI = [ … ];
var abi_cDAI = [ … ];

Récupérons l’ABI du smart contract cETH ici, celle du DAI ici, ainsi que celle du cDAI 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 des instances des smart contracts

var cETH = new web3.eth.Contract(abi_cETH,'0xf92fbe0d3c0dcdae407923b2ac17ec223b1084e4');
var DAI = new web3.eth.Contract(abi_DAI,'0x4f96fe3b7a6cf9725f59d353f723c1bdb64ca6aa')
var cDAI = new web3.eth.Contract(abi_cDAI,'0xe7bc397dbd069fc7d0109c0636d06888bb50668c');

Créons une instance pour chaque smart contract avec son ABI et son adresse sur le réseau Kovan.

5. Mise en place du collatéral

var gasEstimate = await cETH.methods.mint().estimateGas({from:wallet.address,value:500000000000000000});
var mint = await cETH.methods.mint().send({from:wallet.address,gas:gasEstimate,value:500000000000000000});

La variable gasEstimate représente le gas qu’il faut fournir pour la transaction à venir.
La fonction mint lance la transaction sur la Blockchain. Celle-ci envoie un montant de 0.5 ETH afin de récupérer l’équivalent en cETH. Les intérêts sont alors touchés en temps réel, selon le taux actuel. Le collatéral est alors mis en place.

6. Mise en place de l’emprunt

var amount ='10000000000000000000';
var uint256Amount = web3.eth.abi.encodeParameter('uint256',amount);
var borrow = await cDAI.methods.borrow(uint256Amount).send({from:wallet.address,gasLimit:web3.utils.toHex(600000),gasPrice:web3.utils.toHex(20000000000)});

La variable amount est le nombre de DAI que je veux emprunter (ici 10 DAI).
Encodons cette variable en uint256 à travers uint256Amount.
La fonction borrow prend en paramètre le montant de DAI voulu.

7. Remboursement de l’emprunt

var repayBorrow = await cDAI.methods.repayBorrow(uint256Amount).send({from:wallet.address,gasLimit:web3.utils.toHex(600000),gasPrice:web3.utils.toHex(20000000000)});

Ici, nous remboursons l’intégralité de notre emprunt en DAI, à travers la fonction repayBorrow, c’est à dire le montant initialement emprunter avec le taux d’emprunt ajouté.

Intégralité du code

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

var abi_cETH = [ … ];
var abi_DAI = [ … ];
var abi_cDAI = [ … ];

async function run() {
    
    var wallet = await web3.eth.accounts.wallet.add('0x87214a3bad248a1e82e0a86a107bdb020d740e9d3ce4f8c64b025f0f1e60adcd');
    console.log('Adresse de mon Wallet : ' + wallet.address);

    var cETH = new web3.eth.Contract(abi_cETH,'0xf92fbe0d3c0dcdae407923b2ac17ec223b1084e4');
    var DAI = new web3.eth.Contract(abi_DAI,'0x4f96fe3b7a6cf9725f59d353f723c1bdb64ca6aa');
    var cDAI = new web3.eth.Contract(abi_cDAI,'0xe7bc397dbd069fc7d0109c0636d06888bb50668c');

    var balance = await web3.eth.getBalance(wallet.address);
    var balance_cETH = await cETH.methods.balanceOf(wallet.address).call();
    var balance_DAI = await DAI.methods.balanceOf(wallet.address).call();
    console.log('\nSOLDE AVANT TRANSACTIONS :\n')
    console.log('Solde ETH = ' + balance);
    console.log('Solde cETH = ' + balance_cETH);
    console.log('Solde DAI = ' + balance_DAI);

    var gasEstimate = await cETH.methods.mint().estimateGas({from:wallet.address,value:500000000000000000});
    var mint = await cETH.methods.mint().send({from:wallet.address,gas:gasEstimate,value:500000000000000000});

    var amount ='10000000000000000000';
    var uint256Amount = web3.eth.abi.encodeParameter('uint256',amount);
    var borrow = await cDAI.methods.borrow(uint256Amount).send({from:wallet.address,gasLimit:web3.utils.toHex(600000),gasPrice:web3.utils.toHex(20000000000)});
   
    console.log('\nSOLDE APRES EMPRUNT :\n');
    
    var balance = await web3.eth.getBalance(wallet.address);
    var balance_cETH = await cETH.methods.balanceOf(wallet.address).call();
    var balance_DAI = await DAI.methods.balanceOf(wallet.address).call();
    console.log('Solde ETH = ' + balance);
    console.log('Solde cETH = ' + balance_cETH);
    console.log('Solde DAI = ' + balance_DAI);

    var amount = balance_DAI;
    var uint256Amount = web3.eth.abi.encodeParameter('uint256',amount);
    var repayBorrow = await cDAI.methods.repayBorrow(uint256Amount).send({from:wallet.address,gasLimit:web3.utils.toHex(600000),gasPrice:web3.utils.toHex(20000000000)});

	console.log('\nSOLDE APRES REMBOURSEMENT EMPRUNT :\n');
    
    var balance = await web3.eth.getBalance(wallet.address);
    var balance_cETH = await cETH.methods.balanceOf(wallet.address).call();
    var balance_DAI = await DAI.methods.balanceOf(wallet.address).call();
    console.log('Solde ETH = ' + balance);
    console.log('Solde cETH = ' + balance_cETH);
    console.log('Solde DAI = ' + balance_DAI);
}
run();
Thème : Overlay par Kaira. © Copyright 2020. Tous droits réservés.
Paris, France