Я, конечно, не отличный программист, но написание этого проекта многому меня научило (и заняло). Большая часть моего кода была сделана на FMZ.COM, и если бы я рефакторировал код Python, я бы использовал более объектно-ориентированную модель. Тем не менее, я был приятно удивлен полученными результатами, и бот до сих пор сделал почти 100% эфирной прибыли.
Что это делает? Это арбитражный бот. Это означает, что он зарабатывает деньги от торговли разницей между ценами на двух (или более) биржах. На данный момент он однонаправленный и торгует только между Etherdelta и Bittrex: они делятся примерно двадцатью парами eth / token. Вот диаграмма, иллюстрирующая, как это работает:Слова, за которыми следует скобки, являются транзакциями Ethereum, которые вызывают вызов функции умного контракта.
Я мог бы использовать Python-редактор платформы fmz.com для создания транзакций и вызовов функций, и это было бы довольно просто. Мне нужно было что-то более надежное; неудачная транзакция означает потерю денег. Каждый из моих запросов GET нуждался в ответе, даже если TCP-пакет был потерян или веб-сервер на другом конце временно не работал. Поэтому я решил реализовать свой собственный Python etherscan API wrapper и использовал pythereum для создания транзакций и etherscan для их публикации. Я также написал свой собственный requests.get decorator, который является петлей while, которая выходит только после удовлетворительного ответа.
Вот код, который я использовал для кодирования ответов API эфирдельта json как гексадецимальные, с кодировкой rlp, транзакции Ethereum (не для слабонервных):
Необработанные шестомные значения в закрытии внизу - это подписи функций, которые соответствуют каждой функции. Функционная подпись получена из кеккака функции и ее аргументов. Она должна быть присоединена к параметру данных транзакции, за которой следуют данные, составляющие аргументы. В общей сложности мой код составляет около 400 строк и содержится в 5 разных файлах.
Я сделал пару графиков из данных, которые я записал с помощью pymatplotlib.
В целом весь проект занял у меня около двух недель во время моего свободного времени в школе и это был взрыв вокруг. Я взял перерыв от кодирования энергично и в настоящее время в процессе планирования арбитраж бота v2.
На луну!