
Gambar dihasilkan oleh AI

Transaksi segitiga di atas dimulai dari 01 — membeli 1 wBTC dengan $60,000 USDC, diikuti oleh 02 — membeli 16 WETH dengan 1 wBTC dan diakhiri dengan 03 — menjual 16 WETH seharga $66,000 USDC. Pada akhir perjalanan, kita akan mendapatkan $6,000 USDC sebagai keuntungan.
Dengan sifat bisnis arbitrase segitiga, kami ingin mengambil token dengan jumlah yang tepat sebagai input, menukarkannya ke mata uang kripto lain, dan kemudian menukarkannya kembali ke token asli untuk mendapatkan keuntungan, sebagaimana yang kami harapkan.
alamat tetap SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
alamat konstan WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
konstan alamat USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
konstan alamat DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
kontrak MultiHopSwap { menggunakan SafeERC20 untuk IERC20;ISwapRouter02 privat konstan ROUTER = ISwapRouter02(SWAP_ROUTER_02);uint256 privat konstan MAX_INT = 115792089237316195423570985008687907853269984665640564039457584007913129639935;fungsi swapExactInputMultiHop(uint256 amountIn) eksternal {IERC20(USDC).safeApprove(address(ROUTER), MAX_INT);IERC20(WETH).safeApprove(address(ROUTER), MAX_INT);IERC20(DAI).safeApprove(address(ROUTER), MAX_INT);bytes memory path = abi.encodePacked(USDC, uint24(3000), WETH, uint24(3000), DAI, uint24(3000), USDC);ISwapRouter02.ExactInputParams memory params = ISwapRouter02.ExactInputParams({path: path,recipient: address(this),amountIn: amountIn,amountOutMinimum: 1});ROUTER.exactInput(params);}}
```Router memainkan peran penting dalam memfasilitasi penyediaan likuiditas. Karena mereka tidak memiliki status dan tidak menyimpan saldo token, router dapat digantikan dengan aman. Karena itu, router memiliki nomor rilis, dimulai dari 01. Dalam implementasi kami, kami menggunakan Router02 di [0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45](https://docs.uniswap.org/contracts/v3/reference/deployments/ethereum-deployments)pada mainnet.
SafeERC20 adalah lapisan perlindungan yang dibangun di sekitar transaksi ERC20, memastikan interaksi yang aman dengan token ERC20 dalam kontrak kami. Berbeda dengan fungsi ERC20 reguler, SafeERC20 meningkatkan keamanan dengan memverifikasi nilai kembalian boolean dari operasi ERC20. Jika ada operasi yang gagal, transaksi akan dibatalkan, meminimalkan risiko. Selain itu, SafeERC20 menampung token ERC20 non-standar yang tidak memiliki nilai kembalian boolean, memberikan fleksibilitas dan kekokohan dalam manajemen token. Dengan menyetujui jumlah maksimum, kami memungkinkan Router02 untuk mentransfer token atas nama kami. Tanpa melakukan hal tersebut, Anda akan mengharapkan pesan kesalahan STF di mana STF berarti eksekusi dibatalkan oleh asersi require dalam fungsi TransferHelper.safeTransferFrom.
Selanjutnya, kami akan melihat bagaimana sebuah jalur segitiga didefinisikan:
jalur memori byte = abi.encodePacked(USDC, uint24(3000),
WETH, uint24(3000), DAI, uint24(3000), USDC) ;
## PengujianKami menggunakan teknik yang sama dengan[forking mainnet dengan kepalsuan](https://medium.com/cryptocurrency-scripts/mainnet-forking-with-impersonation-in-evm-compatible-blockchain-b01bab1354ae). Setelah 10 USDC diverifikasi dikreditkan ke kontrak, pertukaran multi-hop dapat dipicu seperti di bawah ini:
it("melakukan pertukaran multi-hop", async () => {balance = await swap.tokenBalance(USDC);console.log(Saldo USDC saat ini = ${balance});console.log(Menukar ${initialFundingHuman} USDC);const tx = await swap.swapExactInputMultiHop(ethers.parseUnits(initialFundingHuman, DECIMALS));receipt = await tx.wait();balance = await swap.tokenBalance(USDC);console.log(Saldo USDC saat ini = ${balance});expect(balance).not.equal(0);});
Saldo USDC paus: 170961218210457n
Pemalsuan Dimulai.
Pemalsuan selesai.
Saldo saat ini USDC = 100000000
Menukar 100 USDC
Saldo saat ini dari USDC = 91677417
Setelah melompati rintangan, kami kehilangan uang — Jelas jalur dengan nilai spot tidak menguntungkan bagi kami, tetapi Anda mendapatkan gambaran tentang bagaimana arbitrase segitiga seharusnya dilakukan menggunakan pertukaran multi-hop di Uniswap v3.
## Flash loan didanai arbitrase triangularBelumkah saya bilang [sumber pendanaan paling kuat dalam ekosistem DeFi adalah pinjaman Flash](https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255)? Tidak akan memerlukan banyak kreativitas bagi Anda untuk membuat strategi perdagangan arbitrase triangular yang didanai oleh pinjaman Flash menggunakan kedua pinjaman Flash dan pertukaran multihop yang saya ajarkan. Logika gabungan dapat dijelaskan oleh diagram urutan yang diperbarui seperti di bawah ini:

Diagram urutan untuk arbitrase triangular yang didanai oleh pinjaman kilat di Uniswap v3 (Diabaikan beberapa operasi untuk kesederhanaan)
Periksa kode sumber saya untuk kedua pinjaman Flash dan pertukaran Multihop yang diimplementasikan di Uniswap v3 —[https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255](https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255), mencerna diagram urutan dan lakukan pekerjaan rumah Anda sendiri untuk menyelesaikan kontrak cerdas yang digabungkan.
## Pertimbangan profitabilitasHal pertama yang ingin kita lihat adalah jalur yang terdiri dari urutan dari 3 perdagangan: Untuk mendapatkan keuntungan, mereka harus menjadi 3 pasang crypto yang tepat pada tingkat yang tepat. Untuk menemukan semua kecocokan ini, Anda perlu mengembangkan program yang mempermutasikan pasangan yang dapat diperdagangkan dalam pola arbitrase segitiga dan mensimulasikan pertukaran untuk memeriksa profitabilitasnya. Mengambil tingkat dari blockchain bisa lambat dan akan lebih memperlambat proses jika terlalu banyak jalur yang menunggu diverifikasi untuk profitabilitas. Anda mungkin ingin mempersempit daftar jalur segitiga dengan menghitung Profit & Loss berdasarkan harga permukaan yang disediakan oleh titik akhir harga GraphQL DEX jika ada[ini adalah Uniswap v3’s](https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3)) , karena API GraphQL jauh lebih cepat daripada blockchain untuk menyediakan data kutipan. Setelah jalur dipilih, jalankan dengan kutipan yang diambil dari rantai untuk perhitungan Profit & Loss yang lebih akurat.
[Meningkatkan investasi Anda dengan pinjaman kilat](https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255)Dapat memperpanjang keuntungan - meminjam token dengan bunga rendah dan menginvestasikannya dengan strategi yang menguntungkan akan selalu menjadi ide bagus. Secara teori, selama keuntungan kotor cukup untuk menutupi biaya pinjaman kilat dan biaya swap, strategi arbitrase segitiga akan dianggap menguntungkan. Satu trik kritis untuk menjaga keuntungan dan mengurangi risiko perdagangan secara keseluruhan adalah memiliki logika dalam kontrak perdagangan Anda untuk gagal dalam transaksi pinjaman kilat jika pemeriksaan keuntungan kotor gagal, karena saat transaksi gagal, semua operasi akan dikembalikan dan Anda tidak perlu menanggung kerugian bahkan biaya untuk transaksi. Bagian logika ini akan berfungsi sebagai penjaga gerbang untuk mencegah slippage atau pergerakan nilai tukar yang tidak mendukung kita.
Meskipun begitu, terlepas dari keberhasilan atau kegagalan transaksi, biaya gas adalah sesuatu yang tidak bisa Anda hindari dan bisa menjadi penyebab utama kehilangan uang dari arbitrase segitiga. Selalu menilai biaya gas untuk transaksi strategi Anda dan pertimbangkan dalam perhitungan keuntungan bersih. Mohon lihat uji estimasi biaya gas dalam kode sumber saya.
### Disclaimer:- Artikel ini dicetak ulang dari [[Skrip Cryptocurrency](https://medium.com/cryptocurrency-scripts/triangular-arbitrage-on-uniswap-v3-7c035d8214a5)], Semua hak cipta adalah milik penulis asli [**[Aaron Li](https://medium.com/lichenlc?source=post_page-----7c035d8214a5--------------------------------)**]. Jika ada keberatan terhadap cetakan ulang ini, silakan hubungi [Gate Belajar]([https://www.Gate.com/questionnaire/3967](https://www.Gate.com/questionnaire/3967)tim, dan mereka akan menanganinya dengan cepat.- Penafian Tanggung Jawab: Pandangan dan opini yang terdapat dalam artikel ini semata-mata milik penulis dan tidak merupakan nasihat investasi apapun.- Terjemahan artikel ke dalam bahasa lain dilakukan oleh tim Gate Learn. Kecuali disebutkan, menyalin, mendistribusikan, atau menjiplak artikel yang diterjemahkan dilarang.





