Нещодавно, беручи участь у проекті розробки децентралізованої біржі, я дізнався кілька цікавих прийомів розробки контрактів. Ці прийоми можуть бути дуже корисними для новачків, які лише починають знайомитися з розробкою смарт-контрактів.
Прогнозована адреса контракту
Використовуючи операцію CREATE2, ми можемо розгортати контракти з передбачуваними адресами. Конкретний метод полягає у додаванні параметра salt під час створення контракту:
солідність
pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());
Адреса контракту, згенерована таким чином, може бути обчислена за допомогою відповідних параметрів, що є дуже корисним у багатьох ситуаціях.
Розумне використання функцій зворотного виклику
У деяких випадках виклик методу контракту B з контракту A є корисною моделлю, коли B потім викликає метод A. Наприклад, у DEX, коли викликається метод swap, буде викликано swapCallback, у якому завершиться переказ токенів, що забезпечить цілісність та безпеку всього процесу交易.
Використання виключень для передачі інформації
Іноді можна майстерно використовувати try-catch для захоплення специфічних виключень для отримання інформації. Наприклад, при симуляції торгівлі можна отримати прогнозовані дані, захоплюючи специфічні виключення, які викидаються методом swap, не вносячи спеціальні зміни в метод swap.
Гарантія точності великих обчислень
При виконанні фінансових розрахунків, щоб уникнути втрат точності, викликаних дією ділення, можна спочатку виконати операцію зсуву вліво (, що еквівалентно множенню на 2^96). Після завершення обчислень слід виконати зсув вправо, що дозволяє забезпечити точність без переповнення.
Розрахунок доходу в режимі Share
Для ситуацій, в яких потрібно розподілити прибуток, можна використовувати модель, подібну до виплати дивідендів акцій. Потрібно лише зафіксувати загальний прибуток та прибуток на одиницю, а користувач під час виведення коштів розраховує свою частку на основі власної частки, що дозволяє уникнути частих оновлень записів прибутку для кожного користувача.
Раціональне використання даних поза ланцюгом
Не всі дані потрібно зберігати в блокчейні. Деяка інформація, яка не стосується критичної торгової логіки, може зберігатися в традиційних базах даних і отримуватися через Web2 API, що дозволяє знизити витрати та підвищити ефективність.
Розподіл і повторне використання контрактів
Великі проекти зазвичай розділяють контракти на кілька модулів, використовуючи їх у комбінації через успадкування. Водночас слід ефективно використовувати існуючі стандартні контракти, такі як ERC721 тощо, що може підвищити ефективність розробки та якість коду.
Ці маленькі, але дуже корисні поради, сподіваюся, надихнуть всіх на розробку смарт-контрактів. Щоб дійсно оволодіти цими прийомами, найкращий спосіб - це практикуватися самому, застосовуючи їх у реальних проектах.
Переглянути оригінал
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.
25 лайків
Нагородити
25
8
Поділіться
Прокоментувати
0/400
MetaMisfit
· 55хв. тому
Це занадто базово, чи не так?
Переглянути оригіналвідповісти на0
ProbablyNothing
· 22год тому
Занадто лінивий, просто дістаємо з бібліотеки.
Переглянути оригіналвідповісти на0
TeaTimeTrader
· 07-11 02:06
Посібник з основних навичок для початкових контрактів
Переглянути оригіналвідповісти на0
FudVaccinator
· 07-11 02:04
Знаючі це знають, прогнозування адреси розгортання дійсно смачне
Переглянути оригіналвідповісти на0
HackerWhoCares
· 07-11 02:03
Пішов, пішов, новачок-програміст знову прийшов за порадами.
Переглянути оригіналвідповісти на0
SchrodingerProfit
· 07-11 02:03
Такі трюки... це все старі істини.
Переглянути оригіналвідповісти на0
MonkeySeeMonkeyDo
· 07-11 01:55
Вже досвідчений у контрактах, так? Залишайся на зв'язку~
Сім корисних порад з розробки смартконтрактів
Поради щодо розробки контрактів
Нещодавно, беручи участь у проекті розробки децентралізованої біржі, я дізнався кілька цікавих прийомів розробки контрактів. Ці прийоми можуть бути дуже корисними для новачків, які лише починають знайомитися з розробкою смарт-контрактів.
Прогнозована адреса контракту
Використовуючи операцію CREATE2, ми можемо розгортати контракти з передбачуваними адресами. Конкретний метод полягає у додаванні параметра salt під час створення контракту:
солідність pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());
Адреса контракту, згенерована таким чином, може бути обчислена за допомогою відповідних параметрів, що є дуже корисним у багатьох ситуаціях.
Розумне використання функцій зворотного виклику
У деяких випадках виклик методу контракту B з контракту A є корисною моделлю, коли B потім викликає метод A. Наприклад, у DEX, коли викликається метод swap, буде викликано swapCallback, у якому завершиться переказ токенів, що забезпечить цілісність та безпеку всього процесу交易.
Використання виключень для передачі інформації
Іноді можна майстерно використовувати try-catch для захоплення специфічних виключень для отримання інформації. Наприклад, при симуляції торгівлі можна отримати прогнозовані дані, захоплюючи специфічні виключення, які викидаються методом swap, не вносячи спеціальні зміни в метод swap.
Гарантія точності великих обчислень
При виконанні фінансових розрахунків, щоб уникнути втрат точності, викликаних дією ділення, можна спочатку виконати операцію зсуву вліво (, що еквівалентно множенню на 2^96). Після завершення обчислень слід виконати зсув вправо, що дозволяє забезпечити точність без переповнення.
Розрахунок доходу в режимі Share
Для ситуацій, в яких потрібно розподілити прибуток, можна використовувати модель, подібну до виплати дивідендів акцій. Потрібно лише зафіксувати загальний прибуток та прибуток на одиницю, а користувач під час виведення коштів розраховує свою частку на основі власної частки, що дозволяє уникнути частих оновлень записів прибутку для кожного користувача.
Раціональне використання даних поза ланцюгом
Не всі дані потрібно зберігати в блокчейні. Деяка інформація, яка не стосується критичної торгової логіки, може зберігатися в традиційних базах даних і отримуватися через Web2 API, що дозволяє знизити витрати та підвищити ефективність.
Розподіл і повторне використання контрактів
Великі проекти зазвичай розділяють контракти на кілька модулів, використовуючи їх у комбінації через успадкування. Водночас слід ефективно використовувати існуючі стандартні контракти, такі як ERC721 тощо, що може підвищити ефективність розробки та якість коду.
Ці маленькі, але дуже корисні поради, сподіваюся, надихнуть всіх на розробку смарт-контрактів. Щоб дійсно оволодіти цими прийомами, найкращий спосіб - це практикуватися самому, застосовуючи їх у реальних проектах.