Поделимся небольшими советами по разработке контрактов
Недавно, участвуя в проекте по разработке децентрализованной биржи, я узнал несколько интересных приемов разработки контрактов. Эти приемы могут быть очень полезны для новичков, только начинающих знакомиться с разработкой смарт-контрактов.
Предсказуемый адрес контракта
Используя оператор CREATE2, мы можем развернуть контракты с предсказуемыми адресами. Конкретный метод заключается в добавлении параметра salt при создании контракта:
солидность
pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());
Адрес контракта, сгенерированный таким образом, можно вычислить по соответствующим параметрам, что очень полезно во многих сценариях.
Умное использование колбэк-функций
В некоторых случаях полезно, чтобы контракт A вызывал метод контракта B, а затем B вызывал бы какой-либо метод A. Например, в DEX при вызове метода swap происходит обратный вызов swapCallback, в котором завершается перевод токенов, что обеспечивает целостность и безопасность всего процесса сделки.
Передача информации с помощью исключений
Иногда можно ловко использовать try-catch для захвата определенных исключений и получения информации. Например, при имитации торговли можно захватить определенное исключение, выбрасываемое методом swap, чтобы получить оценочные данные, не изменяя сам метод swap.
Гарантия точности больших чисел
При проведении финансовых расчетов, чтобы избежать потерь точности, вызванных операцией деления, можно сначала выполнить операцию сдвига влево, ( эквивалентно умножению на 2^96). После завершения вычислений следует выполнить сдвиг вправо, таким образом можно обеспечить точность без переполнения.
Расчет дохода в режиме Share
В сценариях, где необходимо распределение доходов, можно использовать модель, аналогичную дивидендам акций. Нужно просто зафиксировать общий доход и доход на единицу, а при выводе пользователи могут рассчитывать свою долю в зависимости от своей доли, что позволяет избежать частого обновления записей о доходах для каждого пользователя.
Разумное использование данных вне цепочки
Не все данные необходимо хранить в блокчейне. Некоторые сведения, не касающиеся ключевой логики сделок, могут храниться в традиционных базах данных и извлекаться через Web2 API, что позволяет снизить затраты и повысить эффективность.
Разделение и повторное использование контрактов
Крупные проекты обычно разделяют контракты на несколько модулей, которые комбинируются с помощью наследования. Также следует эффективно использовать существующие стандартные контракты, такие как ERC721 и другие, что может повысить эффективность разработки и качество кода.
Эти методы хоть и простые, но очень полезные, надеюсь, они вдохновят всех на разработку смарт-контрактов. Чтобы действительно овладеть этими методами, лучший способ - это практиковаться самостоятельно, применять и испытывать их в реальных проектах.
Посмотреть Оригинал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
26 Лайков
Награда
26
9
Поделиться
комментарий
0/400
GateUser-a180694b
· 2ч назад
Хорошо написано, если бы было больше примеров, было бы еще лучше.
Посмотреть ОригиналОтветить0
MetaMisfit
· 4ч назад
Слишком базово, не так ли?
Посмотреть ОригиналОтветить0
ProbablyNothing
· 07-13 01:00
Слишком лень, просто запрашивайте библиотеку.
Посмотреть ОригиналОтветить0
TeaTimeTrader
· 07-11 02:06
Учебное пособие по основным навыкам для начального контракта
Посмотреть ОригиналОтветить0
FudVaccinator
· 07-11 02:04
Понимающие понимают, что предсказание адреса развертывания действительно прекрасно.
Посмотреть ОригиналОтветить0
HackerWhoCares
· 07-11 02:03
Убегаю, убегаю, новичок-программист снова пришел за знаниями.
Посмотреть ОригиналОтветить0
SchrodingerProfit
· 07-11 02:03
Да это всего лишь несколько приемов... всё это старая песня.
Семь практических советов по разработке смарт-контрактов
Поделимся небольшими советами по разработке контрактов
Недавно, участвуя в проекте по разработке децентрализованной биржи, я узнал несколько интересных приемов разработки контрактов. Эти приемы могут быть очень полезны для новичков, только начинающих знакомиться с разработкой смарт-контрактов.
Предсказуемый адрес контракта
Используя оператор CREATE2, мы можем развернуть контракты с предсказуемыми адресами. Конкретный метод заключается в добавлении параметра salt при создании контракта:
солидность pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());
Адрес контракта, сгенерированный таким образом, можно вычислить по соответствующим параметрам, что очень полезно во многих сценариях.
Умное использование колбэк-функций
В некоторых случаях полезно, чтобы контракт A вызывал метод контракта B, а затем B вызывал бы какой-либо метод A. Например, в DEX при вызове метода swap происходит обратный вызов swapCallback, в котором завершается перевод токенов, что обеспечивает целостность и безопасность всего процесса сделки.
Передача информации с помощью исключений
Иногда можно ловко использовать try-catch для захвата определенных исключений и получения информации. Например, при имитации торговли можно захватить определенное исключение, выбрасываемое методом swap, чтобы получить оценочные данные, не изменяя сам метод swap.
Гарантия точности больших чисел
При проведении финансовых расчетов, чтобы избежать потерь точности, вызванных операцией деления, можно сначала выполнить операцию сдвига влево, ( эквивалентно умножению на 2^96). После завершения вычислений следует выполнить сдвиг вправо, таким образом можно обеспечить точность без переполнения.
Расчет дохода в режиме Share
В сценариях, где необходимо распределение доходов, можно использовать модель, аналогичную дивидендам акций. Нужно просто зафиксировать общий доход и доход на единицу, а при выводе пользователи могут рассчитывать свою долю в зависимости от своей доли, что позволяет избежать частого обновления записей о доходах для каждого пользователя.
Разумное использование данных вне цепочки
Не все данные необходимо хранить в блокчейне. Некоторые сведения, не касающиеся ключевой логики сделок, могут храниться в традиционных базах данных и извлекаться через Web2 API, что позволяет снизить затраты и повысить эффективность.
Разделение и повторное использование контрактов
Крупные проекты обычно разделяют контракты на несколько модулей, которые комбинируются с помощью наследования. Также следует эффективно использовать существующие стандартные контракты, такие как ERC721 и другие, что может повысить эффективность разработки и качество кода.
Эти методы хоть и простые, но очень полезные, надеюсь, они вдохновят всех на разработку смарт-контрактов. Чтобы действительно овладеть этими методами, лучший способ - это практиковаться самостоятельно, применять и испытывать их в реальных проектах.