Przejdź do głównej treści
Change page

Konta Ethereum

Konto Ethereum to jednostka z saldem etheru (ETH), która może wysyłać wiadomości w sieci Ethereum. Konta mogą być kontrolowane przez użytkowników lub wdrożone jako inteligentne kontrakty.

Wymagania wstępne

Aby pomóc Ci lepiej zrozumieć tę stronę, zalecamy najpierw przeczytać nasze wprowadzenie do Ethereum.

Rodzaje kont

Ethereum ma dwa rodzaje kont:

  • Konto posiadane zewnętrznie (EOA - Externally-owned account) – kontrolowane przez każdego, kto posiada klucze prywatne
  • Konto kontraktu – inteligentny kontrakt wdrożony w sieci, kontrolowany przez kod. Dowiedz się więcej o inteligentnych kontraktach

Oba rodzaje kont mają możliwość:

  • Otrzymywania, przechowywania i wysyłania ETH oraz tokenów
  • Interakcji z wdrożonymi inteligentnymi kontraktami

Kluczowe różnice

Posiadane zewnętrznie (EOA)

  • Utworzenie konta nic nie kosztuje
  • Może inicjować transakcje
  • Transakcje między kontami posiadanymi zewnętrznie mogą być tylko transferami ETH/tokenów
  • Składa się z kryptograficznej pary kluczy: klucza publicznego i prywatnego, które kontrolują aktywność konta

Kontrakt

  • Utworzenie kontraktu wiąże się z kosztami, ponieważ wykorzystujesz pamięć sieci
  • Może wysyłać wiadomości tylko w odpowiedzi na otrzymaną transakcję
  • Transakcje z konta zewnętrznego na konto kontraktu mogą wyzwolić kod, który może wykonać wiele różnych akcji, takich jak transfer tokenów lub nawet utworzenie nowego kontraktu
  • Konta kontraktów nie mają kluczy prywatnych. Zamiast tego są kontrolowane przez logikę kodu inteligentnego kontraktu

Analiza konta

Konta Ethereum mają cztery pola:

  • nonce – Licznik wskazujący liczbę transakcji wysłanych z konta posiadanego zewnętrznie lub liczbę kontraktów utworzonych przez konto kontraktu. Dla każdego konta może zostać wykonana tylko jedna transakcja z danym nonce, co chroni przed atakami typu replay (powtórzenia), w których podpisane transakcje są wielokrotnie rozgłaszane i ponownie wykonywane.
  • balance – Liczba wei posiadanych przez ten adres. Wei to nominał ETH, a na 1 ETH przypada 1e+18 wei.
  • codeHash – Ten hash odnosi się do kodu konta w Wirtualnej Maszynie Ethereum (EVM). Konta kontraktów mają zaprogramowane fragmenty kodu, które mogą wykonywać różne operacje. Ten kod EVM jest wykonywany, jeśli konto otrzyma wywołanie wiadomości. Nie można go zmienić, w przeciwieństwie do innych pól konta. Wszystkie takie fragmenty kodu są zawarte w bazie danych stanu pod odpowiadającymi im hashami w celu późniejszego pobrania. Ta wartość hasha jest znana jako codeHash. W przypadku kont posiadanych zewnętrznie pole codeHash jest hashem pustego ciągu znaków.
  • storageRoot – Czasami znany jako hash pamięci (storage hash). 256-bitowy hash węzła głównego drzewa Merkle Patricia, który koduje zawartość pamięci konta (mapowanie między 256-bitowymi wartościami całkowitymi), zakodowany w drzewie jako mapowanie z 256-bitowego hasha Keccak 256-bitowych kluczy całkowitych na zakodowane w RLP 256-bitowe wartości całkowite. To drzewo koduje hash zawartości pamięci tego konta i domyślnie jest puste.

A diagram showing the make up of an account Diagram zaadaptowany z Ethereum EVM illustrated (opens in a new tab)

Konta posiadane zewnętrznie i pary kluczy

Konto składa się z pary kluczy kryptograficznych: publicznego i prywatnego. Pomagają one udowodnić, że transakcja została faktycznie podpisana przez nadawcę i zapobiegają fałszerstwom. Twój klucz prywatny to to, czego używasz do podpisywania transakcji, więc daje Ci on pieczę nad środkami powiązanymi z Twoim kontem. Tak naprawdę nigdy nie posiadasz kryptowaluty, posiadasz klucze prywatne – środki zawsze znajdują się w księdze głównej Ethereum.

Zapobiega to rozgłaszaniu fałszywych transakcji przez złośliwych aktorów, ponieważ zawsze można zweryfikować nadawcę transakcji.

Jeśli Alice chce wysłać ether ze swojego konta na konto Boba, musi utworzyć żądanie transakcji i wysłać je do sieci w celu weryfikacji. Wykorzystanie przez Ethereum kryptografii klucza publicznego gwarantuje, że Alice może udowodnić, iż to ona pierwotnie zainicjowała żądanie transakcji. Bez mechanizmów kryptograficznych złośliwy przeciwnik Eve mógłby po prostu publicznie rozgłosić żądanie wyglądające mniej więcej tak: „wyślij 5 ETH z konta Alice na konto Eve”, a nikt nie byłby w stanie zweryfikować, że nie pochodzi ono od Alice.

Tworzenie konta

Kiedy chcesz utworzyć konto, większość bibliotek wygeneruje dla Ciebie losowy klucz prywatny.

Klucz prywatny składa się z 64 znaków szesnastkowych i może być zaszyfrowany hasłem.

Przykład:

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

Klucz publiczny jest generowany z klucza prywatnego przy użyciu algorytmu podpisu cyfrowego opartego na krzywych eliptycznych (Elliptic Curve Digital Signature Algorithm) (opens in a new tab). Otrzymujesz publiczny adres dla swojego konta, biorąc ostatnie 20 bajtów hasha Keccak-256 klucza publicznego i dodając 0x na początku.

Oznacza to, że konto posiadane zewnętrznie (EOA) ma 42-znakowy adres (20-bajtowy segment, czyli 40 znaków szesnastkowych plus prefiks 0x).

Przykład:

0x5e97870f263700f46aa00d967821199b9bc5a120

Poniższy przykład pokazuje, jak użyć narzędzia do podpisywania o nazwie Clef (opens in a new tab) do wygenerowania nowego konta. Clef to narzędzie do zarządzania kontami i podpisywania, które jest dołączone do klienta Ethereum, Geth (opens in a new tab). Polecenie clef newaccount tworzy nową parę kluczy i zapisuje je w zaszyfrowanym magazynie kluczy.

Dokumentacja Geth (opens in a new tab)

Możliwe jest wyprowadzenie nowych kluczy publicznych z klucza prywatnego, ale nie można wyprowadzić klucza prywatnego z kluczy publicznych. Niezwykle ważne jest, aby dbać o bezpieczeństwo swoich kluczy prywatnych i, jak sama nazwa wskazuje, zachować je jako PRYWATNE.

Potrzebujesz klucza prywatnego do podpisywania wiadomości i transakcji, co generuje podpis. Inni mogą następnie użyć tego podpisu do wyprowadzenia Twojego klucza publicznego, udowadniając w ten sposób autora wiadomości. W swojej aplikacji możesz użyć biblioteki JavaScript do wysyłania transakcji do sieci.

Konta kontraktów

Konta kontraktów również mają 42-znakowy adres szesnastkowy:

Przykład:

0x06012c8cf97bead5deae237070f9587f8e7a266d

Adres kontraktu jest zazwyczaj nadawany, gdy kontrakt jest wdrażany na blockchainie Ethereum. Adres pochodzi od adresu twórcy i liczby transakcji wysłanych z tego adresu („nonce”).

Klucze walidatora

W Ethereum istnieje również inny rodzaj klucza, wprowadzony, gdy Ethereum przeszło z konsensusu opartego na dowodzie pracy (PoW) na dowód stawki (PoS). Są to klucze „BLS” i służą do identyfikacji walidatorów. Klucze te mogą być wydajnie agregowane w celu zmniejszenia przepustowości wymaganej przez sieć do osiągnięcia konsensusu. Bez tej agregacji kluczy minimalna stawka dla walidatora byłaby znacznie wyższa.

Więcej o kluczach walidatora.

Uwaga na temat portfeli

Konto to nie portfel. Portfel to interfejs lub aplikacja, która pozwala na interakcję z Twoim kontem Ethereum, niezależnie od tego, czy jest to konto posiadane zewnętrznie, czy konto kontraktu.

Prezentacja wizualna

Zobacz, jak Austin przeprowadzi Cię przez funkcje hashujące i pary kluczy.

Hash function — ETH.BUILD

A demonstration of cryptographic hash functions using the ETH.BUILD educational tool.

Oglądaj z transkrypcją 

Key pair — ETH.BUILD

A demonstration of public-private key pairs using the ETH.BUILD educational tool.

Oglądaj z transkrypcją 

Dalsza lektura

Znasz zasób społeczności, który Ci pomógł? Edytuj tę stronę i dodaj go!