Kalkulator hashu EIP-712
Policz hash typu EIP712Domain i separator domeny dla swoich danych.
-
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ć kalkulatora hashu EIP-712
Kalkulator hashu EIP-712 wyznacza dwie wartości przydatne przy pracy z podpisami zgodnymi ze standardem EIP-712: hash typu domeny oraz separator domeny. Wszystko liczy się w Twojej przeglądarce, a wynik pojawia się od razu po wpisaniu danych.
Jak to zrobić krok po kroku:
- Wpisz Nazwę domeny. Domyślnie podstawiona jest wartość Ether Mail.
- Wpisz Wersję - domyślnie jest to 1.
- Podaj Chain ID, czyli numer sieci. Domyślnie 1.
- Wpisz adres Kontraktu, który weryfikuje podpis. Domyślnie 0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC.
- Kliknij Oblicz separator domeny. Obliczenia uruchamiają się także automatycznie po wejściu, więc zwykle nie musisz nic klikać.
W wynikach zobaczysz dwie pozycje: Hash typu EIP712Domain oraz Separator domeny. Obie mają postać 0x i ciągu znaków hex. Możesz je zaznaczyć i skopiować w dowolne miejsce.
Dla wartości domyślnych wynik jest następujący:
- Hash typu EIP712Domain: 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f
- Separator domeny: 0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f
Jeśli chcesz sprawdzić zgodność z narzędziem, którego używasz na co dzień, wpisz dokładnie te same wartości i porównaj oba wyniki.
Co to jest domainSeparator i typ EIP712Domain
EIP-712 to sposób podpisywania danych, w którym użytkownik widzi, co dokładnie podpisuje. Aby ten sam podpis nie był ważny w każdej aplikacji i w każdej sieci, wprowadzono pojęcie domeny.
Domena to zestaw informacji opisujących kontekst podpisu: nazwa aplikacji, jej wersja, numer sieci oraz adres kontraktu, który podpis sprawdza. Typ EIP712Domain to szablon tej domeny - mówi, z jakich elementów się składa i w jakiej kolejności są one łączone.
Separator domeny, czyli domainSeparator, to skrót całej domeny. Powstaje tak, że najpierw tworzony jest hash samego opisu typu, a potem dołączane są skróty nazwy i wersji oraz informacje o sieci i kontrakcie. Całość zamieniana jest na końcu na jeden skrót o stałej długości.
Po co to wszystko? Dzięki separatorowi podpis złożony w jednej sieci nie zadziała w innej, a podpis przeznaczony dla jednego kontraktu nie zadziała w innym. To zabezpieczenie przed ponownym użyciem tego samego podpisu w innym miejscu.
Jak kodowane są pola Nazwa, Wersja, Chain ID i adres w ABI
Każdy element domeny musi zostać zamieniony na ciąg bajtów w ustalony sposób, zanim powstanie z nich końcowy skrót. Wygląda to tak:
- Nazwa - tekst zapisany w standardzie UTF-8, a następnie zamieniony na skrót o długości 32 bajtów.
- Wersja - traktowana dokładnie tak samo jak nazwa: najpierw tekst, potem skrót 32-bajtowy. Wartość 1 to również tekst, a nie liczba.
- Chain ID - liczba zapisana na 32 bajtach, od najstarszego bajtu do najmłodszego. Dla wartości 1 jest to liczba z jedną jedynką na końcu, dopełniona zerami z przodu.
- Adres kontraktu - 20 bajtów adresu dopełnione zerami z lewej strony do 32 bajtów.
Następnie wszystkie części łączy się w jednej kolejności: skrót opisu typu, skrót nazwy, skrót wersji, liczba oznaczająca sieć i adres kontraktu. Z tak połączonych danych powstaje jeden końcowy skrót - to właśnie separator domeny.
Skrót to wynik jednokierunkowego przekształcenia keccak-256: z tych samych danych zawsze wychodzi ta sama wartość, a z wyniku nie da się odtworzyć danych wejściowych. Zapisuje się go jako 0x i 64 znaki hex, czyli 32 bajty.
Przykład dla wartości domyślnych: nazwa Ether Mail, wersja 1, Chain ID 1 oraz adres 0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC. Sam opis typu daje hash 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f, a po dołączeniu pozostałych elementów separator domeny wynosi 0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f.
DomainSeparator, hashStruct i digest podpisu - czym się różnią
Te trzy pojęcia bywają mylone, a oznaczają różne rzeczy.
| Pojęcie | Co obejmuje |
|---|---|
| Hash typu EIP712Domain | Sam opis tego, z jakich elementów składa się domena. Nie zależy od wpisanych wartości - zmienia się tylko wtedy, gdy zmieni się sam zestaw elementów domeny. |
| Separator domeny | Opis typu razem z konkretnymi wartościami: nazwą, wersją, numerem sieci i adresem kontraktu. |
| Skrót struktury, czyli hashStruct | Ogólne pojęcie oznaczające skrót dowolnej struktury danych złożonej z opisu typu i wartości. Separator domeny jest skrótem struktury dla domeny. |
| Skrót podpisu, czyli digest | Wartość, którą faktycznie podpisuje portfel. Powstaje z połączenia znacznika EIP-712, separatora domeny oraz skrótu właściwej wiadomości. |
Najważniejszy wniosek jest taki: separator domeny to dopiero połowa pracy. Kalkulator wylicza opis typu i separator, ale nie tworzy skrótu wiadomości ani gotowej wartości do podpisu. Jeśli chcesz podpisać konkretną wiadomość, potrzebujesz jeszcze jej własnej struktury i wartości.
Ograniczenia kalkulatora hashu EIP-712
To proste narzędzie do jednego zadania. Warto wiedzieć, czego po nim nie oczekiwać.
- Brak dodatkowej soli domeny. Niektóre domeny zawierają jeszcze wartość losującą. Kalkulator obsługuje cztery elementy: nazwę, wersję, numer sieci i adres kontraktu. Jeśli Twoja domena używa soli, otrzymany tutaj separator nie będzie zgodny z Twoją aplikacją.
- Brak hasha wiadomości i skrótu podpisu. Narzędzie nie przyjmuje treści podpisywanej wiadomości, więc nie policzy skrótu jej struktury ani wartości podpisywanej przez portfel.
- Brak sprawdzania numeru sieci. Chain ID wpisujesz sam. Kalkulator nie wie, do jakiej sieci należy dany numer, i nie porównuje go z niczym.
- Brak importu i eksportu plików. Wartości wpisujesz ręcznie, a wyniki kopiujesz ręcznie.
- Wynik zależy wyłącznie od Twoich danych. Inna nazwa, wersja, numer sieci lub adres dają zupełnie inny separator. Przed użyciem wyniku upewnij się, że wartości zgadzają się co do znaku z tym, czego używa Twoja aplikacja.
- Narzędzie niczego nie podpisuje i nie łączy się z portfelem. Nie sprawdza też, czy pod podanym adresem rzeczywiście działa kontrakt.
Adres kontraktu wpisuj w pełnej formie, czyli z prefiksem 0x i 40 znakami hex. Wszystkie obliczenia wykonują się lokalnie w Twojej przeglądarce, a wpisane dane nie są nigdzie wysyłane.
Najczęstsze pytania
Jak obliczyć domainSeparator dla EIP-712?
Wpisz nazwę domeny, wersję, numer sieci i adres kontraktu, a następnie kliknij Oblicz separator domeny. Obliczenia uruchamiają się też automatycznie po wejściu, więc zwykle wystarczy samo uzupełnienie danych. Wynik znajdziesz w pozycji Separator domeny, w postaci 0x i ciągu znaków hex.
Co to jest separator domeny w EIP-712?
To skrót informacji opisujących kontekst podpisu: nazwy aplikacji, jej wersji, numeru sieci i adresu kontraktu. Dzięki niemu podpis złożony dla jednej aplikacji lub jednej sieci nie jest ważny w innym miejscu.
Czym różni się hash typu EIP712Domain od separatora domeny?
Hash typu opisuje wyłącznie strukturę domeny, czyli listę jej elementów, i nie zależy od wpisanych wartości. Separator domeny to ten sam opis wzbogacony o konkretną nazwę, wersję, numer sieci i adres kontraktu.
Czy kalkulator policzy skrót podpisu albo hash całej wiadomości?
Nie. Narzędzie podaje hash typu domeny oraz separator domeny. Skrót wiadomości i wartość, którą podpisuje portfel, wyznaczasz osobno w swojej aplikacji.
Czy kalkulator obsługuje domenę z polem salt?
Nie, obsługiwane są cztery elementy: nazwa, wersja, numer sieci i adres kontraktu. Jeśli Twoja domena zawiera dodatkową sól, uzyskany tutaj separator będzie inny niż w Twojej aplikacji.
Czy dane wpisane w kalkulatorze są gdzieś wysyłane?
Nie. Obliczenia wykonują się lokalnie w Twojej przeglądarce i nic nie jest przesyłane na zewnątrz. Możesz więc wpisywać wartości bez obaw.
Zobacz też — powiązane narzędzia
Wynik jest liczony lokalnie i dotyczy wyłącznie separatora domeny; przed użyciem w podpisie zweryfikuj typ domeny i parametry z kontraktem.