WEB3DEV

Cover image for Crie um bot Flash Loan Arbitrage na Uniswap
Adriano P. Araujo
Adriano P. Araujo

Posted on • Atualizado em

Crie um bot Flash Loan Arbitrage na Uniswap

bot0x01 O que é Arbitragem?

A negociação de arbitragem não tem nada a ver com empréstimos em flash ou blockchain. Quando os mesmos dois ativos têm preços de câmbio diferentes em duas bolsas diferentes, essas transações de arbitragem existem.
Por exemplo, vejamos duas exchanges: Uniswap, Sushiswap, elas executam o mesmo código de contrato. Apesar de serem duas exchanges diferentes, podemos utilizar o mesmo código para realizar a mesma transação. Além disso, como a Sushiswap é uma troca mais recente, pode haver menos bots escritos para ela.
A arbitragem funciona assim: Um Ether vale 80Dai na Unisawp e 100Dai na Sushiswap. Compramos 1ETH na Unisawp e vendemos imediatamente na Sushiswap com um lucro de 20Dai (menos gás e taxas), uma negociação típica de arbitragem de lucro.

0x02 Flash Loan vs Flash Swap

Image description

Os Flash loans no protocolo Aave cobram uma taxa de 0,09% e exigem pelo menos três operações. 1. Pegue dinheiro emprestado da Aave; 2. Negocie em um Dex 3. Realize uma negociação de arbitragem em outro Dex para obter lucro e reembolsar o mesmo ativo. Se você emprestar Dai, você precisa devolver o Dai.

O Flash Swap permite que os comerciantes recebam ativos e os usem em outro lugar antes de pagar pelos ativos usados. Não há taxa fixa para Flash Swap na Uniswap, mas é cobrada uma taxa de swap de 0,3%. Comparado a um empréstimo rápido, isso pode ser visto como um empréstimo “gratuito”, pois a taxa de transação é deduzida do pedido de transação e não precisa ser paga separadamente. Uma última diferença: podemos reembolsar qualquer ativo no flashswap. Se usarmos isso para resgatar ETH para comprar Dai, podemos pagar com Dai ou ETH. Ambos usam uma“transferência otimista”.

0x03 Flash-loan e contrato

Para entender os flash loans, você precisa entender a natureza das transações do Ethereum. Todas as transações Ethereum são originadas de uma Conta de Propriedade Externa - Externally Owned Account (EOA), que é um endereço Ethereum operado por humanos.

Image description

As transações na Ethereum podem ir de um EOA para outro, assim como você pagaria a um amigo. As transações Ethereum também podem ir do EOA para execução de código em contratos. Esse contrato pode chamar outro contrato, e assim por diante, até que você fique sem taxas de transação (gas).

Estrutura de Transação Ethereum

De: O remetente da transação. É um endereço de 20 bytes que representa a conta que inicia esta transação.

Para: O destinatário desta transação. É também um endereço de 20 bytes. Dependendo do uso, pode ser outro EOA, uma Conta de Contrato ou apenas deixado em branco.

Valor: O valor do fundo em wei (1 ether = 1⁰¹⁸ weis) a ser transferido de “De” para “Para”. Se o “Para” for um EOA, é simplesmente uma transferência de fundos. Se "Para" for um Endereço de Contrato, é o valor do fundo passado para o contrato implementado. O contrato é codificado de tal forma que pode aceitar fundos.

Dados/Entrada: Este campo de dados é principalmente para atividades relacionadas ao contrato. Para nova implementação do contrato é o seu bytecode e os argumentos codificados. Para a execução da função de contrato,ele contém a assinatura da função e os argumentos codificados. Ele é deixado vazio na transferência de fundos.

Preço do Gás e Limite do *Gas: Ambos estão relacionados ao custo de processamento desta transação. Cada etapa de processamento de uma transação realizada pelo minerador possui uma unidade de *gas pré-definida (por exemplo, o*“sload”* que obtém dados de armazenamento permanente, custa 20 unidades de gas). O Preço do gas é a quantidade (em wei) por unidade de gas. Este é o remetente da transação de preço unitário disponível para o pagamento. O Limite de Gas é o máximo de unidades de gas gastos para esta transação. A unidade de gas máxima gasta por sua transação não excederá o Limite de Gas, como proteção em caso de qualquer discrepância no processamento da transação.

Três tipos de transação

Transferência de fundos entre EOA
Implementação de contrato na rede Ethereum
Execução de função em um contrato implantado

Flash loans exigem várias chamadas de função durante sua execução, o que não é possível no EOA. Em vez disso, implementaremos contratos com processos de várias etapas. Iniciamos uma transação do EOA para o contrato Aave para arbitragem, mas fornecemos o endereço para implementar o contrato, e também precisamos fornecer ETH suficiente para cobrir o custo do gas da transação, que pode ser muito caro devido à complexidade da transação (lembre-se, a transação depende de quanta computação é necessária).

0x04 transferência OP

Tanto os Flash loans quanto os swaps flash usam a tecnologia de “transferências OP”, que pode ser usada para empréstimos ou trocas não garantidas. Desde que o usuário pague os fundos necessários antes do fechamento da transação.

Image description

Na linha 884, o contrato do usuário finalizou a execução de seu código, e agora o fluxo da transação retorna ao contrato Aave, que possui uma instrução require no código que extrai a taxa do contrato do usuário do cheque. Esta é o fim da transferência otimista. Se o contrato do usuário concluir esta transação de arbitragem, o contrato Aave poderá deduzir a taxa. Se não for concluída, essa instrução require falhará, o que significa que toda a transação falhará.

Image description

A transferência otimista ocorre nas linhas 170–171, que é feita pela função _safeTransfer. A próxima linha é o contrato Uniswap, que usa o saldo da transferência para chamar o contrato do usuário (ou seja, Flash Swap)

Da mesma forma, o fluxo de transações será temporariamente suspenso no contrato Uniswap e transferido para o contrato do usuário para sua execução. Uma vez executado no contrato do usuário, o fluxo da transação retornará ao contrato Uniswap. O contrato Uniswap verifica o novo saldo e tenta obter a taxa de swap (180–181)

Se o contrato de arbitragem do usuário não transferir o valor correspondente, a instrução de exigência na linha 182 falhará e toda a transação será restaurada. Esta é a chave para as transferências OP. Tudo depende da transação de arbitragem do contrato do usuário para transferir os fundos correspondentes antes da transação. Se não for bem-sucedida, a transação será inválida e reverterá para o estado anterior à transferência do token. No entanto, se for bem-sucedida, a transferência otimista permanece e o usuário obtém seu lucro.

ref:


Este artigo foi escrito por lunaraye traduzido por Adriano P. de Araujo. O original em inglês pode ser encontrado aqui.

Top comments (0)