Контрольный список для интеграции токенов
Следуйте этому контрольному списку при взаимодействии с произвольными токенами. Убедитесь, что вы понимаете риски, связанные с каждым пунктом, и обосновываете любые исключения из этих правил.
Для удобства все утилиты (opens in a new tab) Slither можно запускать непосредственно по адресу токена, например:
Руководство по использованию Slither
slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherTokenЧтобы следовать этому контрольному списку, вам потребуется этот вывод от Slither для токена:
- slither-check-erc [target] [contractName] [опционально: --erc ERC_NUMBER]- slither [target] --print human-summary- slither [target] --print contract-summary- slither-prop . --contract ContractName # требует настройки и использования Echidna и ManticoreОбщие соображения
- Контракт прошел проверку безопасности. Избегайте взаимодействия с контрактами, у которых нет проверки безопасности. Проверьте объем оценки (также известной как "уровень трудозатрат"), репутацию фирмы по безопасности, а также количество и серьезность выявленных проблем.
- Вы связались с разработчиками. Возможно, вам потребуется уведомить их команду об инциденте. Ищите соответствующие контакты на blockchain-security-contacts (opens in a new tab).
- У них есть список рассылки по безопасности для важных объявлений. Их команда должна уведомлять пользователей (таких как вы!) при обнаружении критических проблем или при проведении обновлений.
Соответствие стандарту ERC
Slither включает утилиту slither-check-erc (opens in a new tab), которая проверяет соответствие токена многим связанным стандартам ERC. Используйте slither-check-erc для проверки того, что:
- Функции transfer и transferFrom возвращают логическое значение. Некоторые токены не возвращают логическое значение в этих функциях. В результате их вызовы в контракте могут завершиться неудачей.
- Функции name, decimals и symbol присутствуют, если используются. Эти функции являются необязательными в стандарте ERC20 и могут отсутствовать.
- Функция decimals возвращает uint8. Некоторые токены неправильно возвращают uint256. Если это так, убедитесь, что возвращаемое значение меньше 255.
- Токен смягчает известное состояние гонки ERC20 (opens in a new tab). Стандарт ERC20 имеет известное состояние гонки, которое должно быть смягчено, чтобы злоумышленники не смогли украсть токены.
- Токен не является токеном ERC777 и не имеет внешних вызовов функций в transfer и transferFrom. Внешние вызовы в функциях перевода могут привести к уязвимостям повторного входа.
Slither включает утилиту slither-prop (opens in a new tab), которая генерирует модульные тесты и свойства безопасности, способные обнаружить многие распространенные недостатки ERC. Используйте slither-prop для проверки того, что:
- Контракт проходит все модульные тесты и проверки свойств безопасности из slither-prop. Запустите сгенерированные модульные тесты, затем проверьте свойства с помощью Echidna (opens in a new tab) и Manticore (opens in a new tab).
Наконец, существуют определенные характеристики, которые трудно выявить автоматически. Проверьте наличие этих условий вручную:
- Функции transfer и transferFrom не должны взимать комиссию. Дефляционные токены могут привести к неожиданному поведению.
- Учитываются потенциальные проценты, полученные от токена. Некоторые токены распределяют проценты среди держателей токенов. Эти проценты могут оказаться заблокированными в контракте, если их не учесть.
Композиция контракта
- Контракт избегает излишней сложности. Токен должен быть простым контрактом; токен со сложным кодом требует более высокого стандарта проверки. Используйте принтер human-summary (opens in a new tab) от Slither для выявления сложного кода.
- В контракте используется SafeMath. Контракты, не использующие SafeMath, требуют более высокого стандарта проверки. Проверьте использование SafeMath в контракте вручную.
- В контракте лишь несколько функций, не связанных с токеном. Функции, не связанные с токеном, повышают вероятность возникновения проблемы в контракте. Используйте принтер contract-summary (opens in a new tab) от Slither для общего обзора кода, используемого в контракте.
- У токена только один адрес. Токены с несколькими точками входа для обновления баланса могут нарушить внутренний учет, основанный на адресе (например,
balances[token_address][msg.sender]может не отражать фактический баланс).
Привилегии владельца
- Токен не является обновляемым. Обновляемые контракты могут со временем менять свои правила. Используйте принтер human-summary (opens in a new tab) от Slither, чтобы определить, является ли контракт обновляемым.
- Владелец имеет ограниченные возможности по выпуску токенов. Злонамеренные или скомпрометированные владельцы могут злоупотреблять возможностями выпуска. Используйте принтер human-summary (opens in a new tab) от Slither для проверки возможностей выпуска токенов и рассмотрите возможность ручной проверки кода.
- Токен не имеет функции приостановки. Злонамеренные или скомпрометированные владельцы могут заблокировать контракты, зависящие от токенов с функцией приостановки. Выявляйте код, отвечающий за приостановку, вручную.
- Владелец не может внести контракт в черный список. Злонамеренные или скомпрометированные владельцы могут заблокировать контракты, зависящие от токенов с черным списком. Выявляйте функции черного списка вручную.
- Команда, стоящая за токеном, известна и может быть привлечена к ответственности за злоупотребления. Контракты с анонимными командами разработчиков или находящиеся в юридических "убежищах" должны требовать более высокого стандарта проверки.
Дефицит токенов
Проверка на проблемы, связанные с дефицитом токенов, требует ручного анализа. Проверьте наличие следующих условий:
- Ни один пользователь не владеет большей частью предложения. Если несколько пользователей владеют большей частью токенов, они могут влиять на операции, основанные на распределении токенов.
- Общее предложение является достаточным. Токенами с низким общим предложением можно легко манипулировать.
- Токены размещены более чем на нескольких биржах. Если все токены находятся на одной бирже, компрометация этой биржи может скомпрометировать контракт, зависящий от токена.
- Пользователи понимают риски, связанные с крупными фондами или мгновенными займами. Контракты, зависящие от баланса токенов, должны тщательно учитывать злоумышленников с крупными средствами или атаки с использованием мгновенных займов.
- Токен не допускает мгновенного выпуска. Мгновенный выпуск может привести к значительным колебаниям баланса и общего предложения, что требует строгих и всесторонних проверок на переполнение при работе с токеном.
Последнее обновление страницы: 21 октября 2025 г.