Kontrolní seznam pro integraci tokenů
Při interakci s libovolnými tokeny postupujte podle tohoto kontrolního seznamu. Ujistěte se, že rozumíte rizikům spojeným s každou položkou, a zdůvodněte případné výjimky z těchto pravidel.
Pro usnadnění lze všechny nástroje (opens in a new tab) Slither spustit přímo na adrese tokenu, například:
Návod na používání nástroje Slither
slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken
Abyste mohli postupovat podle tohoto kontrolního seznamu, budete pro daný token potřebovat tento výstup z nástroje Slither:
- slither-check-erc [target] [contractName] [optional: --erc ERC_NUMBER]
- slither [target] --print human-summary
- slither [target] --print contract-summary
- slither-prop . --contract ContractName # vyžaduje konfiguraci a použití Echidny a Manticore
Obecné úvahy
- Kontrakt prošel bezpečnostním auditem. Vyhněte se interakci s kontrakty, které nemají bezpečnostní audit. Zkontrolujte délku hodnocení (tzv. „úroveň úsilí“), pověst bezpečnostní firmy a počet a závažnost nálezů.
- Kontaktovali jste vývojáře. Možná budete muset jejich tým upozornit na incident. Vhodné kontakty hledejte na blockchain-security-contacts (opens in a new tab).
- Mají bezpečnostní e-mailovou konferenci pro kritická oznámení. Jejich tým by měl uživatele (jako jste vy!) informovat, když jsou zjištěny kritické problémy nebo když dojde k aktualizacím.
Shoda s ERC
Slither obsahuje nástroj slither-check-erc (opens in a new tab), který kontroluje shodu tokenu s mnoha souvisejícími standardy ERC. Použijte slither-check-erc k ověření, že:
- Funkce transfer a transferFrom vracejí boolean. Některé tokeny u těchto funkcí nevracejí boolean. V důsledku toho může jejich volání v kontraktu selhat.
- Funkce name, decimals a symbol jsou přítomny, pokud se používají. Tyto funkce jsou ve standardu ERC-20 volitelné a nemusí být přítomny.
- Funkce decimals vrací uint8. Některé tokeny nesprávně vracejí uint256. Pokud je tomu tak, ujistěte se, že vrácená hodnota je menší než 255.
- Token zmírňuje známý souběh (race condition) ERC-20 (opens in a new tab). Standard ERC-20 má známý problém se souběhem, který musí být ošetřen, aby se zabránilo útočníkům v krádeži tokenů.
- Token není tokenem ERC-777 a nemá žádné volání externí funkce v transfer a transferFrom. Externí volání ve funkcích pro převod mohou vést k útokům typu reentrancy.
Slither obsahuje nástroj slither-prop (opens in a new tab), který generuje jednotkové testy a bezpečnostní vlastnosti, jež mohou odhalit mnoho běžných chyb ERC. Použijte slither-prop k ověření, že:
- Kontrakt projde všemi jednotkovými testy a bezpečnostními vlastnostmi ze slither-prop. Spusťte vygenerované jednotkové testy a poté zkontrolujte vlastnosti pomocí nástrojů Echidna (opens in a new tab) a Manticore (opens in a new tab).
Nakonec existují určité charakteristiky, které je obtížné identifikovat automaticky. Tyto podmínky zkontrolujte ručně:
- Funkce transfer a transferFrom by neměly účtovat poplatek. Deflační tokeny mohou vést k neočekávanému chování.
- Je zohledněn potenciální úrok získaný z tokenu. Některé tokeny rozdělují úrok držitelům tokenů. Tento úrok by mohl uvíznout v kontraktu, pokud by nebyl zohledněn.
Složení kontraktu
- Kontrakt se vyhýbá zbytečné složitosti. Token by měl být jednoduchý kontrakt; token se složitým kódem vyžaduje vyšší standard kontroly. K identifikaci složitého kódu použijte human-summary printer (opens in a new tab) nástroje Slither.
- Kontrakt používá SafeMath. Kontrakty, které nepoužívají SafeMath, vyžadují vyšší standard kontroly. Ručně zkontrolujte kontrakt na použití SafeMath.
- Kontrakt má pouze několik funkcí nesouvisejících s tokenem. Funkce nesouvisející s tokenem zvyšují pravděpodobnost problému v kontraktu. K celkovému přezkoumání kódu použitého v kontraktu použijte contract-summary printer (opens in a new tab) nástroje Slither.
- Token má pouze jednu adresu. Tokeny s více vstupními body pro aktualizace zůstatků mohou narušit interní účetnictví založené na adrese (např.
balances[token_address][msg.sender]nemusí odrážet skutečný zůstatek).
Oprávnění vlastníka
- Token nelze aktualizovat (není upgradeable). Aktualizovatelné kontrakty mohou v průběhu času měnit svá pravidla. Pomocí nástroje human-summary printer (opens in a new tab) od Slitheru zjistěte, zda je kontrakt aktualizovatelný.
- Vlastník má omezené možnosti ražení. Zlomyslní nebo kompromitovaní vlastníci mohou zneužít možnosti ražení. K přezkoumání možností ražení použijte human-summary printer (opens in a new tab) nástroje Slither a zvažte ruční kontrolu kódu.
- Token nelze pozastavit (není pausable). Zlomyslní nebo kompromitovaní vlastníci mohou uvěznit kontrakty spoléhající na pozastavitelné tokeny. Pozastavitelný kód identifikujte ručně.
- Vlastník nemůže kontrakt zařadit na černou listinu (blacklist). Zlomyslní nebo kompromitovaní vlastníci mohou uvěznit kontrakty spoléhající na tokeny s černou listinou. Funkce černé listiny identifikujte ručně.
- Tým stojící za tokenem je známý a může být pohnán k odpovědnosti za zneužití. Kontrakty s anonymními vývojářskými týmy nebo ty, které sídlí v právních útočištích, by měly vyžadovat vyšší standard kontroly.
Vzácnost tokenu
Kontrola problémů se vzácností tokenu vyžaduje ruční přezkoumání. Zkontrolujte tyto podmínky:
- Žádný uživatel nevlastní většinu nabídky. Pokud několik uživatelů vlastní většinu tokenů, mohou ovlivňovat operace na základě rozdělení tokenu.
- Celková nabídka je dostatečná. S tokeny s nízkou celkovou nabídkou lze snadno manipulovat.
- Tokeny se nacházejí na více než několika burzách. Pokud jsou všechny tokeny na jedné burze, kompromitace burzy může kompromitovat kontrakt spoléhající na daný token.
- Uživatelé chápou související rizika velkých fondů nebo bleskových půjček (flash loans). Kontrakty spoléhající na zůstatek tokenů musí pečlivě brát v úvahu útočníky s velkými prostředky nebo útoky prostřednictvím bleskových půjček.
- Token neumožňuje bleskové ražení (flash minting). Bleskové ražení může vést k podstatným výkyvům v zůstatku a celkové nabídce, což vyžaduje přísné a komplexní kontroly přetečení při operacích s tokenem.