Le but de ce projet est de créer une interface permettant de générer des flash loans à l'aide des plateformes Uniswap, Sushiswap et AAVE.
git clone git@github.com:elcitrovmtgrande/flash-loans-manager.git
cd $_ && yarn install
yarn
et non npm !!!
Pour installer avec yarn, faire yarn add dependency-name
yarn dev
yarn test
Si vous ne savez pas encore ce qu'est un flash loan, merci de lire ce super article. Ceci étant dit, voici le protocole que devra suivre un programme pour être efficace :
- Analyser les marchés en temps réel afin de dénicher des erreurs d'arbitrage
- Définir une stratégie avec un ou plusieurs flash loans
- Exécuter le ou les flash loans lorsque les circonstances le permettent
- Affichier une traçabilité de toutes les opérations effectuées afin de pouvoir améliorer le robot
Voici la liste des tâches les plus importantes à developper. Chaque classe devra présenter des tests unitaires.
Tâche | Statut |
---|---|
Classe Pair.js |
❌ |
Classe FlashLoan.js |
❌ |
Classe Strategy.js |
❌ |
Création de points d'API permettant d'analyser ou de consulter les FlashLoans et strégies disponibles | ❌ |
Création d'une UI basique permettant de piloter le robot depuis une GUI | ❌ |
La classe Pair
doit permettre de pouvoir modéliser une paire de devise.
Elle possédera des méthodes lui permettant d'observer en temps réel ou non, ses devises
/**
* Exemple de code pour l'API finale
*
*/
const pair = new Pair(['ETH', 'DAI']);
const cb = () => console.log('Opportunité arbitrage trouvée !');
/**
* Pair.watch
* Renvoie toutes les 1000 millisecondes les informations de cette paire
* sur les différentes places de marché
* @param {Integer} milliseconds Les millisecondes du compte-à-rebours
* @optional @param {Function} callback Fonction qui serait exécuté en cas d'erreur d'arbitrage
*/
pair.watch(1000, cb);
// Affichera : Opportunité arbitrage trouvée en cas d'opportunité
La classe FlashLoan
doit permettre de pouvoir modéliser un flash loan.
Elle prendra au sein de son constructeur une paire de devise, ainsi qu'un objet de configuration
permettant de renseigner le flashloan
Il devra posséder une méthode exec
permettant d'exécuter le flashLoan
Cette méthode exec
devra évidemment logger toutes les étapes du Flash Loan du début à la fin.
Propriété | Type | Commentaire |
---|---|---|
pair | Pair | La paire de devise concernée par ce Flash loan |
threshold | Float | Le pourcentage d'erreur d'arbitrage acceptable |
borrow | Float | La somme empruntable au moment du Loan |
outputWallet | String | L'addresse publique du portefeuille où déposer l'excédent en cas de succès |
/**
* Exemple de code pour l'API finale
*
*/
const flashLoan = new FlashLoan({
pair: new Pair(['BTC', 'EUR']),
threshold: 0.5,
borrow: 1000,
outputWallet: '0xccc23229b45642af11c2c0b1d2b7082bb187cbf3'
});
flashLoan.exec();
D'apres UniSwap, si les deux currency sont differentes de WETH. Alors pour swaper, on est obligé de passer par du WETH. Ainsi la route sera la suivante pour echanger du DAI vs du AAVE : DAI > WETH > AAVE Il faudra donc prendre en compte ce critère afin de permettre de trader des devises entre elles directement avec le robot. Dans un premier temps, on se limitera donc au trade WETH / ANY.