Lista kontrolna integracji tokenów
Postępuj zgodnie z tą listą kontrolną podczas interakcji z dowolnymi tokenami. Upewnij się, że rozumiesz ryzyko związane z każdym produktem i uzasadnij wszelkie wyjątki od tych zasad.
Dla wygody wszystkie narzędzia(opens in a new tab) Slithera można uruchomić bezpośrednio na adresie tokena, takim jak:
Korzystanie z samouczka Slither
slither-check-erc 0xdac17f958d2ee523a2206206994597c13d831ec7 TetherToken
Aby postępować zgodnie z tą listą kontrolną, będziesz chciał uzyskać dane wyjściowe ze Slither dla tokena:
- slither-check-erc [target] [contractName] [optional: --erc ERC_NUMBER]- slither [target] --print human-summary- slither [target] --print contract-summary- slither-prop . --contract ContractName # requires configuration, and use of Echidna and Manticore
Uwagi ogólne
- Kontrakt obejmuje przegląd bezpieczeństwa. Unikaj interakcji z umowami, które nie mają przeglądu bezpieczeństwa. Sprawdź długość oceny (inaczej „poziom nakładu pracy”), reputację firmy zabezpieczającej oraz liczbę i wagę ustaleń.
- Skontaktowałeś się z programistami. Może być konieczne powiadomienie ich zespołu o incydencie. Poszukaj odpowiednich kontaktów na blockchain-security-contacts(opens in a new tab).
- Mają listę dyskusyjną dotyczącą bezpieczeństwa dla krytycznych ogłoszeń. Ich zespół powinien informować użytkowników (takich jak Ty!) w przypadku wykrycia krytycznych problemów lub aktualizacji.
Zgodność ERC
Slither zawiera narzędzie slither-check-erc(opens in a new tab), które sprawdza zgodność tokenu z wieloma powiązanymi ERC standardami. Użyj slither-check-erc, aby sprawdzić, czy:
- Transfer i transferFrom zwracają wartość logiczną. Kilka tokenów nie zwraca wartości logicznych w tych funkcjach. W rezultacie ich połączenia w kontrakcie mogą się nie powieść.
- Nazwa, miejsca dziesiętne i funkcje symboli są obecne, jeśli są używane. Te funkcje są opcjonalne w standardzie ERC20 i mogą nie być obecne.
- Ułamki dziesiętne zwracają uint8. Kilka tokenów nieprawidłowo zwraca uint256. W takim przypadku należy zapewnić, aby zwrócona wartość była niższa niż 255.
- Token ogranicza znany wyścig ERC20(opens in a new tab). Standard ERC20 ma znaną sytuację wyścigu ERC20, którą należy ograniczyć, aby uniemożliwić atakującym kradzież tokenów.
- Token nie jest tokenem ERC777 i nie ma zewnętrznego wywołania w funkcjach transfer i transferFrom. Wywołania zewnętrzne w funkcjach transferu mogą prowadzić do wielobieżności.
Slither zawiera narzędzie slither-prop(opens in a new tab), które generuje testy jednostkowe i właściwości bezpieczeństwa, które mogą wykryć wiele popularnych wad ERC. Użyj slither-prop, aby sprawdzić, czy:
- Kontrakt przekazuje wszystkie testy jednostkowe i właściwości zabezpieczeń z slither-prop. Uruchom wygenerowane testy jednostkowe, a następnie sprawdź właściwości za pomocą Echidna(opens in a new tab) i Manticore(opens in a new tab).
Wreszcie istnieją pewne cechy, które trudno zidentyfikować automatycznie. Sprawdź te warunki ręcznie:
- Transfer i transferFrom nie powinny wiązać się z opłatami. Tokeny deflacyjne mogą prowadzić do nieoczekiwanego zachowania.
- Potencjalne odsetki uzyskane z tokena są brane pod uwagę. Niektóre tokeny rozdzielają odsetki na posiadaczy tokenów. Te odsetki mogą zostać zablokowane w kontrakcie, jeśli nie zostanie on wzięty pod uwagę.
Kompozycja kontraktu
- Kontrakt pozwala uniknąć niepotrzebnej złożoności. Token powinien być prostą umową; token ze złożonym kodem wymaga wyższego standardu weryfikacji. Użyj drukarki podsumowań ludzkich(opens in a new tab) Slithera, aby zidentyfikować złożony kod.
- Kontrakt korzysta z SafeMath. Kontrakty, które nie korzystają z SafeMath, wymagają wyższego standardu weryfikacji. Sprawdź umowę ręcznie pod kątem użycia SafeMath.
- Kontrakt ma tylko kilka funkcji niezwiązanych z tokenem. Funkcje niezwiązane z tokenem zwiększają prawdopodobieństwo wystąpienia problemu w kontrakcie. Skorzystaj z drukarki podsumowań kontraktów(opens in a new tab) Slithera, aby ogólnie zapoznać się z kodem użytym w kontrakcie.
- Token ma tylko jeden adres. Tokeny z wieloma punktami wejścia do aktualizacji salda mogą zepsuć wewnętrzną księgowość na podstawie adresu (np.
balances[token_address][msg.sender]
może nie odzwierciedlać faktycznego salda).
Uprawnienia właściciela
- Tokenu nie można uaktualnić. Umowy z możliwością uaktualnienia mogą z czasem zmienić swoje zasady. Użyj drukarki podsumowania ludzkiego(opens in a new tab) Slithera, aby określić, czy kontrakt można uaktualnić.
- Właściciel ma ograniczone możliwości bicia tokenów. Złośliwi lub nieuczciwi właściciele mogą nadużywać możliwości bicia tokenów. Użyj drukarki podsumowania ludzkiego(opens in a new tab) Slithera, aby przejrzeć możliwości wybijania tokenów i rozważ ręczne przejrzenie kodu.
- Token nie można wstrzymywać. Złośliwi lub nieuczciwi właściciele mogą blokować umowy oparte na tokenach, które można wstrzymywać. Zidentyfikuj ręcznie kod, który można wstrzymać.
- Właściciel nie może umieścić kontraktu na czarnej liście. Złośliwi lub nieuczciwi właściciele mogą za pomocą czarnej listy blokować umowy oparte na tokenach Ręczne identyfikowanie funkcji czarnej listy.
- Zespół odpowiedzialny za token jest znany i może zostać pociągnięty do odpowiedzialności za nadużycia. Umowy z anonimowymi zespołami programistów lub przebywającymi w legalnych schroniskach powinny wymagać wyższego standardu weryfikacji.
Niedobór tokenów
Przeglądy pod kątem problemów związanych z niedoborem tokenów wymagają ręcznego sprawdzenia. Sprawdź te warunki:
- Żaden użytkownik nie jest właścicielem większości zasobów. Jeśli kilku użytkowników posiada większość tokenów, mogą wpływać na operacje na podstawie podziału tokena.
- Całkowita podaż jest wystarczająca. Tokenami o niskiej łącznej podaży można łatwo manipulować.
- Tokeny znajdują się na więcej niż kilku giełdach. Jeśli wszystkie tokeny znajdują się na jednej giełdzie, kompromis giełdy może naruszyć kontrakt polegający na tokenie.
- Użytkownicy rozumieją ryzyko związane z dużymi funduszami lub błyskawicznymi pożyczkami. Kontrakty opierające się na saldzie tokenów muszą uwzględniać osoby atakujące z dużymi funduszami lub ataki za pośrednictwem błyskawicznych pożyczek.
- Token nie pozwala na błyskawiczne wybijanie. Błyskawiczne wybijanie może prowadzić do znacznych wahań salda i całkowitej podaży, co wymaga ścisłych i kompleksowych kontroli przepełnienia w działaniu tokena.
Ostatnia edycja: @nhsz(opens in a new tab), 15 sierpnia 2023