Треугольный арбитраж на 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;

address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

адрес постоянной USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

address constant 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);   байтов памяти 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.

Далее мы рассмотрим, как определяется треугольный путь:

байт памяти путь = abi.encodePacked(USDC, uint24(3000),

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

Через abi.encodePacked, Solidity тесно упаковывает несколько значений, не добавляя никакого заполнения. Он конкатенирует сырые двоичные данные каждого параметра. Не сложно понять, что параметры последовательно обмениваются сборами между криптовалютными парами. Путь начинается с USDC и останавливается на USDC в ожидании прибыли. Затем он обертывается ExactInputParams с другими обязательными параметрами и подается в маршрутизатор для многошагового обмена.

Тестирование

Мы используем ту же технику форкнуть основную сеть с подделкой. После того как 10 USDC будет зачислено на контракт и проверено, могут быть запущены многоэтапные обмены, как показано ниже:

it("выполняет многоузловой обмен", async () => {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-кредитВам не потребуется много креативности, чтобы создать стратегию торговли треугольным арбитражем, финансируемую Flash-кредитом, используя как Flash-кредит, так и многоходовые свопы, о которых я рассказывал. Объединенная логика может быть объяснена обновленной диаграммой последовательности, приведенной ниже:

Диаграмма последовательности для треугольного арбитража, финансируемого Flash-кредитом на Uniswap v3 (некоторые операции были проигнорированы для упрощения)

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

Рассмотрение прибыльности

Первое, на что мы хотим посмотреть, - это путь, состоящий из последовательности из 3 сделок: чтобы они были прибыльными, они должны быть правильными 3 парами криптовалют по правильным курсам. Чтобы найти всю эту правильность, вам нужно разработать программу, которая переставляет торговые пары в шаблоне треугольной арбитражной торговли и моделирует обмены для проверки прибыльности. Получение курсов с блокчейна может быть медленным, и процесс еще больше замедлится, если слишком много путей ждут проверки на прибыльность. Возможно, вам захочется сузить список треугольных путей, вычислив прибыль и убытки на основе цен, предоставленных конечными точками ценообразования GraphQL DEX, если они естьздесь появляется Uniswap v3’s) , поскольку GraphQL API работают намного быстрее, чем блокчейн, чтобы предоставить данные о котировках. Как только выбраны кратчайшие пути, запустите их с котировками, полученными с цепи, для более точного расчета прибыли и убытков.

Увеличение вашего инвестиционного портфеля с помощью мгновенного кредитаможет дополнительно увеличить прибыль — занимать токены под низкий процент и инвестировать их с прибыльной стратегией всегда будет хорошей идеей. Теоретически, пока валовая прибыль позволяет покрыть заем Flash и комиссии за своп, стратегия треугольной арбитражной торговли будет считаться прибыльной. Один из ключевых трюков для защиты вашей прибыли и снижения общего торгового риска — иметь логику в вашем торговом контракте, чтобы сбой транзакции 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;

address constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

адрес постоянной USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

address constant 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);   байтов памяти 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.

Далее мы рассмотрим, как определяется треугольный путь:

байт памяти путь = abi.encodePacked(USDC, uint24(3000),

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

Через abi.encodePacked, Solidity тесно упаковывает несколько значений, не добавляя никакого заполнения. Он конкатенирует сырые двоичные данные каждого параметра. Не сложно понять, что параметры последовательно обмениваются сборами между криптовалютными парами. Путь начинается с USDC и останавливается на USDC в ожидании прибыли. Затем он обертывается ExactInputParams с другими обязательными параметрами и подается в маршрутизатор для многошагового обмена.

Тестирование

Мы используем ту же технику форкнуть основную сеть с подделкой. После того как 10 USDC будет зачислено на контракт и проверено, могут быть запущены многоэтапные обмены, как показано ниже:

it("выполняет многоузловой обмен", async () => {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-кредитВам не потребуется много креативности, чтобы создать стратегию торговли треугольным арбитражем, финансируемую Flash-кредитом, используя как Flash-кредит, так и многоходовые свопы, о которых я рассказывал. Объединенная логика может быть объяснена обновленной диаграммой последовательности, приведенной ниже:

Диаграмма последовательности для треугольного арбитража, финансируемого Flash-кредитом на Uniswap v3 (некоторые операции были проигнорированы для упрощения)

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

Рассмотрение прибыльности

Первое, на что мы хотим посмотреть, - это путь, состоящий из последовательности из 3 сделок: чтобы они были прибыльными, они должны быть правильными 3 парами криптовалют по правильным курсам. Чтобы найти всю эту правильность, вам нужно разработать программу, которая переставляет торговые пары в шаблоне треугольной арбитражной торговли и моделирует обмены для проверки прибыльности. Получение курсов с блокчейна может быть медленным, и процесс еще больше замедлится, если слишком много путей ждут проверки на прибыльность. Возможно, вам захочется сузить список треугольных путей, вычислив прибыль и убытки на основе цен, предоставленных конечными точками ценообразования GraphQL DEX, если они естьздесь появляется Uniswap v3’s) , поскольку GraphQL API работают намного быстрее, чем блокчейн, чтобы предоставить данные о котировках. Как только выбраны кратчайшие пути, запустите их с котировками, полученными с цепи, для более точного расчета прибыли и убытков.

Увеличение вашего инвестиционного портфеля с помощью мгновенного кредитаможет дополнительно увеличить прибыль — занимать токены под низкий процент и инвестировать их с прибыльной стратегией всегда будет хорошей идеей. Теоретически, пока валовая прибыль позволяет покрыть заем Flash и комиссии за своп, стратегия треугольной арбитражной торговли будет считаться прибыльной. Один из ключевых трюков для защиты вашей прибыли и снижения общего торгового риска — иметь логику в вашем торговом контракте, чтобы сбой транзакции Flash-займа, если проверка валовой прибыльности завершается неудачей, потому что когда транзакция завершается неудачно, все операции будут откатываться, и вам не нужно будет нести убытки, даже комиссии за транзакцию. Этот фрагмент логики будет работать как всеобъемлющий шлюз для предотвращения проскальзывания или изменения обменного курса, которое не в нашу пользу.

Сказав это, независимо от успеха или неудачи сделки, комиссия за газ - это нечто, от чего невозможно избавиться, и это может быть основной причиной потери денег при треугольной арбитражной сделке. Всегда оценивайте комиссию за газ для сделки по вашей стратегии и учитывайте это при расчете чистой прибыли. Пожалуйста, обратитесь к тестовым случаям оценки комиссии за газ в моем исходном коде.

Отказ от ответственности:

  1. Эта статья перепечатана из [Сценарии криптовалют], Все авторские права принадлежат оригинальному автору [Аарон Ли]. Если есть возражения по поводу этого перепечатывания, пожалуйста, свяжитесь с Gate Learnкоманда, и они незамедлительно разберутся с этим.
  2. Отказ от ответственности: Взгляды и мнения, высказанные в этой статье, являются исключительно точкой зрения автора и не являются инвестиционными советами.
  3. Переводы статьи на другие языки выполняются командой Gate Learn. Если не указано иное, копирование, распространение или плагиат переведенных статей запрещены.
Comece agora
Inscreva-se e ganhe um cupom de
$100
!