DEX контракт разработка обязательные семь главных советов Новичок обязательно прочитает

Советы по разработке контрактов

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

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

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

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

Один из способов заключается в использовании CREATE2 для создания контракта, добавив параметр salt, чтобы сгенерированный адрес был предсказуемым. Формула для расчета нового адреса:

Новый адрес = hash("0xFF", адрес создателя, соль, initcode)

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

Умное использование колбэк-функций

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

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

Передача информации с помощью исключений

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

Этот метод позволяет избежать специальной модификации метода обмена для прогнозируемого спроса, сохраняя логику простой.

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

Проблемы точности обработки больших чисел

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

Вычисление дохода в режиме Share

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

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

Комбинация данных на цепочке и вне ее

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

Разделение и повторное использование контрактов

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

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

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

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 10
  • Репост
  • Поделиться
комментарий
0/400
DiamondHandsvip
· 08-08 22:41
create2 прямая токен
Посмотреть ОригиналОтветить0
UnluckyMinervip
· 08-07 07:50
Больше публикуйте фрагменты кода
Посмотреть ОригиналОтветить0
BridgeJumpervip
· 08-07 04:50
Копирование тоже искусство.
Посмотреть ОригиналОтветить0
nft_widowvip
· 08-06 21:36
Хорошая статья должна быть поддержана
Посмотреть ОригиналОтветить0
LiquidityWizardvip
· 08-05 23:03
Адрес прогнозирование очень важно.
Посмотреть ОригиналОтветить0
ImpermanentLossFanvip
· 08-05 23:01
Слов слишком мало, не хватает.
Посмотреть ОригиналОтветить0
LightningLadyvip
· 08-05 23:01
ценные идеи满满有料
Посмотреть ОригиналОтветить0
DeFi_Dad_Jokesvip
· 08-05 22:50
Выделите важное, сохраните и посмотрите.
Посмотреть ОригиналОтветить0
gas_fee_therapistvip
· 08-05 22:45
Газ花太值了
Посмотреть ОригиналОтветить0
PaperHandSistervip
· 08-05 22:43
рост знаний, братцы
Посмотреть ОригиналОтветить0
Подробнее
  • Закрепить