Семь советов по разработке контрактов Uniswap: руководство, обязательное для изучения новичками

robot
Генерация тезисов в процессе

Руководство для новичков по Web3: Советы по разработке контрактов Uniswap

Недавно, когда я писал учебник по разработке децентрализованной биржи, я обратил внимание на код реализации Uniswap V3 и узнал много интересных моментов. В качестве разработчика, который впервые пробует разрабатывать Defi контракты, эти приемы будут очень полезны новичкам, желающим изучить разработку контрактов.

Web3 Новичок серия: Маленькие советы по разработке контрактов, которые я узнал из кода Uniswap

Предсказуемый адрес развертывания контракта

Обычно адреса развернутых контрактов выглядят случайными, так как связаны с nonce. Но в некоторых случаях нам нужно вывести адрес контракта, основываясь на информации о торговых парах и связанных данных. Uniswap использует метод CREATE2 для создания контрактов, добавляя параметр salt, чтобы сгенерированные адреса были предсказуемыми. Логика генерации нового адреса следующая: hash("0xFF", адрес создателя, salt, initcode).

![Web3 Новичок серия: маленькие советы по разработке контрактов, которые я узнал из кода Uniswap](https://img-cdn.gateio.im/webp-social/moments-0aaa61a4d43aba7fdeddbc55e3665305.webp01

Умелое использование обратных функций

В некоторых сценариях взаимные вызовы между контрактами очень полезны. Например, при вызове метода swap на определенной торговой платформе, он вызовет swapCallback, передав необходимое количество токенов. Вызывающая сторона должна перевести необходимые токены в торговый пул в обратном вызове, чтобы обеспечить целостность и безопасность всей логики сделки.

Использование исключений для передачи информации

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

Гарантия точности больших чисел

При расчете цены и ликвидности, чтобы избежать потери точности из-за операции деления, можно использовать операцию сдвига влево (что эквивалентно умножению на 2^96). Таким образом, при обычной торговле без переполнения обеспечивается точность. Хотя теоретически все еще существует небольшая потеря точности, она уже приемлема.

![Web3 Новичок серия: Маленькие советы по разработке контрактов, которые я узнал из кода Uniswap])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

Расчет дохода по механизму Share

Чтобы сэкономить на расходах Gas, нельзя фиксировать комиссию для каждого поставщика ликвидности при каждой сделке. Можно зафиксировать общую комиссию и комиссию, которую должен получить каждый поставщик ликвидности, а при выводе LP комиссия рассчитывается на основе удерживаемой ликвидности. Это похоже на механизм дивидендов по акциям.

![Web3 Новичок серия: маленькие советы по разработке контрактов, которые я узнал из кода Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

Рациональное использование данных вне цепи

Не вся информация должна извлекаться из блокчейна. Например, списки торговых пулов, информация о торговых пулах и т. д. могут храниться в традиционных базах данных и периодически синхронизироваться с блокчейном. Некоторые поставщики RPC блокчейна предлагают расширенные интерфейсы, которые позволяют быстрее и экономнее получать данные.

Разделение контрактов и применение стандартных контрактов

Проект может включать несколько фактически развернутых контрактов или разбивать один контракт на несколько с помощью наследования. Использование существующих стандартных контрактов (например, ERC721) может повысить эффективность разработки. Например, некоторые платформы используют контракты ERC721 для управления позициями, что упрощает управление и повышает эффективность разработки.

Практика — лучший способ обучения. Попробуйте реализовать упрощенную версию децентрализованной биржи, чтобы глубже понять код реализации основных DEX и узнать больше о знаниях, применяемых в реальных проектах. Рекомендуется заинтересованным разработчикам обратиться к соответствующим открытым курсам и шаг за шагом завершить разработку упрощенной версии биржи.

![Web3 Новичок серия: маленькие советы по разработке контрактов, которые я узнал из кода Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(

UNI2.71%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Поделиться
комментарий
0/400
BagHolderTillRetirevip
· 07-08 01:52
Контракт настолько сложен, что у меня голова кругом.
Посмотреть ОригиналОтветить0
RugDocScientistvip
· 07-05 04:24
Да, старший брат действительно умеет подводить итоги.
Посмотреть ОригиналОтветить0
SeasonedInvestorvip
· 07-05 04:20
Хе-хе, Новичок, если не можешь научиться, не учись.
Посмотреть ОригиналОтветить0
SatoshiLegendvip
· 07-05 04:17
Технические детали не совсем полные, на уровне прослеживаемости все еще существуют несколько уязвимостей... Рекомендуется обратиться к исходному коду v2.
Посмотреть ОригиналОтветить0
governance_ghostvip
· 07-05 04:03
ценные идеи收藏 后面学习用
Посмотреть ОригиналОтветить0
UnluckyValidatorvip
· 07-05 04:00
Такое количество деталей, я не могу это вынести.
Посмотреть ОригиналОтветить0
  • Закрепить