Нещодавно, під час вивчення процесу розробки децентралізованих бірж, я виявив кілька цікавих технік розробки контрактів. Ці техніки походять з вивчення коду відомої DEX, і мають бути корисними для новачків, які хочуть розпочати розробку смарт-контрактів.
Прогнозована адреса контракту
Зазвичай адреса, отримана внаслідок розгортання контракту, здається випадковою та важкою для прогнозування. Але в певних ситуаціях нам потрібно вивести адресу контракту на основі інформації про торгові пари, що дуже корисно для визначення прав доступу до угод або отримання адреси пулу.
Можна створити контракт за допомогою методу CREATE2, додавши параметр salt, що дозволяє передбачити згенеровану адресу. Логіка обчислення нової адреси така: hash("0xFF", адреса творця, salt, initcode).
Розумне використання функцій зворотного виклику
У деяких сценаріях виклик методу контракту B з контракту A є дуже корисним. Наприклад, під час угоди контракт пулу викликає swapCallback, передаючи фактичну кількість токенів, що потрібно, а викликач у зворотному виклику передає токени. Це забезпечує цілісність та безпеку всієї логіки угоди.
Передача інформації за допомогою винятків
Під час оцінки угод можна обгорнути виконання методу swap у блок try-catch. Оскільки оцінка не призведе до фактичного обміну токенів, буде виникати помилка. Можна вивести спеціальну помилку в зворотному виклику, а потім захопити та проаналізувати необхідні дані з повідомлення про помилку. Таким чином, не потрібно спеціально модифікувати метод swap для потреб оцінки, логіка буде більш зрозумілою.
Велике число вирішує проблему точності
При обчисленні цін та ліквідності, щоб уникнути втрати точності в операціях ділення, можна спочатку зсунути вліво на 96 біт (, що еквівалентно множенню на 2^96), а потім виконати обчислення. Це дозволяє забезпечити точність без переповнення. Хоча теоретично все ще буде незначна втрата точності найменшої одиниці, в практичному застосуванні це є прийнятним.
Режим Share обчислення прибутку
При запису доходу від комісії LP не потрібно фіксувати кожну угоду для кожного LP, оскільки це буде споживати велику кількість Gas. Можна записувати лише загальну комісію та комісію, що належить за одиницю ліквідності, а під час вилучення LP обчислювати суму, яку можна вилучити, на основі утримуваної ліквідності. Схоже на принцип дивідендів у акціях.
Зберігання даних поза ланцюгом
Не вся інформація потребує зберігання в блокчейні або отримання з нього. Списки торгових пулів, інформація про пул тощо можуть зберігатися в традиційних базах даних, синхронізуючись з блокчейном періодично. Це може підвищити ефективність доступу та знизити витрати. Звичайно, ключові транзакції все ще повинні здійснюватися в блокчейні.
Розподіл та повторне використання контракту
Можна розділити проект на кілька фактичних контрактів для розгортання або розділити код на кілька контрактів для обслуговування за допомогою успадкування. Також варто використовувати існуючі стандартні контракти, такі як ERC721 тощо, щоб підвищити ефективність розробки.
Немає нічого кращого, ніж практичний досвід, навіть якщо ти прочитав багато теорії. Спроба реалізувати спрощену версію DEX допоможе тобі глибше зрозуміти різні навички розробки контрактів. Сподіваюся, ці маленькі поради стануть тобі в нагоді на шляху розробки смарт-контрактів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
8
Поділіться
Прокоментувати
0/400
CryptoGoldmine
· 11год тому
Контракт є ключовим, стабільність забезпечує ROI
Переглянути оригіналвідповісти на0
DecentralizedElder
· 12год тому
Постійно застрягав у вивченні Solidity
Переглянути оригіналвідповісти на0
OnchainDetective
· 12год тому
Дійсно добре, спочатку код, потім ривок!
Переглянути оригіналвідповісти на0
HalfBuddhaMoney
· 12год тому
Цими кількома хитрощами можна надійно отримувати прибуток з DEX.
Переглянути оригіналвідповісти на0
GasFeeVictim
· 12год тому
Вивчіть лише одну адресу прогнозу, цього достатньо.
7 контрактних розробок, які допоможуть вам стати майстром DEX
Дивовижні хитрощі розробки контрактів
Нещодавно, під час вивчення процесу розробки децентралізованих бірж, я виявив кілька цікавих технік розробки контрактів. Ці техніки походять з вивчення коду відомої DEX, і мають бути корисними для новачків, які хочуть розпочати розробку смарт-контрактів.
Прогнозована адреса контракту
Зазвичай адреса, отримана внаслідок розгортання контракту, здається випадковою та важкою для прогнозування. Але в певних ситуаціях нам потрібно вивести адресу контракту на основі інформації про торгові пари, що дуже корисно для визначення прав доступу до угод або отримання адреси пулу.
Можна створити контракт за допомогою методу CREATE2, додавши параметр salt, що дозволяє передбачити згенеровану адресу. Логіка обчислення нової адреси така: hash("0xFF", адреса творця, salt, initcode).
Розумне використання функцій зворотного виклику
У деяких сценаріях виклик методу контракту B з контракту A є дуже корисним. Наприклад, під час угоди контракт пулу викликає swapCallback, передаючи фактичну кількість токенів, що потрібно, а викликач у зворотному виклику передає токени. Це забезпечує цілісність та безпеку всієї логіки угоди.
Передача інформації за допомогою винятків
Під час оцінки угод можна обгорнути виконання методу swap у блок try-catch. Оскільки оцінка не призведе до фактичного обміну токенів, буде виникати помилка. Можна вивести спеціальну помилку в зворотному виклику, а потім захопити та проаналізувати необхідні дані з повідомлення про помилку. Таким чином, не потрібно спеціально модифікувати метод swap для потреб оцінки, логіка буде більш зрозумілою.
Велике число вирішує проблему точності
При обчисленні цін та ліквідності, щоб уникнути втрати точності в операціях ділення, можна спочатку зсунути вліво на 96 біт (, що еквівалентно множенню на 2^96), а потім виконати обчислення. Це дозволяє забезпечити точність без переповнення. Хоча теоретично все ще буде незначна втрата точності найменшої одиниці, в практичному застосуванні це є прийнятним.
Режим Share обчислення прибутку
При запису доходу від комісії LP не потрібно фіксувати кожну угоду для кожного LP, оскільки це буде споживати велику кількість Gas. Можна записувати лише загальну комісію та комісію, що належить за одиницю ліквідності, а під час вилучення LP обчислювати суму, яку можна вилучити, на основі утримуваної ліквідності. Схоже на принцип дивідендів у акціях.
Зберігання даних поза ланцюгом
Не вся інформація потребує зберігання в блокчейні або отримання з нього. Списки торгових пулів, інформація про пул тощо можуть зберігатися в традиційних базах даних, синхронізуючись з блокчейном періодично. Це може підвищити ефективність доступу та знизити витрати. Звичайно, ключові транзакції все ще повинні здійснюватися в блокчейні.
Розподіл та повторне використання контракту
Можна розділити проект на кілька фактичних контрактів для розгортання або розділити код на кілька контрактів для обслуговування за допомогою успадкування. Також варто використовувати існуючі стандартні контракти, такі як ERC721 тощо, щоб підвищити ефективність розробки.
Немає нічого кращого, ніж практичний досвід, навіть якщо ти прочитав багато теорії. Спроба реалізувати спрощену версію DEX допоможе тобі глибше зрозуміти різні навички розробки контрактів. Сподіваюся, ці маленькі поради стануть тобі в нагоді на шляху розробки смарт-контрактів.