Трикутний арбітраж на Uniswap v3

Середній5/7/2024, 10:38:35 AM
Трикутний арбітраж виступає стратегією в криптовалютній біржовій торгівлі, використовуючи варіації обмінних курсів в межах одного ринку або між декількома ринками.

Реалізовано за допомогою багатопересадкових обмінів

Трикутна арбітраж служить стратегією в торгівлі криптовалютами, використовуючи варіації обмінних курсів в межах одного ринку або на кількох ринках. Цей метод включає три послідовні угоди: обмін початкової криптовалюти на другу, другої на третю, і в кінцевому підсумку, третьої криптовалюти на початкову, з метою отримання прибутку. Таким чином, термін "трикутний" охоплює його трьохетапний процес.

Зображення, створене штучним інтелектом

Як це працює?

На DEX можливості для трикутного арбітражу зазвичай виникають через різницю ліквідності по різних пулах. Вони зазвичай короткочасні, тривають лише кілька секунд або навіть менше, оскільки біржа швидко коригує будь-які розходження в цінах. В результаті для здійснення операцій використовуються автоматизовані торгові алгоритми, які дозволяють скористатися цими мимовільними різницями. Щоб краще зрозуміти концепцію, ось приклад:

Вищезазначена трикутна трансакція починається з 01 - купівлі 1 wBTC за $60,000 USDC, за якою слідує 02 - купівля 16 WETH за 1 wBTC і закінчується 03 - продаж 16 WETH за $66,000 USDC. В кінці подорожі ми отримали б $6,000 USDC як прибуток.

Реалізація з багаторазовими обмінами на Uniswap v3

На Uniswap v3 доступні два стилі багаторазового обміну: точний вхід та точний вихід. Як із їхніх назв, перший очікує токен з точною кількістю як вхід для обміну, і в кінці нього токен з кількістю буде виведено за обмінними курсами; Останнє очікує вказану точну кількість як вихід, лише достатня кількість токенів як вхід може задовольнити обмін за обмінними курсами.

З бізнес-характером трикутної арбітражної угоди ми хотіли б взяти токен з точною сумою введення, обміняти його на іншу криптовалюту, а потім знову обміняти на початковий токен, щоб отримати прибуток, як ми бажаємо.

адреса константа SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;

адреса константа WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

address constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

адреса константи DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

конструктор MultiHopSwap { використання SafeERC20 для IERC20;ISwapRouter02 приватний постійний ROUTER = ISwapRouter02(SWAP_ROUTER_02);uint256 приватний постійний MAX_INT = 115792089237316195423570985008687907853269984665640564039457584007913129639935;функція swapExactInputMultiHop(uint256 amountIn) зовнішня {IERC20(USDC).safeApprove(address(ROUTER), MAX_INT);IERC20(WETH).safeApprove(address(ROUTER), MAX_INT);IERC20(DAI).safeApprove(address(ROUTER), MAX_INT);bytes пам'ять path = abi.encodePacked(USDC, uint24(3000), WETH, uint24(3000), DAI, uint24(3000), USDC) ;ISwapRouter02.ExactInputParams пам'ять params = ISwapRouter02 .ExactInputParams({path: path,recipient: address(this),amountIn: amountIn,amountOutMinimum: 1 });ROUTER.exactInput(params); }}

Маршрутизатори відіграють важливу роль у забезпеченні ліквідності. Оскільки вони є безстатевими і не утримують балансів токенів, маршрутизатори можуть бути замінені безпечно. З цієї причини у маршрутизаторів є номери версій, починаючи з 01. В нашій імплементації ми використовуємо Router02 на 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45на головній мережі.

SafeERC20 - це захисний шар, побудований навколо операцій ERC20, що забезпечує безпечну взаємодію з токенами ERC20 у межах нашого контракту. На відміну від звичайних функцій ERC20, SafeERC20 підвищує безпеку, перевіряючи булеві значення повернення операцій ERC20. Якщо будь-яка операція не вдасться, транзакція буде відкочена, мінімізуючи ризики. Крім того, SafeERC20 пристосовується до нетипових токенів ERC20, що не мають булевих значень повернення, надаючи гнучкість та надійність у керуванні токенами. Активувавши максимальну кількість, ми дозволяємо Router02 переказувати токени від нашого імені. Якщо цього не зробити, ви побачите повідомлення про помилку STF, де STF означає, що виконання відкочується за допомогою перевірки require в функції TransferHelper.safeTransferFrom.

Далі ми розглянемо, як визначається трикутний шлях:

bytes пам'ять шлях = abi.encodePacked(USDC, uint24(3000),

                                WETH, uint24(3000),                                DAI,  uint24(3000),                                USDC) ;

Через abi.encodePacked, Solidity тісно упаковує кілька значень без додавання будь-якого вирівнювання. Він конкатенує сирові бінарні дані кожного параметра. Не важко зрозуміти, що параметри послідовно розміщують обміни з комісіями між криптопарами. Шлях починається з USDC і закінчується на USDC з очікуванням прибутку. Потім він обгортається ExactInputParams з іншими обов'язковими параметрами та подається в маршрутизатор для багатократного обміну.

Тестування

Ми використовуємо ту саму техніку розгалуження головної мережі з використанням імітації. Як тільки 10 USDC було підтверджено як зараховано на контракт, можуть бути запущені багатоскокові обміни, як показано нижче:

it("виконує мультиперехідний обмін", асинхронно () => {balance = await swap.tokenBalance(USDC);console.log(`Поточний баланс USDC = ${balance}`);console.log(`Обмінюємо ${initialFundingHuman} USDC`);const tx = await swap.swapExactInputMultiHop(ethers.parseUnits(initialFundingHuman, DECIMALS));receipt = await tx.wait();balance = await swap.tokenBalance(USDC);console.log(`Поточний баланс USDC = ${balance}`);expect(balance).not.equal(0);});

Результат тесту повинен виглядати так, як показано нижче:

Баланс USDC кита: 170961218210457n

Почалася імітація.

Виконано імітацію.

Поточний баланс USDC = 100000000

Обмін 100 USDC

Поточний баланс USDC = 91677417

Після того, як ми перестрибнули через перешкоди, ми втратили гроші - очевидно, що шлях зі ставками на місці не був нашою перевагою, але ви уявляєте, як треба виконувати трикутну арбітражу, використовуючи багатоскокові свопи на Uniswap v3.

Флеш-кредитом фінансується трикутна арбітражна угода

Чи я не казавнайпотужніше джерело фінансування в екосистемі DeFi - це Flash loan? Вам не знадобиться багато креативності, щоб скласти стратегію торгівлі трикутною арбітражною фінансовою позикою, використовуючи як фінансову позику, так і багатократні обміни, про які я вчив. Об'єднана логіка може бути пояснена оновленою діаграмою послідовності, яка наведена нижче:

Діаграма послідовності для флеш-кредитування фінансового трікутного арбітражу на Uniswap v3 (Ігнорували деякі операції для спрощення)

Перевірте мій вихідний код для реалізації як Flash loan, так і Multihop swaps на Uniswap v3 — https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255, усвідомте послідовність діаграми та зробіть своє домашнє завдання, щоб завершити узгодження смарт-контрактів.

Розгляди щодо прибутковості

Перша річ, на яку ми хочемо звернути увагу, - це шлях, який складається з послідовності з трьох угод: Щоб бути прибутковими, вони повинні бути правильними 3 парами криптовалют за правильними тарифами. Щоб знайти всю цю правильність, потрібно розробити програму, яка переставляє торгові пари в шаблоні трикутної арбітражної угоди та моделює обміни для перевірки прибутковості. Отримання тарифів з блокчейну може бути повільним, і це ще більше сповільнить процес, якщо є занадто багато шляхів, які чекають на перевірку щодо прибутковості. Ви можете бажати скоротити список трикутних шляхів, розраховуючи Прибуток & Збиток на основі цін поверхні, наданих кінцевими точками цін DEX, якщо такі єось приходить Uniswap v3’s) , оскільки API GraphQL набагато швидше, ніж блокчейн, надають дані про котирування. Як тільки шляхи будуть відібрані, виконайте їх з цитатами, отриманими з ланцюжка, для більш точного обчислення Прибутку & Збитків.

Збільшення вашого інвестиційного портфеля за допомогою Flash-кредитуможе подовжити прибуток — позичання токенів під низький відсоток та їх інвестування з прибутковою стратегією завжди буде гарою ідеєю. Теоретично, поки валовий прибуток достатній для покриття витрат на швидкий кредит та обмінні комісії, стратегія трикутного арбітражу буде вважатися прибутковою. Один важливий трюк для захисту вашого прибутку та пом'якшення загального торгівельного ризику полягає в тому, щоб мати логіку в вашому торгівельному контракті, щоб скасувати трансакцію швидкого кредиту, якщо перевірка валової прибутковості не вдасться, тому що, коли трансакція не вдасться, всі операції будуть повернуті, і вам не потрібно нести збитки, навіть комісії за трансакцію. Ця логіка буде працювати як універсальний бар'єр, щоб запобігти ковзанню або руху обмінного курсу, який не в нашу користь.

Про це сказавши, незалежно від успіху чи невдачі угоди, плата за газ - це щось, від чого ви ніколи не зможете відмовитися і це може бути основною причиною втрати грошей від трикутної арбітражної угоди. Завжди оцінюйте плату за газ для угоди вашої стратегії та враховуйте це при розрахунку чистого прибутку. Будь ласка, посилайтеся на тести оцінки плати за газ у моєму вихідному коді.

Відмова:

  1. Ця стаття передрукована з [Скрипти криптовалют], Усі авторські права належать оригінальному автору [Аарон Лі]. Якщо є заперечення до цього перепублікування, будь ласка, зв'яжіться з Gate Learnкоманда, і вони оперативно займуться цим.
  2. Відповідальність за відмову: Погляди та думки, висловлені в цій статті, є виключно поглядами автора і не становлять жодної інвестиційної поради.
  3. Переклади статті на інші мови виконуються командою Gate Learn. Якщо не зазначено інше, копіювання, поширення або плагіат перекладених статей заборонені.

Трикутний арбітраж на Uniswap v3

Середній5/7/2024, 10:38:35 AM
Трикутний арбітраж виступає стратегією в криптовалютній біржовій торгівлі, використовуючи варіації обмінних курсів в межах одного ринку або між декількома ринками.

Реалізовано за допомогою багатопересадкових обмінів

Трикутна арбітраж служить стратегією в торгівлі криптовалютами, використовуючи варіації обмінних курсів в межах одного ринку або на кількох ринках. Цей метод включає три послідовні угоди: обмін початкової криптовалюти на другу, другої на третю, і в кінцевому підсумку, третьої криптовалюти на початкову, з метою отримання прибутку. Таким чином, термін "трикутний" охоплює його трьохетапний процес.

Зображення, створене штучним інтелектом

Як це працює?

На DEX можливості для трикутного арбітражу зазвичай виникають через різницю ліквідності по різних пулах. Вони зазвичай короткочасні, тривають лише кілька секунд або навіть менше, оскільки біржа швидко коригує будь-які розходження в цінах. В результаті для здійснення операцій використовуються автоматизовані торгові алгоритми, які дозволяють скористатися цими мимовільними різницями. Щоб краще зрозуміти концепцію, ось приклад:

Вищезазначена трикутна трансакція починається з 01 - купівлі 1 wBTC за $60,000 USDC, за якою слідує 02 - купівля 16 WETH за 1 wBTC і закінчується 03 - продаж 16 WETH за $66,000 USDC. В кінці подорожі ми отримали б $6,000 USDC як прибуток.

Реалізація з багаторазовими обмінами на Uniswap v3

На Uniswap v3 доступні два стилі багаторазового обміну: точний вхід та точний вихід. Як із їхніх назв, перший очікує токен з точною кількістю як вхід для обміну, і в кінці нього токен з кількістю буде виведено за обмінними курсами; Останнє очікує вказану точну кількість як вихід, лише достатня кількість токенів як вхід може задовольнити обмін за обмінними курсами.

З бізнес-характером трикутної арбітражної угоди ми хотіли б взяти токен з точною сумою введення, обміняти його на іншу криптовалюту, а потім знову обміняти на початковий токен, щоб отримати прибуток, як ми бажаємо.

адреса константа SWAP_ROUTER_02 = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;

адреса константа WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

address constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

адреса константи DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

конструктор MultiHopSwap { використання SafeERC20 для IERC20;ISwapRouter02 приватний постійний ROUTER = ISwapRouter02(SWAP_ROUTER_02);uint256 приватний постійний MAX_INT = 115792089237316195423570985008687907853269984665640564039457584007913129639935;функція swapExactInputMultiHop(uint256 amountIn) зовнішня {IERC20(USDC).safeApprove(address(ROUTER), MAX_INT);IERC20(WETH).safeApprove(address(ROUTER), MAX_INT);IERC20(DAI).safeApprove(address(ROUTER), MAX_INT);bytes пам'ять path = abi.encodePacked(USDC, uint24(3000), WETH, uint24(3000), DAI, uint24(3000), USDC) ;ISwapRouter02.ExactInputParams пам'ять params = ISwapRouter02 .ExactInputParams({path: path,recipient: address(this),amountIn: amountIn,amountOutMinimum: 1 });ROUTER.exactInput(params); }}

Маршрутизатори відіграють важливу роль у забезпеченні ліквідності. Оскільки вони є безстатевими і не утримують балансів токенів, маршрутизатори можуть бути замінені безпечно. З цієї причини у маршрутизаторів є номери версій, починаючи з 01. В нашій імплементації ми використовуємо Router02 на 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45на головній мережі.

SafeERC20 - це захисний шар, побудований навколо операцій ERC20, що забезпечує безпечну взаємодію з токенами ERC20 у межах нашого контракту. На відміну від звичайних функцій ERC20, SafeERC20 підвищує безпеку, перевіряючи булеві значення повернення операцій ERC20. Якщо будь-яка операція не вдасться, транзакція буде відкочена, мінімізуючи ризики. Крім того, SafeERC20 пристосовується до нетипових токенів ERC20, що не мають булевих значень повернення, надаючи гнучкість та надійність у керуванні токенами. Активувавши максимальну кількість, ми дозволяємо Router02 переказувати токени від нашого імені. Якщо цього не зробити, ви побачите повідомлення про помилку STF, де STF означає, що виконання відкочується за допомогою перевірки require в функції TransferHelper.safeTransferFrom.

Далі ми розглянемо, як визначається трикутний шлях:

bytes пам'ять шлях = abi.encodePacked(USDC, uint24(3000),

                                WETH, uint24(3000),                                DAI,  uint24(3000),                                USDC) ;

Через abi.encodePacked, Solidity тісно упаковує кілька значень без додавання будь-якого вирівнювання. Він конкатенує сирові бінарні дані кожного параметра. Не важко зрозуміти, що параметри послідовно розміщують обміни з комісіями між криптопарами. Шлях починається з USDC і закінчується на USDC з очікуванням прибутку. Потім він обгортається ExactInputParams з іншими обов'язковими параметрами та подається в маршрутизатор для багатократного обміну.

Тестування

Ми використовуємо ту саму техніку розгалуження головної мережі з використанням імітації. Як тільки 10 USDC було підтверджено як зараховано на контракт, можуть бути запущені багатоскокові обміни, як показано нижче:

it("виконує мультиперехідний обмін", асинхронно () => {balance = await swap.tokenBalance(USDC);console.log(`Поточний баланс USDC = ${balance}`);console.log(`Обмінюємо ${initialFundingHuman} USDC`);const tx = await swap.swapExactInputMultiHop(ethers.parseUnits(initialFundingHuman, DECIMALS));receipt = await tx.wait();balance = await swap.tokenBalance(USDC);console.log(`Поточний баланс USDC = ${balance}`);expect(balance).not.equal(0);});

Результат тесту повинен виглядати так, як показано нижче:

Баланс USDC кита: 170961218210457n

Почалася імітація.

Виконано імітацію.

Поточний баланс USDC = 100000000

Обмін 100 USDC

Поточний баланс USDC = 91677417

Після того, як ми перестрибнули через перешкоди, ми втратили гроші - очевидно, що шлях зі ставками на місці не був нашою перевагою, але ви уявляєте, як треба виконувати трикутну арбітражу, використовуючи багатоскокові свопи на Uniswap v3.

Флеш-кредитом фінансується трикутна арбітражна угода

Чи я не казавнайпотужніше джерело фінансування в екосистемі DeFi - це Flash loan? Вам не знадобиться багато креативності, щоб скласти стратегію торгівлі трикутною арбітражною фінансовою позикою, використовуючи як фінансову позику, так і багатократні обміни, про які я вчив. Об'єднана логіка може бути пояснена оновленою діаграмою послідовності, яка наведена нижче:

Діаграма послідовності для флеш-кредитування фінансового трікутного арбітражу на Uniswap v3 (Ігнорували деякі операції для спрощення)

Перевірте мій вихідний код для реалізації як Flash loan, так і Multihop swaps на Uniswap v3 — https://medium.com/cryptocurrency-scripts/flash-loan-on-uniswap-v3-84bca2bfe255, усвідомте послідовність діаграми та зробіть своє домашнє завдання, щоб завершити узгодження смарт-контрактів.

Розгляди щодо прибутковості

Перша річ, на яку ми хочемо звернути увагу, - це шлях, який складається з послідовності з трьох угод: Щоб бути прибутковими, вони повинні бути правильними 3 парами криптовалют за правильними тарифами. Щоб знайти всю цю правильність, потрібно розробити програму, яка переставляє торгові пари в шаблоні трикутної арбітражної угоди та моделює обміни для перевірки прибутковості. Отримання тарифів з блокчейну може бути повільним, і це ще більше сповільнить процес, якщо є занадто багато шляхів, які чекають на перевірку щодо прибутковості. Ви можете бажати скоротити список трикутних шляхів, розраховуючи Прибуток & Збиток на основі цін поверхні, наданих кінцевими точками цін DEX, якщо такі єось приходить Uniswap v3’s) , оскільки API GraphQL набагато швидше, ніж блокчейн, надають дані про котирування. Як тільки шляхи будуть відібрані, виконайте їх з цитатами, отриманими з ланцюжка, для більш точного обчислення Прибутку & Збитків.

Збільшення вашого інвестиційного портфеля за допомогою Flash-кредитуможе подовжити прибуток — позичання токенів під низький відсоток та їх інвестування з прибутковою стратегією завжди буде гарою ідеєю. Теоретично, поки валовий прибуток достатній для покриття витрат на швидкий кредит та обмінні комісії, стратегія трикутного арбітражу буде вважатися прибутковою. Один важливий трюк для захисту вашого прибутку та пом'якшення загального торгівельного ризику полягає в тому, щоб мати логіку в вашому торгівельному контракті, щоб скасувати трансакцію швидкого кредиту, якщо перевірка валової прибутковості не вдасться, тому що, коли трансакція не вдасться, всі операції будуть повернуті, і вам не потрібно нести збитки, навіть комісії за трансакцію. Ця логіка буде працювати як універсальний бар'єр, щоб запобігти ковзанню або руху обмінного курсу, який не в нашу користь.

Про це сказавши, незалежно від успіху чи невдачі угоди, плата за газ - це щось, від чого ви ніколи не зможете відмовитися і це може бути основною причиною втрати грошей від трикутної арбітражної угоди. Завжди оцінюйте плату за газ для угоди вашої стратегії та враховуйте це при розрахунку чистого прибутку. Будь ласка, посилайтеся на тести оцінки плати за газ у моєму вихідному коді.

Відмова:

  1. Ця стаття передрукована з [Скрипти криптовалют], Усі авторські права належать оригінальному автору [Аарон Лі]. Якщо є заперечення до цього перепублікування, будь ласка, зв'яжіться з Gate Learnкоманда, і вони оперативно займуться цим.
  2. Відповідальність за відмову: Погляди та думки, висловлені в цій статті, є виключно поглядами автора і не становлять жодної інвестиційної поради.
  3. Переклади статті на інші мови виконуються командою Gate Learn. Якщо не зазначено інше, копіювання, поширення або плагіат перекладених статей заборонені.
Bắt đầu giao dịch
Đăng ký và giao dịch để nhận phần thưởng USDTEST trị giá
$100
$5500