Anatomia Ethereum cz. I | Jak postawić węzeł korzystając z AWS?
Chcesz poznać Ethereum od środka, postawić własny węzeł i połączyć z siecią? Jeśli tak, ten poradnik jest właśnie dla Ciebie.
Tytułem wstępu
Ostatnio czytam dużo artykułów autorstwa Henrique Centieiro. Facet ma łeb na karku i, pisząc dość prostym językiem, potrafi jasno przedstawić i wytłumaczyć kwestie, które na pierwszy rzut oka mogą odpychać niektórych wymiarem swojego skomplikowania. Całkiem niedawno natknąłem się na jego opracowanie dotyczące uruchamiania węzłów w sieci Ethereum przy użyciu chmury Amazon Web Services (AWS). Zainspirowany tym opracowaniem postanowiłem przygotować niniejszy poradnik. Dajcie znać w komentarzasz, czy Wam się przydał:).
Jak uruchomić węzeł Ethereum korzystając z Amazon Web Services?
Aby uruchomić węzeł przy użyciu Ethereum Geth, będziesz musiał skorzystać z maszyny wirtualnej (Virtual Machine).
Ta sekcja będzie zawierała wiele zrzutów ekranu z wiersza poleceń, dzięki czemu łatwiej będziesz mógł śledzić i sprawdzać, co się faktycznie dzieje w czasie całego procesu.
Istnieją dwie główne opcje: możesz wdrożyć maszynę wirtualną Ubuntu za pomocą Oracle VM VirtualBox (opcja bezpłatna) lub skorzystać z usług jednego z głównych dostawców chmury — AWS, Google Cloud, Azure, Alibaba Cloud lub IBM. Druga opcja jest prawdopodobnie łatwiejsza, bardziej elastyczna i szybsza. Ubuntu to system operacyjny Linux, podobnie jak Windows lub macOS.
Wracając do wdrażania maszyny wirtualnej Ubuntu, jeśli postawisz ją na swoim laptopie, może ona zużywać wiele zasobów z twojego komputera i bardzo go spowolnić. Z tego powodu wdrożenie w chmurze jest prawdopodobnie najlepszą opcją.
Trzecią alternatywą byłoby zrobienie tego bezpośrednio z poziomu komputera. Mimo to bezpieczniej jest, jeśli łączysz się z izolowanej maszyny wirtualnej, której możesz zasadniczo używać jako swoistego snadboxa. Załóżmy również, że łączysz się z użyciem komputera osobistego. W takim przypadku wystawisz swój adres IP na widoczność w sieci Ethereum i – jako komputer zajmujący się krypto – możesz paść ofiarą jakiegoś ataku ze strony hakerów.
Przygotujmy naszą maszynę wirtualną Ubuntu na AWS!
Poniżej znajdziesz szybki przewodnik po tym, jak wdrożyć maszynę wirtualną Ubuntu na AWS. Wystarczy wykonać poniższe czynności.
- Jeśli nie masz konta AWS, utwórz je. Zajmie Ci to 3 minuty
- Gdy Twoje konto AWS będzie gotowe, przejdź do usług i wybierz EC2
- Kliknij instancje → Uruchom instancje
- Wybierz AMI: przewiń w dół, aż znajdziesz pierwszą opcję „Serwer Ubuntu”. Kliknij „select”
5. Wybierz typ instancji (instance type). Opcja darmowa (free tier) może być w porządku, aby pobawić się przez chwilę, ale pamiętaj, że instancja na „free tier” może mieć problemy z wydajnością podczas uruchamiania węzła Ethereum. W takim przypadku alternatywą może być wybranie t2.large lub t2.xlarge i zatrzymanie instancji, gdy jej nie używasz, aby uniknąć ponoszenia dodatkowych kosztów. Kliknij „next”.
6. Skonfiguruj szczegóły instancji (instance details). Większość ustawień możesz zostawić bez zmian. W wierszu „automatycznie przypisz publiczny adres IP” (auto-assign public IP) wybierz „włącz”. Aby zaoszczędzić trochę pieniędzy, możesz również kliknąć „request spot instance”. Instancje Spot mogą pozwolić Ci zaoszczędzić około 50% kosztów, ale pamiętaj, że AWS może zakończyć instancje, jeśli cena spot wzrośnie. Nie powinieneś używać instancji spot, jeśli korzystasz a produkcyjnej instancji łańcucha bloków.
7. Dodaj zasoby pamięci (add storage). Będziemy potrzebować dla naszego węzła trochę pamięci. Do zabawy wystarczy 200GB do 300GB SDD ogólnego przeznaczenia. Kliknij „next”.
8. Tagi (Tags). Tutaj możesz wpisać nazwę dla swojego węzła Ethereum. Wpisz „Nazwa” w polu głównym i „Węzeł Ethereum” w polu Wartość.
9. Skonfiguruj grupy bezpieczeństwa (security groups): upewnij się, że port SSH 22 jest otwarty dla zakresu adresów IP 0.0.0.0/0. Oznacza to, że jest otwarty na całą sieć. Upewnij się, że kiedy już skończysz zabawę, usuniesz to ustawienie.
10. Wybierz parę kluczy, której już używasz lub utwórz i pobierz nową parę kluczy. Nie zapomnij, gdzie pobierasz parę kluczy. Będziemy tego potrzebować później do SSH do naszego węzła.
UWAGA: jeśli tylko testujesz i bawisz się nowym węzłem Ethereum, nie zapomnij zakończyć instancji EC2, nawet jeśli są one na bezpłatnym poziomie. Poziom bezpłatny ma limit, na przykład 750 godzin, po upływie których będziesz musiał zacząć płacić. Instancje EC2 mogą kosztować zaledwie kilka centów za godzinę. Jeśli jednak pozostawisz je działające przez cały miesiąc, rachunek może okazać się dość wysoki.
Najlepszą konfiguracją jest posiadanie t2.xlarge, który może działać przy około 60% wykorzystania procesora, aby zaktualizować lekki węzeł Ethereum (light node):
Możesz zatem zdecydować się na t2.xlarge lub jego odpowiednik, aby uniknąć ciągłego zawieszania się węzła i uzyskania tym samym ogólnie lepszej wydajności działania usługi. T2.xlarge zapewnia 4 vCPU, 16 GB pamięci i lepszą wydajność sieci. Na AWS możesz zaznaczyć checkbox „request spot instances”, które będą miały niższą cenę.
To wszystko. Po utworzeniu instancji Ubuntu EC2 musisz połączyć się z nią przez SSH, aby wchodzić w interakcje z maszyną wirtualną i zainstalować oprogramowanie Ethereum.
W panelu EC2 wybierz nową instancję i kliknij Połącz:
Postępuj zgodnie z jedną z opcji. Możesz użyć opcji EC2 Instance Connect, internetowego interfejsu wiersza poleceń dostarczonego przez AWS lub SSH, używając dowolnego CLI rozwiązania w tym zakresie. Centieiro zaleca opcję SSH. Aby z niej skorzystać, postępuj zgodnie z instrukcjami. Możesz użyć wiersza polecenia na swoim komputerze — w systemie Windows kliknij menu Windows i wpisz cmd. W przypadku komputerów Mac otwórz folder aplikacji, następnie „narzędzia” i kliknij dwukrotnie Terminal lub naciśnij Command – spacja, aby uruchomić Spotlight i wpisz „Terminal”. Alternatywnie możesz pobrać emulator konsoli, taki jak na przykad Cmder.
Aby kontynuować, musisz zlokalizować folder, w którym przechowywana jest para kluczy AWS, a następnie postępować zgodnie z poleceniami, tak jak pokazano na stronie połączenia AWS dla Twojej instancji.
Po połączeniu / SSH z maszyną Ubuntu uruchom kolejno następujące polecenia, aby zainstalować niektóre pakiety i biblioteki, których będziemy potrzebować:
- sudo apt-get install (aby zainstalować APT — Advanced Package Tools)
- sudo apt-get update (do aktualizacji pakietu)
- sudo add-apt-repository ppa:ethereum/ethereum (aby zainstalować repozytorium ethereum)
- sudo apt-get update( aby zaktualizować pakiet)
- sudo apt-get install ethereum (aby zainstalować najnowszą wersję Ethereum Go/Geth)
Teraz, gdy zainstalowaliśmy Ethereum Geth, możesz spojrzeć na opcję pomocy, wpisując:
geth – help
Możesz także rzucić okiem na foldery w węźle, aby zobaczyć, co znajduje się w folderze Ethereum. W tym celu wpisz polecenie:
ls – all
(wyświetli się lista obiektów i folderów przechowywanych w instancji. Powinieneś zobaczyć .ethereum, jak na obrazku poniżej), a następnie wpisz:
cd .ethereum/
(aby wejść do folderu .ethereum, pamiętaj, że update może potrwać kilka minut)
.ethereum/ jest naszą domyślną ścieżką do wywoływania dowolnych funkcji w węźle Ethereum. Geth.ipc użyjemy później, aby później połączyć się z łańcuchem bloków.
Jeśli z jakiegoś powodu nie możesz znaleźć folderu .ethereum, może to być związane ze ścieżką do folderu .ethereum. Aby wejść do tego folderu, możesz spróbować wpisać następującą ścieżkę. To jest twoja domyślna ścieżka:
cd /home/ubuntu/.ethereum/
Aby uruchomić nasz węzeł, pierwszym krokiem jest zsynchronizowanie go z blockchainem. Jako węzeł blockchain musimy być zsynchronizowani z innymi węzłami w blockchain. Jednak pobranie pełnego łańcucha bloków do węzła może zająć nawet kilka dni, no i dużo miejsca.
Według Etherscan, blockchain Ethereum ma obecnie ponad 800 GB i rośnie z każdą minutą:
Biorąc pod uwagę wielkość łańcucha bloków, możemy przydzielić do naszego węzła maksymalną pamięć podręczną (używamy instancji EC2 z dostępnymi tylko kilkoma gigabajtami). Chcemy wybrać tryb synchronizacji, który pozwoli na wykonanie lżejszej synchronizacji. Istnieją 3 tryby synchronizacji węzłów Ethereum: szybki, lekki i pełny.
syncmode=fast — pobiera nagłówki bloków i snapshot z ostatnimi 64 blokami. Nie odtwarza transakcji i zmniejsza ilość pracy, którą musi wykonać Twoja maszyna
syncmode=light — pobiera tylko nagłówki bloków i sprawdza poprawność danych względem skrótu nagłówków. Kompletuj aktualizacje w locie, łącząc się z innymi, równorzędnymi sobie pełnymi węzłami. Ten rodzaj synchronizacji nie umozliwia wydobywania ETH (mining)
syncmode=full — uruchamia pełny węzeł, pobierając cały łańcuch bloków od bloku genesis. Przechodzi przez wszystkie transakcje w łańcuchu bloków, jedna po drugiej, odtwarzając je wszystkie i zapewniając pełną walidację łańcucha bloków. Wymaga dużej ilości zasobów w zakresie mocy obliczeniowej i łącza szerokopasmowego.
Jako, że chcemy po prostu pobawić się siecią, użyjemy syncmode=fast, gdzie nasz węzeł będzie pobierał tylko nagłówki bloków i sprawdzał poprawność tylko ostatnich 1000 bloków.
Jest też inny rodzaj węzła: archive node. Ten rodzaj węzła jest jak rozszerzenie pełnego węzła. Węzły archive potrzebują znacznie więcej miejsca — od 2 do 3 terabajtów i przechowują wszystkie dane historyczne, co pozwala nam na znacznie szybsze pobieranie informacji. Węzły „archiwalne” pozwalają na szybkie odzyskanie wszystkich danych historycznych. Większość ludzi nie będzie potrzebować takiego rodzaju węzła, aczkolwiek może on dać korzyści giełdom, eksploratorom bloków, sprzedawcom portfeli i innym firmom, którym zależy na dość szybkim dostępie do danych historycznych.
Wróćmy do naszego węzła. Następnym krokiem do tego, aby uruchomić nasz węzeł Ethereum, jest rozpoczęcie jego synchronizacji. Zacznijmy od wpisania:
geth — syncmode=fast
Po uruchomieniu tego polecenia węzeł rozpocznie synchronizację i powinieneś zacząć widzieć coś takiego jak na poniższym print screenie. Przy użyciu — syncmode=fast lub — syncmode=light, synchronizacja węzła z siecią może zająć około 30 minut.
UWAGA: Aby użyć konsoli geth lub Python3 do interakcji z siecią Ethereum, musisz uruchomić węzeł Ethereum.
Jeśli zamiast łączyć się z główną siecią Ethereum, chcesz połączyć się z jedną z sieci testowych, takich jak Goerli, Rinkeby lub Ropsten, możesz użyć jednego z następujących poleceń:
Geth — goerli
Geth — rinkeby
Geth — ropsten
Łączenie się z sieciami testowymi pozwala na zabawę bez konieczności doładowania konta ETH. Sieci testowe mają krany, które pozwalają uzyskać nieco darmowego, testowego etheru. Zauważ, że Goerli i Rinkeby są blockchainami proof of authority i mogą nie replikować mainnetu Ethereum. Nawiasem mówiąc, jeśli jeszcze nie wiesz, co oznaczają nazwy sieci testowych, to są one nazwami szwedzkich miejscowości.
Traz, gdy węzeł jest uruchomiony, możemy połączyć się z konsolą Geth Javascript i rozpocząć interakcję z blockchainem.
Otwórz drugą linię poleceń w nowym oknie i SSH do swojej instancji
Aby uruchomić konsolę Geth Javascript, tak jak na poniższym zrzucie ekranu. w wierszu poleceń wpisz:
geth attach
Gratulacje! Jesteś połączony z siecią Ethereum!
Co możesz teraz zrobić i co oznaczają poszczególne komendy wiersza poleceń konsoli Geth? O tym powiemy w kolejnym artykule!
Opracowano na podstawie Deploying an Ethereum node on AWS Cloud autorstwa Henrique Centieiro; źródło