Сім порад для розробки контрактів Uniswap: посібник для новачків

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

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

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

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

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

Зазвичай адреси контрактів, що розгортаються, виглядають випадковими, оскільки пов'язані з nonce. Але в деяких випадках нам потрібно вивести адресу контракту через інформацію про торгову пару та відповідну інформацію. Uniswap використовує метод CREATE2 для створення контракту, додаючи параметр salt, щоб згенерована адреса була прогнозованою. Логіка генерації нової адреси така: hash("0xFF", адреса творця, salt, initcode).

![Web3 Новачок серія: маленькі поради з розробки смарт-контрактів, які я навчився з коду Uniswap](https://img-cdn.gateio.im/webp-social/moments-0aaa61a4d43aba7fdeddbc55e3665305.webp01

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

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

Використання аномалій для передачі інформації

При оцінці交易, деякі платформи обгортають виконання методу swap у try catch. Оскільки оцінка не призводить до фактичного обміну токенами, це викликає помилку. Завдяки викиду спеціальної помилки у функції зворотного виклику, а потім її перехопленню та аналізу інформації про помилку, можна отримати необхідні дані. Цей метод уникає необхідності модифікувати метод swap для оцінки交易.

Гарантія точності при виконанні операцій з великими числами

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

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

Розрахунок доходу за механізмом Share

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

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

Розумне використання даних поза ланцюгом

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

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

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

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

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

UNI-11.95%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Репост
  • Поділіться
Прокоментувати
0/400
BagHolderTillRetirevip
· 07-08 01:52
Контракт настільки складний, що в мене голова йде обертом.
Переглянути оригіналвідповісти на0
RugDocScientistvip
· 07-05 04:24
Трохи щось є, брат дійсно вміє підсумовувати
Переглянути оригіналвідповісти на0
SeasonedInvestorvip
· 07-05 04:20
Ги-ги Новачок дружній, якщо не можеш навчитися, то не навчайся.
Переглянути оригіналвідповісти на0
SatoshiLegendvip
· 07-05 04:17
Технічні деталі не є достатньо повними, на рівні відстеження все ще існує кілька вразливостей... Рекомендується звернутися до вихідного коду v2
Переглянути оригіналвідповісти на0
governance_ghostvip
· 07-05 04:03
цінні інсайти收藏 后面学习用
Переглянути оригіналвідповісти на0
UnluckyValidatorvip
· 07-05 04:00
Так багато деталей, я вже не витримую.
Переглянути оригіналвідповісти на0
  • Закріпити