Контрольний список для інтеграції токенів
Дотримуйтеся цього контрольного списку під час взаємодії з довільними токенами. Переконайтеся, що ви розумієте ризики, пов'язані з кожним пунктом, і обґрунтовуйте будь-які винятки із цих правил.
Для зручності всі утиліти (opens in a new tab) Slither можна запускати безпосередньо за адресою токена, наприклад:
Посібник із використання Slither
slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherTokenЩоб дотримуватися цього контрольного списку, вам знадобиться цей вивід від Slither для токена:
- slither-check-erc [target] [contractName] [optional: --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. Зовнішні виклики у функціях переказу можуть призвести до повторного входу (reentrancy).
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 printer (opens in a new tab) від Slither, щоб виявити складний код.
- Контракт використовує SafeMath. Контракти, які не використовують SafeMath, вимагають вищого стандарту перевірки. Перевірте контракт вручну на предмет використання SafeMath.
- Контракт має лише кілька функцій, не пов’язаних із токенами. Функції, не пов’язані з токенами, збільшують імовірність виникнення проблеми в контракті. Використовуйте contract-summary printer (opens in a new tab) від Slither для загального огляду коду, що використовується в контракті.
- Токен має лише одну адресу. Токени з кількома точками входу для оновлення балансу можуть порушити внутрішній облік на основі адреси (наприклад,
balances[token_address][msg.sender]може не відображати фактичний баланс).
Привілеї власника
- Токен не підлягає оновленню. Контракти, що підлягають оновленню, можуть з часом змінювати свої правила. Використовуйте human-summary printer (opens in a new tab) від Slither, щоб визначити, чи можна оновити контракт.
- Власник має обмежені можливості карбування. Зловмисні або скомпрометовані власники можуть зловживати можливостями карбування. Використовуйте human-summary printer (opens in a new tab) від Slither для перевірки можливостей карбування та розгляньте можливість перевірки коду вручну.
- Токен не можна призупинити. Зловмисні або скомпрометовані власники можуть заблокувати контракти, що залежать від токенів, які можна призупинити. Визначайте код, що дозволяє призупинення, вручну.
- Власник не може додати контракт до чорного списку. Зловмисні або скомпрометовані власники можуть заблокувати контракти, що залежать від токенів, які мають чорний список. Виявляйте функції чорного списку вручну.
- Команда, що стоїть за токеном, відома, і її можна притягнути до відповідальності за зловживання. Контракти з анонімними командами розробників або ті, що знаходяться в юрисдикціях із м'яким правовим регулюванням, повинні вимагати вищого стандарту перевірки.
Дефіцитність токенів
Перевірка проблем, пов'язаних із дефіцитністю токенів, вимагає перевірки вручну. Перевірте наявність таких умов:
- Жоден користувач не володіє більшою частиною пропозиції. Якщо кілька користувачів володіють більшістю токенів, вони можуть впливати на операції на основі розподілу токенів.
- Загальна пропозиція достатня. Токенами з низькою загальною пропозицією можна легко маніпулювати.
- Токени розміщені на кількох біржах. Якщо всі токени знаходяться на одній біржі, компрометація цієї біржі може скомпрометувати контракт, що залежить від токена.
- Користувачі розуміють пов'язані ризики великих коштів або флеш-позик. Контракти, що залежать від балансу токенів, повинні ретельно враховувати зловмисників із великими коштами або атаки за допомогою флеш-позик.
- Токен не дозволяє флеш-карбування. Флеш-карбування може призвести до значних коливань балансу та загальної пропозиції, що вимагає суворих і всебічних перевірок на переповнення під час операцій із токеном.
Останні оновлення сторінки: 21 жовтня 2025 р.