7 полезных советов по разработке контрактов для поддержки проектов Defi

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

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

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

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

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

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

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

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

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

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

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

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

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

Решение проблемы точности больших чисел

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

Способы расчета доходов

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

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

Внецепочечное хранение вспомогательной информации

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

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

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

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

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

DEFI-0.14%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 7
  • Поделиться
комментарий
0/400
HappyMinerUnclevip
· 08-04 03:00
Это слишком сложно, ребята, майнеры, приготовьтесь к яме.
Посмотреть ОригиналОтветить0
SadMoneyMeowvip
· 08-03 20:33
Этот контракт слишком роскошный..
Посмотреть ОригиналОтветить0
SandwichTradervip
· 08-01 04:28
Плохие, но не ружья, новые волны
Посмотреть ОригиналОтветить0
LayerZeroHerovip
· 08-01 03:29
Рекомендуется протестировать напрямую на dapptools, тестирование с Газ более надежно.
Посмотреть ОригиналОтветить0
hodl_therapistvip
· 08-01 03:21
Вы уверены, что это самые современные технологии?... Они выглядят немного устаревшими
Посмотреть ОригиналОтветить0
NewPumpamentalsvip
· 08-01 03:11
соль еще не на уровне, братан
Посмотреть ОригиналОтветить0
DiamondHandsvip
· 08-01 03:10
и не умею, но люблю учиться yyds
Посмотреть ОригиналОтветить0
  • Закрепить