Selektor funkcji Ethereum (EVM)
Wklej sygnaturę funkcji i poznaj postać kanoniczną, hash Keccak-256 oraz selektor 4-bajtowy.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćJak używać selektora funkcji EVM
Wpisz w pole tekstowe sygnaturę funkcji, którą chcesz sprawdzić — możesz wkleić ją razem z nazwami parametrów, tak jak widzisz ją w dokumentacji kontraktu. Następnie kliknij przycisk „Oblicz selektor”. Wynik pojawia się także automatycznie po załadowaniu strony, więc od razu widzisz efekt działania na wartości domyślnej.
- Wpisz lub wklej sygnaturę, na przykład transfer(address to, uint256 amount).
- Kliknij „Oblicz selektor”.
- Odczytaj trzy wyniki: postać kanoniczną, pełny hash Keccak-256 oraz selektor 4-bajtowy.
Dla wartości domyślnej postać kanoniczna to transfer(address,uint256), pełny hash Keccak-256 to 0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b, a selektor 4-bajtowy to 0xa9059cbb. Jeśli sygnatura jest błędna, zamiast wyników pokaże się komunikat błędu. Całe obliczenie wykonuje się lokalnie w Twojej przeglądarce.
Czym jest sygnatura kanoniczna funkcji
Sygnatura kanoniczna to najprostsza, jednoznaczna postać opisu funkcji: nazwa, nawiasy i lista typów parametrów, bez nazw zmiennych i bez dodatkowych słów. Właśnie ta postać jest podstawą dalszych obliczeń.
Narzędzie porządkuje wpisany tekst według kilku reguł:
- usuwa opcjonalny prefiks function oraz nazwy parametrów,
- usuwa słowa memory, calldata, storage, indexed i payable,
- zamienia uint na uint256 oraz int na int256,
- zamienia byte na bytes1, również wtedy, gdy parametr jest tablicą, na przykład uint[] staje się uint256[],
- rozdziela parametry przecinkami tylko na najwyższym poziomie nawiasów, dzięki czemu zagnieżdżone nawiasy nie rozbijają listy.
Wynik ma zawsze postać nazwa(typ1,typ2,...). Dzięki temu dwie osoby zapisujące tę samą funkcję w różny sposób — jedna z nazwami parametrów, druga bez — otrzymają identyczny opis.
Keccak-256 a SHA3-256 w Ethereum
Ethereum nie korzysta z SHA3-256 w wersji, którą później znormalizowano. Używa Keccak-256, czyli wcześniejszej wersji tej samej rodziny, z innym dopełnieniem danych wejściowych. Dlatego dla tego samego tekstu Keccak-256 i SHA3-256 dają różne wyniki.
Narzędzie liczy Keccak-256 z postaci kanonicznej zapisanej w UTF-8. Otrzymujesz 32 bajty, pokazane jako 0x i 64 znaki szesnastkowe. To dokładnie ten sam hash, którego Ethereum używa do wyliczenia selektora funkcji.
Jeśli spotkasz się z określeniem „SHA3” w kontekście Ethereum, prawie zawsze chodzi właśnie o Keccak-256. Warto o tym pamiętać, bo policzenie SHA3-256 dałoby inny ciąg znaków, a w konsekwencji inny selektor.
Jak odczytać selektor 4-bajtowy i pełny hash
Selektor funkcji to pierwsze 4 bajty hash Keccak-256. W zapisie szesnastkowym oznacza to 0x i 8 znaków — dokładnie tyle, ile widzisz w wierszu „Selektor (4 bajty)”. Pełny hash ma 32 bajty, czyli 0x i 64 znaki, i to on pojawia się w wierszu „Keccak-256”.
| Wynik | Długość | Przykład dla wartości domyślnej |
|---|---|---|
| Postać kanoniczna | tekst | transfer(address,uint256) |
| Keccak-256 | 32 bajty | 0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b |
| Selektor (4 bajty) | 4 bajty | 0xa9059cbb |
W praktyce selektor podpowiada, którą funkcję kontraktu wywołuje transakcja, a pełny hash bywa potrzebny wtedy, gdy porównujesz całe sygnatury między sobą. Zauważ, że selektor jest zawsze początkiem pełnego hashu — to pierwsze osiem znaków następujących po 0x.
Ograniczenia narzędzia: krotki, aliasy typów i parser ABI
Narzędzie porządkuje sygnaturę i liczy hash — nie jest pełnym parserem ABI ani analizatorem kodu kontraktu. Poniżej najważniejsze granice, o których warto wiedzieć przed użyciem wyniku.
- Krotki i typy złożone. Zagnieżdżone nawiasy nie rozbijają listy parametrów, ale przy rozbudowanych typach złożonych, strukturach i krotkach samodzielnie sprawdź, czy zapis odpowiada definicji w kontrakcie.
- Aliasy typów. Zamieniane są tylko skróty opisane wyżej, czyli uint, int i byte. Jeśli użyjesz własnej nazwy typu albo aliasu spoza tej listy, zostanie ona potraktowana dosłownie i wynik odzwierciedli Twój wpis.
- Brak weryfikacji z kontraktem. Narzędzie nie pobiera kodu źródłowego ani definicji kontraktu i nie potwierdza, że funkcja faktycznie istnieje pod wybranym adresem. To sprawdzasz samodzielnie, na przykład w dokumentacji projektu lub w zweryfikowanym kodzie.
- Zakres danych. Narzędzie nie wczytuje plików, nie pobiera wyników i nie prowadzi historii obliczeń. Wszystko dzieje się lokalnie w Twojej przeglądarce, nic nie jest wysyłane na serwer.
- Jedna sygnatura naraz. Sprawdzasz pojedynczy wpis, więc przy większej liczbie funkcji powtarzasz tę samą czynność dla każdej z nich osobno.
Jeśli wynik ma trafić do kodu produkcyjnego, potraktuj go jako punkt wyjścia i zestaw go z definicją funkcji w kontrakcie. Wtedy masz pewność, że typy parametrów oraz ich kolejność są zgodne z tym, co faktycznie działa na sieci.
Najczęstsze pytania
Czym jest selektor funkcji Ethereum?
To pierwsze 4 bajty hash Keccak-256 wyliczonego z postaci kanonicznej sygnatury funkcji. W zapisie szesnastkowym ma 0x i 8 znaków, na przykład 0xa9059cbb. Tym skrótem kontrakt rozpoznaje, którą funkcję wywołujesz.
Po co liczy się selektor funkcji?
Selektor pozwala ustalić, którą funkcję kontraktu wywołuje transakcja, i porównać sygnatury pochodzące z różnych źródeł. Przydaje się też wtedy, gdy ręcznie składasz dane wywołania i chcesz potwierdzić zgodność typów parametrów.
Czym różni się Keccak-256 od SHA3-256?
To dwie wersje tej samej rodziny skrótów, różniące się sposobem dopełnienia danych wejściowych, dlatego dla tego samego tekstu dają odmienne wyniki. Ethereum korzysta z Keccak-256, a nie ze znormalizowanego później SHA3-256.
Ile bajtów ma selektor, a ile pełny hash?
Selektor funkcji ma 4 bajty, czyli 8 znaków szesnastkowych po 0x. Pełny hash Keccak-256 ma 32 bajty, czyli 64 znaki szesnastkowe po 0x.
Czy nazwy parametrów w sygnaturze mają znaczenie?
Nie. Możesz wkleić sygnaturę razem z nazwami parametrów, ponieważ narzędzie je usuwa i zostawia wyłącznie typy. Wynik będzie taki sam jak dla zapisu bez nazw.
Czy obliczenia odbywają się w mojej przeglądarce?
Tak, całość liczona jest lokalnie w przeglądarce i nic nie jest wysyłane na serwer. Możesz więc sprawdzać sygnatury bez obaw o to, że wpisany tekst opuści Twoje urządzenie.
Zobacz też — powiązane narzędzia
Narzędzie liczy lokalnie w przeglądarce; przed użyciem selektora w produkcji zweryfikuj sygnaturę kanoniczną z dokumentacją ABI/Solidity, zwłaszcza dla typów złożonych.