Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Selektor funkcji Ethereum (EVM)

Wklej sygnaturę funkcji i poznaj postać kanoniczną, hash Keccak-256 oraz selektor 4-bajtowy.

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  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.

  1. Wpisz lub wklej sygnaturę, na przykład transfer(address to, uint256 amount).
  2. Kliknij „Oblicz selektor”.
  3. 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”.

WynikDługośćPrzykład dla wartości domyślnej
Postać kanonicznateksttransfer(address,uint256)
Keccak-25632 bajty0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b
Selektor (4 bajty)4 bajty0xa9059cbb

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.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!