Недавно, разрабатывая проект децентрализованной биржи, я ознакомился с кодом некоторых известных DEX и научился множеству интересных приемов разработки контрактов. Будучи новичком в разработке DeFi, я получил много вдохновения от этих приемов и уверен, что они также помогут другим, кто хочет изучать разработку смарт-контрактов.
Адрес предсказательного контракта
Обычно адреса деплоенных контрактов выглядят случайными, так как они связаны с nonce. Но в некоторых случаях нам нужно вывести адрес контракта, основываясь на информации о транзакциях. Это можно сделать, используя способ CREATE2 для создания контракта, добавив параметр salt при создании контракта. Таким образом, сгенерированный адрес предсказуем, и следует логике "новый адрес = hash('0xFF', адрес создателя, salt, initcode)".
Использование обратных функций
В некоторых сценариях вызов метода контракта B из контракта A полезен, когда B вызывает A обратно в вызываемом методе. Например, в DEX, когда вызывается метод swap контракта торгового пула, он вызывает swapCallback, передавая фактическое количество необходимых токенов. Вызывающая сторона должна перевести необходимые токены в торговый пул в обратном вызове, что обеспечивает полное выполнение и безопасность метода swap.
Передача информации с помощью исключений
При оценке сделки можно обернуть выполнение метода swap в блок try-catch. Поскольку во время оценки токены фактически не обмениваются, возникнет ошибка. В колбэк-функции можно выбросить специальную ошибку, а затем поймать и извлечь необходимую информацию. Этот метод позволяет избежать изменения метода swap специально для нужд оценки, делая логику более простой.
Проблема точности обработки больших чисел
При расчете цен и ликвидности, чтобы избежать потерь точности, вызванных делением, можно сначала сдвинуть значение влево на 96 бит, ( что эквивалентно умножению на 2^96), а затем выполнить расчет. Хотя теоретически все еще может быть небольшая потеря точности, она находится в допустимых пределах.
Расчет дохода по способу Share
Что касается дохода от комиссионных для поставщиков ликвидности, нет необходимости фиксировать каждую сделку. Можно зафиксировать общую комиссию и комиссию, причитающуюся за каждую единицу ликвидности, а при выводе LP рассчитывать сумму, которую можно вывести, исходя из удерживаемой ликвидности. Это похоже на принцип выплаты дивидендов по акциям.
Сочетание данных на цепочке и вне цепочки
Не вся информация требует записи в блокчейн или получения из него. Например, списки торговых пулов, информация и т. д. могут храниться в традиционной базе данных и периодически синхронизироваться с блокчейном. Это может повысить эффективность и снизить затраты. Конечно, ключевые транзакции все же должны выполняться в блокчейне.
Разделение контрактов и использование стандартных контрактов
Крупные проекты могут быть разбиты на несколько фактических развертываемых контрактов или разделены по коду через наследование. Также можно использовать существующие стандартные контракты, такие как ERC721, для повышения эффективности разработки. Например, использование NFT для управления ликвидными позициями.
Чтобы глубже понять эти приемы, лучший способ - это самостоятельно разработать упрощенную версию DEX. На практике вы более глубоко поймете различные дизайнерские идеи и сможете узнать больше полезных знаний. Надеюсь, что эти рекомендации будут для вас вдохновляющими и полезными.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
10 Лайков
Награда
10
2
Поделиться
комментарий
0/400
AirdropHustler
· 07-19 11:31
Эти навыки разработки, похоже, приносят небольшую прибыль для Brother.
7 практических советов по разработке смарт-контрактов для поддержки DEX проектов
Советы по разработке контрактов
Недавно, разрабатывая проект децентрализованной биржи, я ознакомился с кодом некоторых известных DEX и научился множеству интересных приемов разработки контрактов. Будучи новичком в разработке DeFi, я получил много вдохновения от этих приемов и уверен, что они также помогут другим, кто хочет изучать разработку смарт-контрактов.
Адрес предсказательного контракта
Обычно адреса деплоенных контрактов выглядят случайными, так как они связаны с nonce. Но в некоторых случаях нам нужно вывести адрес контракта, основываясь на информации о транзакциях. Это можно сделать, используя способ CREATE2 для создания контракта, добавив параметр salt при создании контракта. Таким образом, сгенерированный адрес предсказуем, и следует логике "новый адрес = hash('0xFF', адрес создателя, salt, initcode)".
Использование обратных функций
В некоторых сценариях вызов метода контракта B из контракта A полезен, когда B вызывает A обратно в вызываемом методе. Например, в DEX, когда вызывается метод swap контракта торгового пула, он вызывает swapCallback, передавая фактическое количество необходимых токенов. Вызывающая сторона должна перевести необходимые токены в торговый пул в обратном вызове, что обеспечивает полное выполнение и безопасность метода swap.
Передача информации с помощью исключений
При оценке сделки можно обернуть выполнение метода swap в блок try-catch. Поскольку во время оценки токены фактически не обмениваются, возникнет ошибка. В колбэк-функции можно выбросить специальную ошибку, а затем поймать и извлечь необходимую информацию. Этот метод позволяет избежать изменения метода swap специально для нужд оценки, делая логику более простой.
Проблема точности обработки больших чисел
При расчете цен и ликвидности, чтобы избежать потерь точности, вызванных делением, можно сначала сдвинуть значение влево на 96 бит, ( что эквивалентно умножению на 2^96), а затем выполнить расчет. Хотя теоретически все еще может быть небольшая потеря точности, она находится в допустимых пределах.
Расчет дохода по способу Share
Что касается дохода от комиссионных для поставщиков ликвидности, нет необходимости фиксировать каждую сделку. Можно зафиксировать общую комиссию и комиссию, причитающуюся за каждую единицу ликвидности, а при выводе LP рассчитывать сумму, которую можно вывести, исходя из удерживаемой ликвидности. Это похоже на принцип выплаты дивидендов по акциям.
Сочетание данных на цепочке и вне цепочки
Не вся информация требует записи в блокчейн или получения из него. Например, списки торговых пулов, информация и т. д. могут храниться в традиционной базе данных и периодически синхронизироваться с блокчейном. Это может повысить эффективность и снизить затраты. Конечно, ключевые транзакции все же должны выполняться в блокчейне.
Разделение контрактов и использование стандартных контрактов
Крупные проекты могут быть разбиты на несколько фактических развертываемых контрактов или разделены по коду через наследование. Также можно использовать существующие стандартные контракты, такие как ERC721, для повышения эффективности разработки. Например, использование NFT для управления ликвидными позициями.
Чтобы глубже понять эти приемы, лучший способ - это самостоятельно разработать упрощенную версию DEX. На практике вы более глубоко поймете различные дизайнерские идеи и сможете узнать больше полезных знаний. Надеюсь, что эти рекомендации будут для вас вдохновляющими и полезными.