Розвиток контрактів: 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

Поєднання даних на ланцюзі та поза ним

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

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

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

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

Підсумок

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

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

Переглянути оригінал
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.
  • Нагородити
  • 3
  • Поділіться
Прокоментувати
0/400
gas_fee_traumavip
· 5год тому
Контракт важкий, брате.
Переглянути оригіналвідповісти на0
SchrodingerAirdropvip
· 5год тому
Відродження, я переродився в аномальній торгівлі.
Переглянути оригіналвідповісти на0
degenwhisperervip
· 5год тому
v3 все ще недостатньо гнучкий
Переглянути оригіналвідповісти на0
  • Закріпити