Недавно, участвуя в проекте по разработке учебного пособия для децентрализованного обменника, я узнал много ценных приемов разработки контрактов, изучая код реализации Uniswap V3. Как новичку, только начинающему знакомиться с разработкой Defi контрактов, эти приемы принесли мне много вдохновения, и я уверен, что они также будут полезны другим новичкам, желающим изучить разработку контрактов.
Предсказуемый адрес контракта
Обычно при развертывании контракта получается случайный адрес, но в некоторых сценариях нам необходимо иметь возможность предсказывать адрес контракта. Uniswap использует метод CREATE2 для создания контракта, добавляя параметр salt, что позволяет предсказывать создаваемый адрес контракта. Это очень полезно в таких сценариях, как определение прав на транзакции или получение адреса пула.
Умелое использование функций обратного вызова
В некоторых сценариях взаимные вызовы контрактов очень полезны. Например, в Uniswap, когда вызывается метод swap контракта UniswapV3Pool, он вызывает swapCallback, передавая рассчитанное фактическое количество необходимых токенов. Вызывающая сторона должна передать токены в UniswapV3Pool в обратном вызове, что гарантирует полное выполнение и безопасность метода swap.
Передача информации с помощью исключений
В контракте Quoter Uniswap оберните выполнение метода swap UniswapV3Pool в блок try-catch. Это сделано для симуляции swap с целью оценки необходимых токенов для сделки, путем захвата определенных ошибок и анализа сообщений об ошибках для получения необходимых данных. Этот метод избегает необходимости специально модифицировать метод swap для оценки сделки, делая логику более простой.
Гарантия точности больших чисел
В Uniswap требуется множество вычислений, и чтобы избежать потери точности при делении, часто используется операция сдвига влево на 96 бит (, что эквивалентно умножению на 2^96). Таким образом, при нормальных торгах, не приводящих к переполнению, можно гарантировать точность вычислений. Хотя теоретически все еще может быть небольшая потеря точности, это уже приемлемо.
Расчет доходов способом Share
Чтобы избежать больших затрат газа на запись комиссии для каждого поставщика ликвидности (LP) при каждой сделке, Uniswap использует подход, похожий на дивиденды по акциям. Необходимо лишь записывать общую комиссию и комиссию, которую следует распределить на единицу ликвидности; при выводе LP комиссия рассчитывается на основе удерживаемой ликвидности.
Сочетание данных на цепи и вне цепи
Не вся информация должна извлекаться из цепочки. Например, списки пулов, информация о пулах и т.д. могут храниться в обычной базе данных и периодически синхронизироваться с цепочкой. Ключевые транзакции проводятся в цепочке, в то время как неключевую информацию можно получать более эффективно, чтобы повысить производительность и эффективность.
Разделение контрактов и повторное использование стандартных контрактов
Крупные проекты обычно содержат несколько фактически развернутых контрактов; даже если развернут только один контракт, его можно разделить на несколько контрактов с помощью наследования для упрощения обслуживания. В то же время использование уже существующих стандартных контрактов (, таких как ERC721), может повысить эффективность разработки и упростить управление.
Практика — лучший способ учиться. Реализуя простую версию децентрализованной биржи самостоятельно, вы сможете глубже понять реализацию кода Uniswap и узнать больше практических аспектов из реальных проектов. Надеюсь, что этот опыт будет полезен в вашем пути разработки контрактов.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
14 Лайков
Награда
14
7
Поделиться
комментарий
0/400
LiquidityOracle
· 08-02 23:11
Интеграция еще одной статьи для начинающих о повторном разогреве еды
Посмотреть ОригиналОтветить0
WhaleWatcher
· 08-02 19:29
Немного сложно понять, кто может объяснить create2?
Посмотреть ОригиналОтветить0
RetailTherapist
· 07-31 02:40
Лучше написать свой DEX, чтобы разыгрывать людей как лохов.
Посмотреть ОригиналОтветить0
gas_guzzler
· 07-31 02:40
Прогнозирование адреса, этот трюк насмешил, святая Uniswap
Посмотреть ОригиналОтветить0
DeFiGrayling
· 07-31 02:35
Без слов, снова эта тренировка, которая ловит новичков...
Посмотреть ОригиналОтветить0
DEXRobinHood
· 07-31 02:35
DOGE教父 сказал правильно! Отсидка в тюрьме не мечта!
Посмотреть ОригиналОтветить0
NightAirdropper
· 07-31 02:34
Говорить полдня не так приятно, как воспользоваться Срочными займами~
Семь основных приемов, которые помогут вам овладеть разработкой смарт-контрактов
Советы и心得 по разработке контрактов
Недавно, участвуя в проекте по разработке учебного пособия для децентрализованного обменника, я узнал много ценных приемов разработки контрактов, изучая код реализации Uniswap V3. Как новичку, только начинающему знакомиться с разработкой Defi контрактов, эти приемы принесли мне много вдохновения, и я уверен, что они также будут полезны другим новичкам, желающим изучить разработку контрактов.
Предсказуемый адрес контракта
Обычно при развертывании контракта получается случайный адрес, но в некоторых сценариях нам необходимо иметь возможность предсказывать адрес контракта. Uniswap использует метод CREATE2 для создания контракта, добавляя параметр salt, что позволяет предсказывать создаваемый адрес контракта. Это очень полезно в таких сценариях, как определение прав на транзакции или получение адреса пула.
Умелое использование функций обратного вызова
В некоторых сценариях взаимные вызовы контрактов очень полезны. Например, в Uniswap, когда вызывается метод swap контракта UniswapV3Pool, он вызывает swapCallback, передавая рассчитанное фактическое количество необходимых токенов. Вызывающая сторона должна передать токены в UniswapV3Pool в обратном вызове, что гарантирует полное выполнение и безопасность метода swap.
Передача информации с помощью исключений
В контракте Quoter Uniswap оберните выполнение метода swap UniswapV3Pool в блок try-catch. Это сделано для симуляции swap с целью оценки необходимых токенов для сделки, путем захвата определенных ошибок и анализа сообщений об ошибках для получения необходимых данных. Этот метод избегает необходимости специально модифицировать метод swap для оценки сделки, делая логику более простой.
Гарантия точности больших чисел
В Uniswap требуется множество вычислений, и чтобы избежать потери точности при делении, часто используется операция сдвига влево на 96 бит (, что эквивалентно умножению на 2^96). Таким образом, при нормальных торгах, не приводящих к переполнению, можно гарантировать точность вычислений. Хотя теоретически все еще может быть небольшая потеря точности, это уже приемлемо.
Расчет доходов способом Share
Чтобы избежать больших затрат газа на запись комиссии для каждого поставщика ликвидности (LP) при каждой сделке, Uniswap использует подход, похожий на дивиденды по акциям. Необходимо лишь записывать общую комиссию и комиссию, которую следует распределить на единицу ликвидности; при выводе LP комиссия рассчитывается на основе удерживаемой ликвидности.
Сочетание данных на цепи и вне цепи
Не вся информация должна извлекаться из цепочки. Например, списки пулов, информация о пулах и т.д. могут храниться в обычной базе данных и периодически синхронизироваться с цепочкой. Ключевые транзакции проводятся в цепочке, в то время как неключевую информацию можно получать более эффективно, чтобы повысить производительность и эффективность.
Разделение контрактов и повторное использование стандартных контрактов
Крупные проекты обычно содержат несколько фактически развернутых контрактов; даже если развернут только один контракт, его можно разделить на несколько контрактов с помощью наследования для упрощения обслуживания. В то же время использование уже существующих стандартных контрактов (, таких как ERC721), может повысить эффективность разработки и упростить управление.
Практика — лучший способ учиться. Реализуя простую версию децентрализованной биржи самостоятельно, вы сможете глубже понять реализацию кода Uniswap и узнать больше практических аспектов из реальных проектов. Надеюсь, что этот опыт будет полезен в вашем пути разработки контрактов.