Ф'ючерси
Сотні безстрокових контрактів
CFD
Золото
Одна платформа для світових активів
Опціони
Hot
Торгівля ванільними опціонами європейського зразка
Єдиний рахунок
Максимізуйте ефективність вашого капіталу
Демо торгівля
Вступ до ф'ючерсної торгівлі
Підготуйтеся до ф’ючерсної торгівлі
Ф'ючерсні події
Заробляйте, беручи участь в подіях
Демо торгівля
Використовуйте віртуальні кошти для безризикової торгівлі
Запуск
CandyDrop
Збирайте цукерки, щоб заробити аірдропи
Launchpool
Швидкий стейкінг, заробляйте нові токени
HODLer Airdrop
Утримуйте GT і отримуйте масові аірдропи безкоштовно
IPO Access
Отримайте повний доступ до глобальних IPO акцій.
Alpha Поінти
Ончейн-торгівля та аірдропи
Ф'ючерсні бали
Заробляйте фʼючерсні бали та отримуйте аірдроп-винагороди
Інвестиції
Simple Earn
Заробляйте відсотки за допомогою неактивних токенів
Автоінвестування
Автоматичне інвестування на регулярній основі
Подвійні інвестиції
Прибуток від волатильності ринку
Soft Staking
Earn rewards with flexible staking
Криптопозика
0 Fees
Заставте одну криптовалюту, щоб позичити іншу
Центр кредитування
Єдиний центр кредитування
Акції
Центр діяльності
Беріть учать та отримуйте винагороди
Реферал
20 USDT
Запрошуйте друзів та отримуйте бонуси
Партнерська програма
Ексклюзивні комісійні винагороди
Gate Booster
Зростайте та отримуйте аірдропи
Оголошення
Оновлення платформи в реальному часі
Блог Gate
Статті про криптоіндустрію
VIP послуги
Величезні знижки на комісії
Управління активами
Універсальне рішення для управління активами
Інституційний
Рішення цифрових активів для бізнесу
Розробники (API)
Підключається до екосистеми додатків Gate
Позабіржовий банківський переказ
Поповнюйте та виводьте фіат
Брокерська програма
Щедрі механізми знижок API
AI
Gate AI
Ваш універсальний AI-помічник для спілкування
Gate AI Bot
Використовуйте Gate AI безпосередньо у своєму соціальному додатку
GateClaw
Gate Блакитний Лобстер — готовий до використання
Gate for AI Agent
AI-інфраструктура, Gate MCP, Skills і CLI
Gate Skills Hub
Понад 10 000 навичок
Від офісу до трейдингу: універсальна база навичок для ефективнішої роботи з AI
GateRouter
Розумний вибір із понад 40 моделей ШІ, без додаткових витрат (0%)
Я хочу поділитися досить важливою інформацією, можливо, ви ще не зовсім її розумієте — це вразливість reentrancy у смарт-контрактах. Якщо ви розробляєте dapp або працюєте з блокчейном, це must-know.
Яка основна проблема reentrancy? Вона виникає, коли один смарт-контракт викликає інший контракт, і цей контракт може викликати зворотно перший контракт під час його виконання. Зловмисник може використати цей час, щоб викрасти кошти.
Уявімо, ContractA має 10 Ефірів, а ContractB вже надіслав туди 1 Ефір. Коли ContractB викликає функцію зняття, ContractA перевіряє, чи баланс більший за 0, і якщо так — відправляє Ефір назад. Але тут є проблема — ContractA оновлює баланс лише після відправки. Тому під час відправки, якщо у ContractB є функція fallback, вона може знову викликати функцію зняття у ContractA. Оскільки баланс ще не оновлений, перевірка пройде успішно, і він отримає ще 1 Ефір. Цей цикл повторюється, доки ContractA не спорожніє.
Я покажу вам три способи захистити контракт від такої атаки reentrancy.
Перший спосіб — використання модифікатора nonReentrant. Ідея дуже проста — ви блокуватимете контракт під час виконання функції. Якщо хтось спробує викликати цю функцію знову, йому відмовлять, бо контракт заблокований. Після завершення функції ви розблоковуєте його, і перевірка вже не пройде.
Другий спосіб — застосування шаблону Checks-Effects-Interactions. Замість оновлювати баланс після відправки, ви оновлюєте його одразу після перевірки, але перед відправкою. Таким чином, навіть якщо інший контракт викличе знову, баланс вже буде 0, і перевірка не пройде. Саме тому порядок дуже важливий — спочатку перевірка, потім оновлення стану, і лише потім взаємодія з іншими контрактами.
Третій спосіб — створити окремий глобальний ReentrancyGuard, особливо корисно, коли у вас багато взаємодіючих контрактів. Замість захисту кожної функції окремо, ви створюєте спільний контракт-охоронець, що зберігає стан блокування. Коли будь-який контракт намагається викликати захищену функцію, він перевіряє цей guard. Якщо він заблокований, транзакція відхиляється. Це дуже потужний спосіб — він запобігає reentrancy не лише у одному контракті, а й між кількома.
Рекомендую застосовувати всі три техніки залежно від ситуації. Для функцій зняття або переказу активів завжди використовуйте nonReentrant або Checks-Effects-Interactions. А якщо у вашому проекті багато взаємодіючих контрактів, розгляньте додавання GlobalReentrancyGuard як додатковий рівень захисту.
Це одна з найпоширеніших вразливостей, що призводять до великих втрат, тому глибоке розуміння reentrancy дуже важливе, якщо ви хочете писати безпечні смарт-контракти.