Eu certamente não sou um grande programador, mas escrever este projeto me ensinou muito (e me manteve ocupado). A maioria do meu código foi feito no FMZ.COM, e se eu fosse refactorar o código Python eu usaria um modelo mais orientado a objetos.
O que é que ele faz? É um bot de arbitragem. Isso significa que ele ganha dinheiro negociando a diferença entre os preços em duas (ou mais) bolsas. A partir de agora, é unidirecional e só negocia entre Etherdelta e Bittrex: eles compartilham aproximadamente vinte pares de et / token.Palavras seguidas de parênteses são transações de ethereum que invocam uma chamada de função de contrato inteligente.
Eu poderia ter usado o editor Python da plataforma fmz.com para criar as transações e chamadas de funções e teria sido bastante simples. Eu precisava de algo mais confiável; uma transação falhada significa perder dinheiro. Cada uma das minhas solicitações GET precisava de uma resposta, mesmo que o pacote TCP se perdesse ou o servidor da web no outro extremo estivesse temporariamente fora. Portanto, eu decidi implementar meu próprio Python ether scan API wrapper e usei o pythereum para criar as transações e ether scan para publicá-las. Eu também escrevi meus próprios requests.get decorator que é um loop while que só sai quando a resposta é satisfatória.
Aqui está o código que eu usei para codificar as respostas da API do etherdelta json como hexadecimal, RLP codificado, transações Ethereum (não para os fracos de coração):
Os valores hexadecimais brutos no fechamento na parte inferior são as assinaturas de função que correspondem a cada função. Uma assinatura de função é derivada do keccak da função e seus argumentos. Ela deve ser anexada ao parâmetro de dados de uma transação seguido pelos dados que compõem os argumentos. No total, meu código tem cerca de 400 linhas de comprimento e está contido em 5 arquivos diferentes.
Fiz alguns gráficos dos dados que registrei usando o pymatplotlib.
No geral, todo o projeto levou-me cerca de duas semanas durante o meu tempo livre na escola e foi uma explosão em todos os sentidos. Eu tirei uma pausa da codificação vigorosamente e estou atualmente no processo de planejamento de arbitragem bot v2.
Para a lua!