Разработка контрактов: 7 полезных советов для помощи проектам DeFi

robot
Генерация тезисов в процессе

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

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

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

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

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

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

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

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

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

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

Используйте исключения для передачи информации, используйте блок try-catch для оценки транзакции

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

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

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

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

Способ расчета дохода через Share

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

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

Сочетание данных на цепочке и вне цепочки

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

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

Проект может содержать несколько фактически развернутых контрактов. Даже если развернут только один контракт, код может быть разделен на несколько контрактов через наследование для облегчения обслуживания.

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

Резюме

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

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

DEFI-2.36%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 4
  • Поделиться
комментарий
0/400
New_Ser_Ngmivip
· 07-13 10:26
Вот это еще Новичок
Посмотреть ОригиналОтветить0
gas_fee_traumavip
· 07-12 21:18
Контракт труден, брат.
Посмотреть ОригиналОтветить0
SchrodingerAirdropvip
· 07-12 21:18
Ренессанс, я перерождаюсь в необычной торговле
Посмотреть ОригиналОтветить0
degenwhisperervip
· 07-12 21:17
v3 в конечном счете все равно недостаточно гибок
Посмотреть ОригиналОтветить0
  • Закрепить