7 корисних порад, які допоможуть вам освоїти розробку смартконтрактів

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

Хитрощі в розробці контрактів

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

Давайте разом розглянемо ці хитрі прийоми, деякі з яких можна навіть назвати дивовижними трюками.

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

передбачувана адреса розгортання контракту

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

Один з методів полягає в використанні CREATE2 для створення контракту з додаванням параметра salt: pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); Таким чином, адреса створеного контракту є передбачуваною, логіка генерування: нова адреса = hash("0xFF", адреса творця, salt, initcode).

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

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

Контракти у Solidity можуть викликати один одного. Один із шаблонів - це коли A викликає метод B, а B у викликаному методі зворотно викликає A, що є корисним у певних сценаріях.

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

використовуйте аномалії для передачі інформації, реалізуйте оцінку транзакцій за допомогою try catch

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

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

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

У сценаріях, що включають велику кількість обчислень, таких як обчислення токенів, що обмінюються за поточною ціною та ліквідністю, необхідно уникати втрати точності, викликаної операціями ділення. Один із способів - використовувати операцію зсуву вліво, наприклад, << FixedPoint96.RESOLUTION, що еквівалентно множенню на 2^96. Після зсуву, проведення операцій ділення забезпечить точність за умов, що звичайні угоди не призведуть до переповнення.

Розрахунок прибутку за допомогою Share

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

Одним із рішень є запис загальної комісії та комісії, яку слід розподілити між кожним ліквідним активом. Коли LP вилучає комісію, сума, яку можна вилучити, розраховується на основі утримуваного ліквідного активу. Це схоже на механізм, за яким акціонери отримують дивіденди.

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

Баланс отримання інформації в мережі та поза нею

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

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

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

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

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

підсумок

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

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

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Репост
  • Поділіться
Прокоментувати
0/400
ServantOfSatoshivip
· 16год тому
Дивні трюки, хіба ж це не означає провокаційні дії?
Переглянути оригіналвідповісти на0
mev_me_maybevip
· 08-11 22:32
Що нового виявив новачок? Це всього лише старі розмови.
Переглянути оригіналвідповісти на0
CommunityLurkervip
· 08-11 16:39
Новачок є, так? Рекомендуємо спочатку спробувати hello world.
Переглянути оригіналвідповісти на0
Blockwatcher9000vip
· 08-10 12:50
Говорячи красиво, це техніка, насправді це різні хитрі дії.
Переглянути оригіналвідповісти на0
OnChainDetectivevip
· 08-10 12:46
Досліджуючи створення 2, я вже давно вивчаю цю техніку, не здається, що це використовується для закладення мін... Ті, хто розуміє, розуміють.
Переглянути оригіналвідповісти на0
ContractExplorervip
· 08-10 12:42
Виявити нову вразливість — це найкраще, змагаючись з вразливістю.
Переглянути оригіналвідповісти на0
  • Закріпити