Anatomia Ethereum cz. II | Tajemnice bloku

W poprzednim artykule omówiliśmy etapy wdrożenia węzła Ethereum w chmurze Amazon Web Services (AWS). Teraz, gdy nasz węzeł jest wdrożony i działa, zaczyna się prawdziwa zabawa. Nauczmy się pobierać bloki Ethereum, postaramy zrozumieć różne komponenty bloku wraz ze znaczeniem kilku innych poleceń związanych z siecią największego altcoina.

Ethereum — największy na świecie komputer rozproszony

Ethereum jest również określane jako blockchain drugiej generacji, obsługujący po raz pierwszy w historii smart kontrakty i funkcjonalności skryptów. Smart kontrakty dają wiele możliwości i mogą praktycznie zautomatyzować wszystko, stając się samoczynnie wykonującym się kodem komputerowym, który żyje w zdecentralizowanym łańcuchu bloków. Po spełnieniu warunków inteligentnego kontraktu wyzwalane jest zdarzenie (bez względu na to, do czego kontrakt został zaprojektowany), spełniając tym samym jego ostateczny cel.

Smart kontrakty w Ethereum napisane są w języku programowania o nazwie Solidity, a programy te są uruchamiane w EVM — Ethereum Virtual Machine. EVM możesz postrzegać jako gigantyczną, kompletną, zdecentralizowaną maszynę wirtualną z kompletnością Turinga, rozproszoną na wszystkich węzłach Ethereum na całym świecie. W sumie jest około 8500 węzłów i prawie każdy może taki węzeł hostować. EVM jest podstawą realizacji smart kontraktów. Ze względu na swoją zdecentralizowaną naturę jest również wysoce redundantny, wysoce odporny na błędy i bardzo odporny na ataki, takie jak skumulowane i niezmienne ataki DDoS. Kompromis polega na tym, że Ethereum może mieć nieco niską przepustowość i/lub opłaty transakcyjne bywają (póki co) dosyć wysokie.

Więcej na ten temat przeczytasz tutaj:

Blok Ethereum

Blok Ethereum składa się z kilku pól przedstawionych poniżej. Przeanalizujemy je wszystkie po kolei. Poniżej możesz zobaczyć blok pobrany z łańcucha bloków Ethereum:

blok ethereum

Blok Ethereum jest nieco inny w porównaniu z blokiem Bitcoina, chociaż niektóre pola są identyczne. To jest rzeczywisty blok, a dokładniej blok 888888, który został wydobyty ze znacznikiem czasu 1453494307 (epoch time), który w notacji czytelnej dla człowieka stanowi 22 stycznia 2016, 20:25:07 GMT. Ten przykładowy blok jest doskonałym przykładem tego, jak wygląda każdy inny blok Ethereum.

Zastosujmy kilka poleceń Geth

Zakładając, że masz już działającą maszynę Ethereum geth, możemy zacząć zabawę. Jeśli nie masz jeszcze uruchomionego węzła, zajrzyj do tego poradnika.

Jednym z pierwszych poleceń do nauki w konsoli Geth jest:

eth.

i bardzo szybko dwukrotnie naciśnij klawisz tabulatora.

Zobaczysz listę poleceń API. Te polecenia API są kompatybilne z różnymi językami programowania, takimi jak JavaScript i Python.

Jeśli naciśniesz klawisz tabulacji, wiersz poleceń automatycznie uzupełni wszystkie polecenia, które zaczniesz pisać. Na przykład możesz wpisać eth.syn, a jeśli naciśniesz klawisz tabulacji, powinno to zostać automatycznie uzupełnione do eth.syncing.

Aby przeprowadzić kontrolę stanu połączenia Ethereum i sprawdzić, czy węzeł się synchronizuje, możesz użyć następującego polecenia:

eth.syncing

Widzimy, że synchronizujemy się z siecią, statusem, bieżącym blokiem w blockchain itp.

W ramach „eth.syncing” znajduje się kilka dodatkowych poleceń. Aby sprawdzić listę, możesz wpisać eth.syncing i dwukrotnie, bardzo szybko nacisnąć klawisz tabulatora.

Dzięki poleceniom synchronizacji możemy zobaczyć, że węzeł się synchronizuje. Aby zobaczyć bieżący blok, który synchronizuje nasz węzeł, możemy użyć polecenia eth.syncing lub eth.syncing.currentBlock.

Sprawdzanie stanu sieci węzła Ethereum

Sprawdźmy teraz nasz stan oraz to, czy nasz węzeł nasłuchuje i jest połączony z innymi, równorzędnymi węzłami. Aby pobrać dane z łańcucha bloków i przeprowadzić ich synchronizację, musisz mieć połączenie.

Używając polecenia net.listening, możemy przekonać się, że nasz net.listening=true, co jest OK, i wpisując do wiersza poleceń:

net.peerCount

widzimy, że jesteśmy połączeni z 16 równorzędnymi węzłami..

Innym interesującym poleceniem, które pomaga zrozumieć, jak zbudowana jest sieć jest:

admin.peers

Daje to informacje o węzłach równorzędnych, z którymi jesteś połączony.

Na powyższym zrzucie ekranu możemy zobaczyć pewne informacje o tym węźle, w tym wersję jego oprogramowania — w tym przypadku używa Geth v1.9.25 — a także adres IP węzła równorzędnego. Adres IP jest publiczny i dlatego nie powinieneś uruchamiać węzła z osobistego laptopa.

Jeśli chcesz uzyskać szczegółowe informacje o swoim węźle, możesz wpisać:

admin.nodeInfo

a otrzymasz podobne informacje z własnego węzła, w tym wersję, adres IP, bloki, konsensus i wiele więcej.

Tajemnice bloku Ethereum

Po sprawdzeniu, czy jesteś podłączony do sieci, możesz zacząć eksplorować bloki i pobierać dane. O ile Twój węzeł jest zsynchronizowany, możesz przejrzeć i zbadać dowolny blok w łańcuchu bloków Ethereum.

Każdy może sprawdzić, audytować lub śledzić dowolny blok, upewniając się, że sieci można zaufać. Wszystkie dane można zweryfikować. Taka jest natura publicznego blockchaina Ethereum.

Weźmy na przykład blok 987654 i wpiszmy następujące polecenie:

eth.getBlock()

Możesz na przykład wyszukać numer bloku:

eth.getBlock(987654)

lub wyszukać hash bloku, jeśli oczywiście jest on ci znany:

eth.getBlock(„0x4ca44f16a98a6bc8206c152057cf0d7a6caeb0b287e845e21a1da2849bea4c8a”)

Tutaj możesz zobaczyć wszystkie informacje o bloku, w tym trudność, gasLimit i gasUsed, hash, nonce w systemie szesnastkowym, znacznik czasu w notacji UNIX-owej, totalDifficulty i hash transakcji.

Znacznik czasu (timestamp): znacznik czasu bloku jest wyrażony w sekundach licząc od uniksowego epoch time. Jest to czas wydobycia bloku. Znacznik czasu jest ustalany przez górnika, który wydobył ten blok. Jako taki, górnik może w jakiś sposób manipulować znacznikiem czasu bloków lub transakcji, o ile przestrzega pewnych podstawowych zasad. Jedną z takich reguł jest chociażby to, że znacznik czasu bloku musi być czasem z przyszłości, a nie z przeszłości.

Czym jest czas uniksowy lub uniksowy epoch time? Czas uniksowy to zasadniczo sposób, w jaki komputer mierzy czas. Czas uniksowy to liczba sekund, które upłynęły od 1 stycznia 1970 r. Czas uniksowy „0” oznacza północ 1 stycznia 1970 r. i możesz zobaczyć tę datę, na przykład, gdy zresetujesz stary telefon komórkowy. 1455192272 oznacza „po ludzku” czwartek, 11 lutego 2016, 12:04:32.

stateRoot: root może być postrzegany jako gigantyczne drzewo Merkle wszystkich poprzednich bloków, transakcji i kodu w blockchainie Ethereum zahaszowanych do stateRoot tego bloku.

Ten korzeń stanu ma istotny cel: umożliwia każdemu węzłowi łatwą walidację z doskonałym stopniem pewności, że blok, który zawiera, jest poprawny bez konieczności weryfikowania wszystkich bloków łańcucha bloków. Zamiast tego może zweryfikować tylko drzewo skrótów z innych bloków. Jest to szczególnie ważne, gdy węzeł jest węzłem lekkim (light node).

logsBloom: logsBloom to łańcuch o długości 256 bajtów i tak naprawdę nie jest to log w klasycznym tego słowa znaczeniu. Jest to filtr dla dzienników blokowych i pozwala filtrować hash każdego elementu w bloku. Celem takiego działania jest zminimalizowanie liczby zapytań, które klienci muszą wykonać, poprzez przechowywanie niektórych zdarzeń, takich jak historyczne transakcje. Gdy pojawia się zapytanie „Czy dane z są w zestawie?” odpowiedź może brzmieć „może” lub „nie”. W ten sposób powstaje probabilistyczna struktura danych.

receiptsRoot: ten 32-bajtowy ciąg jest głównym hashem „pokwitowań” dla transakcji.

Transakcje (Transactions): tutaj widzisz skrót wszystkich transakcji w bloku.

TransactionsRoot: 32-bajtowy ciąg znaków jest hashem głównym drzewa Merkle wszystkich transakcji w bloku.

Możemy również dodać trochę magii do naszego eth.getBlock() i uzyskać szczegóły transakcji za pomocą polecenia takiego jak:

eth.getBlock(987654, true)

Spowoduje to również pobranie wszystkich transakcji z tego samego bloku. Oto szczegóły jednej z transakcji w bloku 98764, które pobraliśmy za pomocą eth.getBlock(987654, true):

W kolejnej odsłonie serii bedziemy kontynuować zabawę z siecią i uzyskiwać dodatkowe informacje z Ethereum, takie jak dane o transakcjach.

Artykuł opracowano na podstawie Exploring the Ethereum block: Retrieving Ethereum Block data using Geth autorstwa Henrique Centieiro, opublikowanego 29 czerwca br. w serwisie Medium.

Przeczytaj również:

blokEthereum
Komentarze (0)
Dodaj komentarz