Анализ исходного кода Uniswap: 7 советов по разработке контрактов для начинающих в DEX

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

Полезные советы по разработке контрактов: ценный опыт, полученный из кода Uniswap

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

Давайте теперь вместе рассмотрим эти полезные маленькие советы, некоторые из которых можно назвать хитростями.

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

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

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

Можно создать контракт с использованием метода CREATE2, добавив параметр salt, таким образом сгенерированный адрес будет предсказуемым. Логика генерации адреса: новый адрес = hash("0xFF", адрес создателя, salt, initcode).

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

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

В Solidity контракты могут вызывать друг друга. Иногда метод A вызывает метод B, а B в вызываемом методе вызывает обратно A, что в некоторых сценариях очень полезно.

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

Используйте исключения для передачи информации, реализуйте оценку сделки с помощью try-catch

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

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

Использование больших чисел для решения проблем точности

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

Расчет дохода с помощью Share

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

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

Хранение части информации вне цепи

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

Разумное разделение контрактов, использование существующих стандартов

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

Резюме

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

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

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 5
  • Поделиться
комментарий
0/400
SelfSovereignStevevip
· 7ч назад
Новичок, не стоит жестко ковырять исходный код.
Посмотреть ОригиналОтветить0
TooScaredToSellvip
· 7ч назад
Зачем учить это, всё равно потеряешь деньги.
Посмотреть ОригиналОтветить0
ChainMaskedRidervip
· 7ч назад
Пришла радость для новичков DEX
Посмотреть ОригиналОтветить0
OnchainUndercovervip
· 7ч назад
Учиться U так же легко, как списывать домашку.
Посмотреть ОригиналОтветить0
PretendingSeriousvip
· 8ч назад
Эм, ценные идеи полны.
Посмотреть ОригиналОтветить0
  • Закрепить