Полезные советы по разработке контрактов: ценный опыт, полученный из кода Uniswap
Недавно, разрабатывая руководство по децентрализованной бирже, я обратился к коду реализации известного DEX и узнал много интересных моментов. Как новичок, который ранее разрабатывал только простые NFT-контракты, впервые пробуя разработку Defi-контрактов, эти советы должны быть очень полезны для разработчиков, желающих начать.
Давайте теперь вместе рассмотрим эти полезные маленькие советы, некоторые из которых можно назвать хитростями.
Предсказуемый адрес развертывания контрактов
Обычно адреса развернутых контрактов выглядят случайными, потому что они связаны с nonce. Но в некоторых сценариях нам нужно вывести адрес контракта, используя информацию о сделках, что полезно при определении прав на транзакции или получении адреса пула.
Можно создать контракт с использованием метода CREATE2, добавив параметр salt, таким образом сгенерированный адрес будет предсказуемым. Логика генерации адреса: новый адрес = hash("0xFF", адрес создателя, salt, initcode).
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Использование больших чисел для решения проблем точности
В сложных вычислениях, чтобы избежать потери точности при делении, можно сначала сдвинуть влево на 96 бит ), что эквивалентно умножению на 2^96(, а затем выполнить деление, сдвинув вправо. Таким образом, можно гарантировать точность при условии, что не произойдет переполнение. Потеря точности на минимальной единице обычно приемлема.
Расчет дохода с помощью Share
Для расчета доходности LP не нужно записывать каждую сделку. Можно записывать общие комиссионные и долю, которую должен получить каждый ликвидный актив, а при выводе LP рассчитывать на основе удерживаемой ликвидности. Это похоже на дивиденды по акциям, нужно лишь знать историю доходности на акцию и время последнего вывода.
![Серия для новичков Web3: маленькие советы по разработке контрактов, которые я узнал из кода Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Хранение части информации вне цепи
Хранение данных в блокчейне относительно дорого, не вся информация должна быть записана в блокчейн. Например, списки транзакционных пулов и информация могут храниться в обычной базе данных и периодически синхронизироваться с блокчейном. Некоторые продвинутые RPC-интерфейсы также предлагают более быстрый и дешевый способ получения данных.
Разумное разделение контрактов, использование существующих стандартов
Проект может содержать несколько фактически развернутых контрактов. Даже если развернут только один, его можно разделить на несколько контрактов с помощью наследования. Также можно использовать существующие стандартные контракты, такие как ERC721, для повышения эффективности разработки.
Резюме
Создайте простую версию DEX самостоятельно, чтобы глубже понять реализацию кода и узнать больше полезных знаний из практических проектов. Рекомендуем заинтересованным друзьям попробовать шаг за шагом следовать соответствующим учебным пособиям, и, уверены, вы получите большой опыт.
![Web3 новичок серия: маленькие советы по разработке контрактов, которые я узнал из кода Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Анализ исходного кода Uniswap: 7 советов по разработке контрактов для начинающих в DEX
Полезные советы по разработке контрактов: ценный опыт, полученный из кода Uniswap
Недавно, разрабатывая руководство по децентрализованной бирже, я обратился к коду реализации известного DEX и узнал много интересных моментов. Как новичок, который ранее разрабатывал только простые NFT-контракты, впервые пробуя разработку Defi-контрактов, эти советы должны быть очень полезны для разработчиков, желающих начать.
Давайте теперь вместе рассмотрим эти полезные маленькие советы, некоторые из которых можно назвать хитростями.
Предсказуемый адрес развертывания контрактов
Обычно адреса развернутых контрактов выглядят случайными, потому что они связаны с nonce. Но в некоторых сценариях нам нужно вывести адрес контракта, используя информацию о сделках, что полезно при определении прав на транзакции или получении адреса пула.
Можно создать контракт с использованием метода CREATE2, добавив параметр salt, таким образом сгенерированный адрес будет предсказуемым. Логика генерации адреса: новый адрес = hash("0xFF", адрес создателя, salt, initcode).
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Использование больших чисел для решения проблем точности
В сложных вычислениях, чтобы избежать потери точности при делении, можно сначала сдвинуть влево на 96 бит ), что эквивалентно умножению на 2^96(, а затем выполнить деление, сдвинув вправо. Таким образом, можно гарантировать точность при условии, что не произойдет переполнение. Потеря точности на минимальной единице обычно приемлема.
Расчет дохода с помощью Share
Для расчета доходности LP не нужно записывать каждую сделку. Можно записывать общие комиссионные и долю, которую должен получить каждый ликвидный актив, а при выводе LP рассчитывать на основе удерживаемой ликвидности. Это похоже на дивиденды по акциям, нужно лишь знать историю доходности на акцию и время последнего вывода.
![Серия для новичков Web3: маленькие советы по разработке контрактов, которые я узнал из кода Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(
Хранение части информации вне цепи
Хранение данных в блокчейне относительно дорого, не вся информация должна быть записана в блокчейн. Например, списки транзакционных пулов и информация могут храниться в обычной базе данных и периодически синхронизироваться с блокчейном. Некоторые продвинутые RPC-интерфейсы также предлагают более быстрый и дешевый способ получения данных.
Разумное разделение контрактов, использование существующих стандартов
Проект может содержать несколько фактически развернутых контрактов. Даже если развернут только один, его можно разделить на несколько контрактов с помощью наследования. Также можно использовать существующие стандартные контракты, такие как ERC721, для повышения эффективности разработки.
Резюме
Создайте простую версию DEX самостоятельно, чтобы глубже понять реализацию кода и узнать больше полезных знаний из практических проектов. Рекомендуем заинтересованным друзьям попробовать шаг за шагом следовать соответствующим учебным пособиям, и, уверены, вы получите большой опыт.
![Web3 новичок серия: маленькие советы по разработке контрактов, которые я узнал из кода Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(