
Imagem gerada por AI

A transação triangular acima começa a partir de 01 - comprando 1 wBTC com $60.000 USDC, seguido por 02 - comprando 16 WETH com 1 wBTC e termina com 03 - vendendo 16 WETH por $66.000 USDC. No final da jornada, teríamos obtido $6.000 USDC como lucro.
Com a natureza comercial da arbitragem triangular, gostaríamos de pegar um token com a quantidade exata como entrada, trocá-lo por outra criptomoeda e depois trocar novamente pelo token original para obter lucro, como desejamos.
endereço constante SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
endereço constante WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
constante de endereço USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
endereço constante DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
contrato MultiHopSwap { usando SafeERC20 para IERC20;ISwapRouter02 private constante ROUTER = ISwapRouter02(SWAP_ROUTER_02);uint256 private constante MAX_INT = 115792089237316195423570985008687907853269984665640564039457584007913129639935;função swapExactInputMultiHop(uint256 amountIn) externo { IERC20(USDC).safeApprove(address(ROUTER), MAX_INT); IERC20(WETH).safeApprove(address(ROUTER), MAX_INT); IERC20(DAI).safeApprove(address(ROUTER), MAX_INT); bytes memoria path = abi.encodePacked(USDC, uint24(3000), WETH, uint24(3000), DAI, uint24(3000), USDC) ; ISwapRouter02.ExactInputParams memoria params = ISwapRouter02 .ExactInputParams({ path: path, recipient: address(this), amountIn: amountIn, amountOutMinimum: 1 }); ROUTER.exactInput(params); }}
```Os roteadores desempenham um papel crucial na facilitação da provisão de liquidez. Como eles são sem estado e não possuem saldos de tokens, os roteadores podem ser substituídos com segurança. Por esse motivo, os roteadores têm números de versão, começando em 01. Em nossa implementação, usamos o Roteador02 em [0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45](https://docs.uniswap.org/contracts/v3/reference/deployments/ethereum-deployments)na mainnet.
SafeERC20 é uma camada de proteção construída em torno das transações ERC20, garantindo interações seguras com tokens ERC20 dentro do nosso contrato. Ao contrário das funções ERC20 regulares, o SafeERC20 aprimora a segurança verificando os valores de retorno booleanos das operações ERC20. Se alguma operação falhar, a transação é revertida, minimizando os riscos. Além disso, o SafeERC20 acomoda tokens ERC20 não padronizados que não possuem valores de retorno booleanos, proporcionando flexibilidade e robustez na gestão de tokens. Ao aprovar a quantidade máxima, permitimos que o Router02 transfira tokens em nosso nome. Sem fazer isso, você esperaria ver uma mensagem de erro STF na qual STF significa que a execução é revertida pela declaração require na função TransferHelper.safeTransferFrom.
Em seguida, vamos ver como um caminho triangular é definido:
bytes memory path = abi.encodePacked(USDC, uint24(3000),
WETH, uint24(3000), DAI, uint24(3000), USDC) ;
## TestandoNós usamos a mesma técnica por[bifurcando a mainnet com impessoalidade](https://medium.com/cryptocurrency-scripts/mainnet-forking-with-impersonation-in-evm-compatible-blockchain-b01bab1354ae). Uma vez que 10 USDC forem verificados como creditados no contrato, as trocas multi-hop podem ser acionadas da seguinte forma:
it("realiza troca de vários saltos", async () => {balance = await swap.tokenBalance(USDC);console.log(Saldo atual de USDC = ${balance});console.log(Trocando ${initialFundingHuman} USDC);const tx = await swap.swapExactInputMultiHop(ethers.parseUnits(initialFundingHuman, DECIMALS));receipt = await tx.wait();balance = await swap.tokenBalance(USDC);console.log(Saldo atual de USDC = ${balance});expect(balance).not.equal(0);});
Saldo USDC da baleia: 170961218210457n
Impersonation Started.
Falsificação de identidade concluída.
Saldo atual de USDC = 100000000
Trocar 100 USDC
Saldo atual de USDC = 91677417
Depois de pular pelos aros, perdemos dinheiro - Obviamente, o caminho com taxas de mercado não estava a nosso favor, mas você entende como a arbitragem triangular deve ser feita usando trocas de várias etapas no Uniswap v3.
## Empréstimo rápido financiou arbitragem triangularNão lhe disse[a fonte de financiamento mais poderosa no ecossistema DeFi é Flash loan](https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255)? Não será necessário muita criatividade para você construir uma estratégia de negociação de arbitragem triangular financiada por empréstimo Flash usando tanto empréstimo Flash quanto trocas multihop que eu ensinei. Uma lógica combinada pode ser explicada pelo diagrama de sequência atualizado conforme abaixo:

Diagrama de sequência para arbitragem triangular financiada por empréstimo Flash na Uniswap v3 (Ignorou algumas operações para simplificar)
Confira meu código fonte para empréstimo Flash e trocas Multihop implementadas na Uniswap v3 —[https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255](https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255), digira o diagrama de sequência e faça sua própria lição de casa para concluir os contratos inteligentes combinados.
## Considerações de rentabilidadeA primeira coisa que queremos olhar é o caminho que é composto pela sequência dos 3 trades: Para ser lucrativo, eles devem ser os 3 pares certos de criptomoedas nas taxas corretas. Para encontrar toda essa corretude, você precisa desenvolver um programa que permuta pares negociáveis no padrão de arbitragem triangular e simula as trocas para verificar a lucratividade. A recuperação de taxas da blockchain pode ser lenta e isso ainda mais vai retardar o processo se houver muitos caminhos aguardando verificação de lucratividade. Você pode querer reduzir a lista de caminhos triangulares calculando Lucro e Perda com base nos preços de superfície fornecidos pelos pontos finais de preços do GraphQL de uma DEX, se houver[aqui vem o Uniswap v3](https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3)) Como as APIs do GraphQL são muito mais rápidas do que o blockchain para fornecer dados de cotação. Uma vez que os caminhos são selecionados, execute-os com as cotações obtidas da cadeia para um cálculo mais preciso de Lucro e Perda.
[Impulsionando seu investimento com empréstimo Flash](https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255)pode estender ainda mais o lucro - empréstimo de tokens a juros baixos e investi-los com estratégia lucrativa sempre será uma boa ideia. Teoricamente, desde que o lucro bruto seja suficiente para cobrir as taxas de empréstimo rápido e de troca, a estratégia de arbitragem triangular será considerada lucrativa. Um truque crítico para proteger seu lucro e mitigar o risco geral de negociação é ter uma lógica em seu contrato de negociação para falhar na transação de empréstimo rápido se a verificação de lucratividade bruta falhar, pois quando a transação falha, todas as operações serão desfeitas e você não precisará arcar com a perda e nem mesmo com as taxas da transação. Esta peça de lógica funcionará como um guardião geral para evitar deslizes ou movimentos na taxa de câmbio que não nos favoreçam.
Dito isso, independentemente do sucesso ou fracasso da transação, as taxas de gás são algo de que você nunca pode escapar e podem ser a principal causa de perda de dinheiro na arbitragem triangular. Sempre avalie as taxas de gás para a transação de sua estratégia e leve isso em consideração no cálculo da lucratividade líquida. Por favor, consulte os casos de teste de estimativa de taxa de gás em meu código-fonte.
### Aviso Legal:- Este artigo é reproduzido a partir de [[Scripts de criptomoeda](https://medium.com/cryptocurrency-scripts/triangular-arbitrage-on-uniswap-v3-7c035d8214a5)], Todos os direitos autorais pertencem ao autor original [**[Aaron Li](https://medium.com/lichenlc?source=post_page-----7c035d8214a5--------------------------------)**]. Se houver objeções a esta reimpressão, entre em contato com o [Gate Aprender]([https://www.Gate.com/questionnaire/3967](https://www.Gate.com/questionnaire/3967)equipe e eles lidarão com isso prontamente.- Aviso de Responsabilidade: As opiniões expressas neste artigo são exclusivamente do autor e não constituem nenhum conselho de investimento.- As traduções do artigo para outros idiomas são feitas pela equipe Gate Learn. Salvo indicação em contrário, copiar, distribuir ou plagiar os artigos traduzidos é proibido.





