Je ne suis certainement pas un bon programmeur, mais écrire ce projet m'a beaucoup appris (et m'a occupé).FMZ.COMNéanmoins, j'ai été agréablement surpris par les résultats que j'ai obtenus et le bot a réalisé près de 100% de bénéfices d'éther jusqu'à présent.
À quoi ça sert? Il s'agit d'un bot d'arbitrage. Cela signifie qu'il gagne de l'argent en négociant la différence entre les prix sur deux (ou plus) bourses. À l'heure actuelle, il est unidirectionnel et ne négocie qu'entre Etherdelta et Bittrex: ils partagent environ vingt paires d'eth / jetons. Voici un diagramme pour illustrer son fonctionnement:Les mots suivis de parenthèses sont des transactions Ethereum qui invoquent un appel de fonction de contrat intelligent.
J' aurais pu utiliserfmz.comJ'avais besoin de quelque chose de plus fiable; une transaction ratée signifie perdre de l'argent. Chacune de mes requêtes GET avait besoin d'une réponse, même si le paquet TCP s'était perdu ou si le serveur Web à l'autre extrémité était temporairement en panne. J'ai donc décidé d'implémenter mon propre enveloppe API python et j'ai utilisé pythereum pour créer les transactions et etherscan pour les publier. J'ai également écrit mes propres requests.get decorator qui est une boucle de temps qui ne sort qu'une fois la réponse satisfaisante.
Voici le code que j'ai utilisé pour coder les réponses de l'API etherdelta json en hexadecimal, encodé en rlp, les transactions Ethereum (pas pour les faibles de cœur):
Les valeurs hexadécimales brutes dans la fermeture en bas sont les signatures de fonction qui correspondent à chaque fonction. Une signature de fonction est dérivée du keccak de la fonction et de ses arguments. Elle doit être ajoutée au paramètre de données d'une transaction suivie des données qui composent les arguments. Au total, mon code est d'environ 400 lignes et contenu dans 5 fichiers différents.
J'ai fait quelques graphiques à partir des données que j'ai enregistrées en utilisant pymatplotlib.
Dans l'ensemble, l'ensemble du projet m'a pris environ deux semaines pendant mon temps libre à l'école et c'était une explosion tout autour.
À la lune!