Lista kontrolna bezpieczeństwa inteligentnych kontraktów
Lista kontrolna tworzenia inteligentnych kontraktów
Oto ogólny proces, który zalecamy stosować podczas pisania inteligentnych kontraktów.
Sprawdź znane problemy z bezpieczeństwem:
- Przeanalizuj swoje kontrakty za pomocą narzędzia Slither (opens in a new tab). Posiada ono ponad 40 wbudowanych detektorów typowych luk w zabezpieczeniach. Uruchamiaj je przy każdym zatwierdzeniu nowego kodu i upewnij się, że raport jest czysty (lub użyj trybu selekcji, aby wyciszyć niektóre problemy).
- Przeanalizuj swoje kontrakty za pomocą narzędzia Crytic (opens in a new tab). Sprawdza ono 50 problemów, których Slither nie wykrywa. Crytic może również pomóc Twojemu zespołowi w bieżącej kontroli, łatwo ujawniając problemy z bezpieczeństwem w Pull Requestach na platformie GitHub.
Rozważ specjalne funkcje swojego kontraktu:
- Czy Twoje kontrakty można aktualizować? Przeanalizuj kod odpowiedzialny za aktualizacje pod kątem błędów za pomocą
slither-check-upgradeability(opens in a new tab) lub Crytic (opens in a new tab). Udokumentowaliśmy 17 sposobów, w jakie aktualizacje mogą pójść nie tak. - Czy Twoje kontrakty mają być zgodne ze standardami ERC? Sprawdź je za pomocą
slither-check-erc(opens in a new tab). To narzędzie natychmiast identyfikuje odstępstwa od sześciu popularnych specyfikacji. - Czy integrujesz się z tokenami stron trzecich? Przejrzyj naszą listę kontrolną integracji tokenów przed poleganiem na zewnętrznych kontraktach.
Wizualnie sprawdź krytyczne funkcje bezpieczeństwa swojego kodu:
- Przejrzyj narzędzie inheritance-graph (opens in a new tab) w Slither. Unikaj niezamierzonego przesłaniania (shadowing) i problemów z linearyzacją C3.
- Przejrzyj narzędzie function-summary (opens in a new tab) w Slither. Raportuje ono widoczność funkcji i kontrole dostępu.
- Przejrzyj narzędzie vars-and-auth (opens in a new tab) w Slither. Raportuje ono kontrole dostępu do zmiennych stanu.
Udokumentuj krytyczne właściwości bezpieczeństwa i użyj zautomatyzowanych generatorów testów do ich oceny:
- Naucz się dokumentować właściwości bezpieczeństwa swojego kodu. Na początku jest to trudne, ale to najważniejsza czynność pozwalająca osiągnąć dobry rezultat. Jest to również warunek wstępny do korzystania z jakichkolwiek zaawansowanych technik opisanych w tym samouczku.
- Zdefiniuj właściwości bezpieczeństwa w języku Solidity do użytku z narzędziami Echidna (opens in a new tab) i Manticore (opens in a new tab). Skup się na maszynie stanu, kontrolach dostępu, operacjach arytmetycznych, interakcjach zewnętrznych i zgodności ze standardami.
- Zdefiniuj właściwości bezpieczeństwa za pomocą API języka Python w narzędziu Slither. Skup się na dziedziczeniu, zależnościach zmiennych, kontrolach dostępu i innych kwestiach strukturalnych.
- Uruchamiaj testy właściwości przy każdym commicie za pomocą narzędzia Crytic (opens in a new tab). Crytic może przetwarzać i oceniać testy właściwości bezpieczeństwa, dzięki czemu każdy w Twoim zespole może łatwo zobaczyć na platformie GitHub, że kończą się one powodzeniem. Nieudane testy mogą blokować commity.
Na koniec pamiętaj o problemach, których zautomatyzowane narzędzia nie mogą łatwo znaleźć:
- Brak prywatności: wszyscy inni mogą zobaczyć Twoje transakcje, gdy są one w kolejce w puli
- Transakcje typu front-running
- Operacje kryptograficzne
- Ryzykowne interakcje z zewnętrznymi komponentami zdecentralizowanych finansów (DeFi)
Poproś o pomoc
Godziny konsultacji Ethereum (opens in a new tab) odbywają się w każde wtorkowe popołudnie. Te godzinne sesje jeden na jeden to okazja, aby zadać nam wszelkie pytania dotyczące bezpieczeństwa, rozwiązać problemy za pomocą naszych narzędzi i uzyskać od ekspertów opinie na temat Twojego obecnego podejścia. Pomożemy Ci przejść przez ten przewodnik.
Dołącz do naszego Slacka: Empire Hacking (opens in a new tab). Jesteśmy zawsze dostępni na kanałach #crytic i #ethereum, jeśli masz jakiekolwiek pytania.