Недавно, когда я писал руководство по разработке децентрализованных бирж, я изучал код известных проектов и узнал много интересных приемов разработки смарт-контрактов. Как новичку, который впервые пытается разработать DeFi контракты, эти приемы были для меня очень вдохновляющими, и я уверен, что они также будут полезны другим, кто хочет изучать разработку контрактов.
Предсказуемый адрес контракта
Обычно адреса, получаемые при развертывании контрактов, выглядят случайными, так как они связаны с nonce. Однако в некоторых случаях нам необходимо сделать вывод о адресе контракта на основе информации о сделке, что полезно при определении прав на сделку или получении адреса пула.
Один из способов - создать контракт с помощью метода CREATE2, добавив параметр salt, чтобы адрес, который будет сгенерирован, был предсказуемым. Логика генерации нового адреса следующая: hash("0xFF", адрес создателя, salt, initcode).
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(
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
19 Лайков
Награда
19
7
Поделиться
комментарий
0/400
HappyMinerUncle
· 08-04 03:00
Это слишком сложно, ребята, майнеры, приготовьтесь к яме.
Посмотреть ОригиналОтветить0
SadMoneyMeow
· 08-03 20:33
Этот контракт слишком роскошный..
Посмотреть ОригиналОтветить0
SandwichTrader
· 08-01 04:28
Плохие, но не ружья, новые волны
Посмотреть ОригиналОтветить0
LayerZeroHero
· 08-01 03:29
Рекомендуется протестировать напрямую на dapptools, тестирование с Газ более надежно.
Посмотреть ОригиналОтветить0
hodl_therapist
· 08-01 03:21
Вы уверены, что это самые современные технологии?... Они выглядят немного устаревшими
7 полезных советов по разработке контрактов для поддержки проектов Defi
Советы по разработке контрактов
Недавно, когда я писал руководство по разработке децентрализованных бирж, я изучал код известных проектов и узнал много интересных приемов разработки смарт-контрактов. Как новичку, который впервые пытается разработать DeFi контракты, эти приемы были для меня очень вдохновляющими, и я уверен, что они также будут полезны другим, кто хочет изучать разработку контрактов.
Предсказуемый адрес контракта
Обычно адреса, получаемые при развертывании контрактов, выглядят случайными, так как они связаны с nonce. Однако в некоторых случаях нам необходимо сделать вывод о адресе контракта на основе информации о сделке, что полезно при определении прав на сделку или получении адреса пула.
Один из способов - создать контракт с помощью метода CREATE2, добавив параметр salt, чтобы адрес, который будет сгенерирован, был предсказуемым. Логика генерации нового адреса следующая: hash("0xFF", адрес создателя, salt, initcode).
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(