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 toucher des intérêts lors d’un dépôt d’ETH. Le token d’entrée étant l’ETH et celui de sortie le cETH.
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 de l’ABI du smart contract cETH
var abi_cETH = [ … ];
Récupérons l’ABI du smart contract cETH 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 cETH
var cETH = new web3.eth.Contract(abi_cETH,'0xf92fbe0d3c0dcdae407923b2ac17ec223b1084e4');
Créons une instance du smart contract cETH avec son ABI et son adresse sur le réseau Kovan.
5. Mise en place de la transaction
var gasEstimate = await cETH.methods.mint().estimateGas({from:wallet.address,value:100000000000000000});
La variable gasEstimate représente le gas qu’il faut fournir pour la transaction à venir.
6. Déploiement de la transaction
var transaction = await cETH.methods.mint().send({from:wallet.address,gas:gasEstimate,value:100000000000000000});
Cette fonction lance la transaction sur la Blockchain. Celle-ci envoie un montant de 0.1 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.
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_cETH = [ … ];
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 prêt (en WEI) : ' + balance);
var cETH = new web3.eth.Contract(abi_cETH,'0xf92fbe0d3c0dcdae407923b2ac17ec223b1084e4');
var gasEstimate = await cETH.methods.mint().estimateGas({from:wallet.address,value:100000000000000000});
console.log('Frais de transaction estimés (en WEI) : ' + gasEstimate);
var transaction = await cETH.methods.mint().send({from:wallet.address,gas:gasEstimate,value:100000000000000000}); // 0.1 ETH
var balance_after = await web3.eth.getBalance(wallet.address);
console.log('Solde après prêt (en WEI) : ' + balance_after);
var balance_cETH = await cETH.methods.balanceOf(wallet.address).call();
console.log('Solde en cETH : ' + balance_cETH);
}
run();