Фьючерсы
Доступ к сотням фьючерсов
CFD
Золото
Одна платформа мировых активов
Опционы
Hot
Торги опционами Vanilla в европейском стиле
Единый счет
Увеличьте эффективность вашего капитала
Демо-торговля
Введение в торговлю фьючерсами
Подготовьтесь к торговле фьючерсами
Фьючерсные события
Получайте награды в событиях
Демо-торговля
Используйте виртуальные средства для торговли без риска
CFD
Деривативы CFD на акции
Акции США
Доступ к реальным акциям США и ETF
Акции Гонконга
Торгуйте качественными акциями, котирующимися в Гонконге
Корейские акции
SK Hynix
Торгуйте реальными корейскими акциями и инвестируйте в популярные активы
Фьючерсы на акции
Высокое кредитное плечо, круглосуточная торговля
Токенизированные акции
Обеспечено реальными акциями
IPO Access
Откройте полный доступ к глобальным IPO акций
GUSD
3.8%
Создать GUSD для получения доходности казначейских RWA
Мероприятия, связанные с акциями
Торгуйте популярными акциями и получайте щедрые эирдропы
Запуск
CandyDrop
Собирайте конфеты, чтобы заработать аирдропы
Launchpool
Быстрый стейкинг, заработайте потенциальные новые токены
HODLer Airdrop
Удерживайте GT и получайте огромные аирдропы бесплатно
IPO Access
Откройте полный доступ к глобальным IPO акций
Alpha Points
Торгуйте и получайте аирдропы
Фьючерсные баллы
Зарабатывайте баллы и получайте награды аирдропа
Инвестиции
Simple Earn
Зарабатывайте проценты с помощью неиспользуемых токенов
Автоинвест.
Автоинвестиции на регулярной основе.
Бивалютные инвестиции
Доход от волатильности рынка
Мягкий стейкинг
Получайте вознаграждения с помощью гибкого стейкинга
Криптозаймы
0 Fees
Заложите одну криптовалюту, чтобы занять другую
Центр кредитования
Единый центр кредитования
VIP-центр богатства
Планы премиального роста
Gate Wealth
Возьмите под контроль свое финансовое будущее
Количественный фонд
Лучшие стратегии
Стейкинг
Делайте стейкинг криптовалюты, чтобы заработать на продуктах PoS
Умное плечо
Плечо без риска ликвидации
GUSD
3.8%
Создать GUSD для получения доходности казначейских RWA
Рекламные акции
Промоакции
Участвуйте и получайте награды
Реферал
200 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 тыс навыков
От офиса до трейдинга: единая база навыков для эффективного использования ИИ
Я хочу поделиться довольно важной информацией, которую вы, возможно, еще не до конца понимаете — это уязвимость 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-ом. Если guard говорит, что контракт заблокирован, транзакция отклоняется. Этот метод очень мощный, потому что он предотвращает reentrancy не только внутри одного контракта, но и между несколькими контрактами.
Я советую применять все три метода в зависимости от ситуации. Для функций вывода или перевода средств всегда используйте nonReentrant или Checks-Effects-Interactions. А если у вас сложная система контрактов, рассмотрите использование GlobalReentrancyGuard как дополнительного уровня защиты.
Это одна из самых распространенных уязвимостей, которая приводит к крупным потерям, поэтому понимание reentrancy очень важно, если вы хотите писать безопасные смарт-контракты.