Аналіз коду Uniswap: 7 порад з розробки контрактів для підтримки Децентралізованих фінансів

robot
Генерація анотацій у процесі

Дивовижні ідеї для розробки контрактів: надихаючись кодом Uniswap

Нещодавно, пишучи посібник з розробки децентралізованої біржі, я глибоко вивчав код реалізації Uniswap V3 і отримав багато користі. Як розробник, який раніше створював прості контракти NFT, я вперше занурився в сферу Defi контрактів. Ось кілька маленьких порад, які, сподіваюся, будуть корисні новачкам у розробці контрактів.

Web3 новачок серія: поради з розробки контрактів, які я дізнався з коду Uniswap

Прогнозована адреса розгортання контракту

Зазвичай адреса, отримана після розгортання контракту, виглядає випадковою, оскільки пов'язана з nonce. Проте в деяких ситуаціях нам потрібно вивести адресу контракту на основі інформації про угоду та відповідних даних. Uniswap використовує метод CREATE2 для створення контрактів, додаючи параметр salt, що робить згенеровану адресу контракту передбачуваною. Цей метод дуже корисний для визначення прав доступу до угод або отримання адреси пулу.

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

Розумне використання функцій зворотного виклику

У Solidity контракти можуть викликати один одного. Метод swap Uniswap використовує механізм зворотного виклику, щоб забезпечити повне виконання логіки транзакції без необхідності складного ведення змінних для забезпечення безпеки.

Неправильна передача інформації та оцінка угод

У контракті Quoter Uniswap метод swap виконується через блок try-catch, що дозволяє вловлювати специфічні помилки для оцінки необхідних токенів для транзакції. Цей метод є як практичним, так і простим, не вимагаючи окремої модифікації методу swap для оцінки потреб.

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

Велике число вирішує проблему точності

Uniswap часто використовує операцію зсуву вліво на 96 біт (еквівалентно множенню на 2^96) під час обчислень, щоб забезпечити точність без переповнення. Цей метод особливо ефективний при обробці розрахунків цін і ліквідності.

Режим поділу обчислення прибутку

Щоб уникнути необхідності фіксувати комісії для кожного постачальника ліквідності (LP) під час кожної угоди, Uniswap використовує спосіб, подібний до дивідендів акцій. Записуючи загальну комісію та комісію, яка повинна бути розподілена між кожним постачальником ліквідності, LP може при виведенні розрахувати належний дохід на основі власної ліквідності.

Web3 новачок серія: Малі поради з розробки контрактів, які я дізнався з коду Uniswap

Стратегія отримання інформації з блокчейну

Не вся інформація повинна отримуватися з блокчейну. Наприклад, списки торгових пулів, інформація про торгові пули тощо можуть зберігатися в традиційних базах даних і періодично синхронізуватися з блокчейном. Цей підхід може суттєво підвищити ефективність і продуктивність.

Розподіл контракту та використання стандартного контракту

Великі проекти можуть містити кілька реально розгорнених контрактів або розділити один контракт на кілька шляхом наслідування. Контракт NonfungiblePositionManager Uniswap є чудовим прикладом, оскільки він успадковує кілька контрактів і використовує стандартний контракт ERC721 від OpenZeppelin.

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

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

UNI-4.59%
DEFI-6.96%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
LuckyBlindCatvip
· 07-19 21:04
Цей код зрозумілий?
Переглянути оригіналвідповісти на0
AirdropHuntressvip
· 07-19 01:08
Варто вивчити, код має певні цікаві моменти.
Переглянути оригіналвідповісти на0
MEVEyevip
· 07-18 19:39
Є кілька цікавих моментів: розкриваємо маленькі хитрощі контрактів
Переглянути оригіналвідповісти на0
UncleWhalevip
· 07-18 19:39
Зберігайте це, знадобиться для навчання розробці в майбутньому.
Переглянути оригіналвідповісти на0
MetaMaximalistvip
· 07-18 19:34
фасцинуюче розуміння стійкості протоколу. але, чесно кажучи, це базові речі веб3...
Переглянути оригіналвідповісти на0
SpeakWithHatOnvip
· 07-18 19:23
Вчитися, вчитися, а потім ще й випадати волосся, занадто важко.
Переглянути оригіналвідповісти на0
FUD_Vaccinatedvip
· 07-18 19:11
Досить жорстко, але справді корисно.
Переглянути оригіналвідповісти на0
  • Закріпити