Sort:  

Każdy może uruchomić własny node Steem-a, z technicznego punktu widzenia jest to serwer na którym działa aplikacja steemd. steemd "rozumie" blockchain, jest w stanie z niego pobierać dane i zapisywać. Węzły można podzielić na 3 główne grupy:

  • seed node
  • exchange / api node
  • witness node

seed node to rodzaj węzła którego głównym zadaniem jest przechowywanie aktualnej wersji blockchain-a i udostępnianie danych wszystkim zainteresowanym, w praktyce wygląda to tak, że jeśli uruchomisz steemd to aplikacja połączy się do seed node-ów i z nich pobierze aktualne dane niezbędne do działania. Listę takich node-ów możesz zobaczyć na https://github.com/steemit/steem/blob/master/doc/seednodes.txt.

exchange / api node to również ta sama aplikacja steemd ale uruchomiona z dodatkowymi pluginami, dzięki temu możemy pobierać konkretne dane o postach, użytkownikach, tagach, transakcjach, itd. Komunikacja klienta z takim węzłem odbywa się poprzez interfejs RPC (json), przykładowy request zwracający informację o koncie wygląda tak,

$ curl --data '{"jsonrpc": "2.0", "method": "get_accounts", "params": [["jamzed"]], "id": 1 }' https://gtg.steem.house:8090/rpc

Listę publicznie dostępnych API node-ów możesz sprawdzić na https://geo.steem.pl/ (mała autoreklama) ;-)

witness node to też steemd ale uruchomiony z pluginem witness, pozwalącym "produkować" bloki. Steem opiera się o protokół DPOS (Delegated Proof of Stake), więc do poprawnego działania całej sieci potrzebni są delegaci którzy są wybierani poprzez głosowanie. Każdy może być witnessem (opublikować publiczny klucz typu signing), ale żeby realnie produkować bloki trzeba jeszcze uzyskać odpowiednią liczbę głosów i nie chodzi tu o ich ilość, ale o moc (ilość posiadanych VESTS przez głosującego). Witnessi oprócz produkcji bloków ustalają również cenę STEEM, wysokość opłaty za utworzenie nowego konta, posiadają również kilka mechanizmów dzięki którym są w stanie "sterować" wartością SBD który zawsze powinien być w okolicy ~1 USD.

No właśnie. W tej wiedzy o węzłach brakuje mi kilku klocków. Sporo już wyjaśniłeś, ale jeszcze jedno czy dwa pytania (no dobrze kilka pytań).

  1. Jaka jest użyteczność czystego seed node'a (poza byciem częścią sieci) dla jego właściciela? Ma choć jedno jakieś API by można było sobie lokalnie odpytywać blockchaina? Czy też steemd gada tylko z innymi steemd i koniec?
  2. Czy też do tego celu (by mieć jakieś API) trzeba doinstalować któryś z pluginów?
  3. Czy możesz wskazać jakieś źródło informacji co do tego jakie zasoby są potrzebny by sobie seed node'a uruchomić? Choćby lokalnie, dla własnych testów.
  4. Czy ewentualnie doinstalowywanie pluginów zwiększa jakoś drastycznie te wymagania?

Natomiast:

czego ja ze swoim introwertycznym charakterem muszę się nauczyć.

oraz

https://geo.steem.pl/ (mała autoreklama) ;-)

oraz komentarz, na który właśnie odpowiadam - myślę, że świetnie Ci idzie. :-D

Jaka jest użyteczność czystego seed node'a (poza byciem częścią sieci) dla jego właściciela? Ma choć jedno jakieś API by można było sobie lokalnie odpytywać blockchaina? Czy też steemd gada tylko z innymi steemd i koniec?

Seed node głównie służy do wymiany danych pomiędzy węzłami i jest to bardzo ważna funkcja, ponieważ zapewnia stabilne działanie sieci u jej podstaw. Żaden steemd nie uruchomi się bez podłączenia do węzłów seed.

Ja do uruchomienia seed node-a użyłem gotowego obrazu Docker z repozytorium Steemit, gdzie dwa podstawowe API (database_api, login_api) są włączone, czyli funkcje tj. get_accounts, get_account_references, lookup_account_names, lookup_accounts, get_account_count, get_conversion_requests, get_account_history, get_owner_history, get_recovery_request, będą działać.

Czy też do tego celu (by mieć jakieś API) trzeba doinstalować któryś z pluginów?

Pluginy służą do rozszerzenia funkcjonalności steemd, np. dla węzła typu witness wymagany jest plugin witness (enable-plugin = witness), jeśli chcesz uruchomić funkcjonalność API, to oprócz pluginów musisz włączyć też funkcjonalnośc public api np. database_api, login_api, account_by_key_api, network_broadcast_api, tag_api, follow_api, market_history_api, raw_block_api.

Czy możesz wskazać jakieś źródło informacji co do tego jakie zasoby są potrzebny by sobie seed node'a uruchomić? Choćby lokalnie, dla własnych testów.

Wymagania są podane w repo (chociaż wydają się być już trochę nieaktualne...). steemd jest bardzo pamięciożerny ze względu na sposób w jaki przechowuje wewnętrzne dane, oprócz miejsca na dysku dla samego blockchain-a (48GB), potrzebujesz dużo pamięci (lub bardzo szybkiego dysku) na tzw. plik shared memory, który obecnie ma już rozmiar > 16GB na seed i witness node-ach, dla węzłów typu Full API jego rozmiar to nawet > 186GB i masz teraz dwie opcje, albo zapewnić tyle pamięci by plik zmieścił się cały, albo wykorzystać dysk twardy. Moje serwery posiadaja po 32GB pamieci, obecne zuzycie pamieci RSS wynosi ~23GB.

Dlaczego plik shared memory jest taki ważny? Ponieważ to w nim są przepisane dane z blockchain-a niezbędne do działania Twojego steemd (plik ten tworzy się podczas operacji replay blockchain), czyli mówiąc w skrócie przy pierwszym uruchomieniu steemd, kiedy następuje analiza całego blockchaina. Czas operacji replay i rozmiar pliku shared_memory zależy od ilości włączonych pluginów/api, może to trwać od kilku godzin do nawet kilkudziesięciu...

Czy ewentualnie doinstalowywanie pluginów zwiększa jakoś drastycznie te wymagania?

Tak, tak jak opisałem na powyższym przykładzie, węzeł witness lub seed wymaga obecnie >16GB pamięci (zakładając, że używamy tylko pamięci i nie chcemy wchodzić na SWAP), węzeł Full API (wszystkie API włączone), >186GB.

Gdybyś chciał pobawić się z API to polecam Ci używanie serwerów publicznie dostepnych, wiele usług się na nich opiera i nawet jeśli od czasu do czasu któryś jest niedostępny to można zawsze przepiąć się na inny ;-) Pozwoli Ci to zapoznać się z Steem a ominie Cię dużo problemów związanych z samym utrzymywaniem takiego hosta ;-)

polecam Ci używanie serwerów publicznie dostepnych

Jak na razie tak właśnie robię :-). Tylko tak mi czasem jakieś głupie pomysły przychodzą, czy by tu nie zapuścić jakiegoś skryptu, żeby przeleciał cały blockchain... w tę i z powrotem. No ale na razie wybiłeś mi to z głowy :-).

Wielkie dzięki za tak wyczerpującą odpowiedź. Wreszcie mi się we łbie wszystko ułożyło (miałem większość kawałków, ale mi je jednym kopnięciem z półobrotu poukładałeś). :-D

Ciesze sie, ze choc troche moglem cos podpowiedziec ;-) ja bym sie nie stresowal tym, ze caly blockchain pobierzesz z jakiegos serwera ;-) kolejny ciekawy projekt to sbds czyli blockchain w bazie danych ;-) sa tez publiczne instancje, gdzie mozesz klientem MySQL sie polaczyc i wyciagac z blockchaina dane przy pomocy SQL-a ;-)

Bardzo dziękuje za obszerną odpowiedź.

W tym temacie braki w mojej wiedzy są na razie największe. Ale według mnie każdy. Każdy kto ma odpowiednio silną maszynę (nie musi to być od razu jakiś superkomputer, ale sporo RAMu i szybki dysk są chyba kluczowe) i szybkie łącze. I odpowiednią wiedzę, żeby skonfigurować odpowiednio maszynę, zainstalować i skonfigurować oprogramowanie.

Ale jeśli się pytasz czy musisz mieć od kogoś pozwolenie - to nie, nie musisz. I to jest właśnie najpiękniejsze w blockchainie. Decentralizacja sieci dotyczy także jej własności - nie ma jednego właściciela, który może wydawać pozwolenia albo zakazy. Każdy kto się do sieci przyłączy, jest jej współwłaścicielem.

Natomiast inna sprawa jest z witnessami (czyli jak tu niektórzy próbują popularyzować takie tłumaczenie na polski - z delegatami). To są Ci właściciele węzłów, którzy są wybierani spośród społeczności przez głosowanie na witnessa. Ich węzły, jeśli są odpowiednio niezawodne, a oni sami zdobyli zaufanie społeczności, mogą zatwierdzać kolejne bloki w łańcuchu i zarabiać na tym kasę. Z tego co wiem, mamy już jednego polskiego witnessa @gtg i drugiego pretendującego na to stanowisko: @jamzed. Zachęcam do zapoznania się z nimi i z tym co robią dla społeczności Steem i rozważenie oddania na nich głosów.

Dziękuję.

Szczerze dodam, że widząc ile dobrego dla społeczności robią @gtg i @noisy czuję się trochę nieswojo... wydawało mi się, że rola delegata to jedynie techniczne wyzwanie, ale z tygodnia na tydzień uświadamiam sobie, że tu nie chodzi tylko o serwery i konfigurację... to coś znacznie więcej... czego ja ze swoim introwertycznym charakterem muszę się nauczyć.

Myślę, że introwertyczny charakter nie musi Ci wcale przeszkadzać. O ile dobrze oceniam to co widzę, to dość technokratyczna społeczność, gdzie ceniona są zarówno wiedza i kompetencje jak i chęć współpracy i dzielenia się wiedzą.

Mam nadzieję, że delegaci nie zdobywają tu głosów przez rzucanie gładkich słówek i sprzedawanie sztucznych uśmiechów, czyli mówienie każdemu wyborcy tego co chce usłyszeć. Dość tego mamy w prasie i telewizji. A jeśli tak jest, to tym bardziej warto szukać takich delegatów, którym bliżej do technokraty niż do polityka.