🇵🇱 Dlaczego czasami dostajesz błąd "Bandwidth limit exceeded"?
Jeśli zastanawiasz się dlaczego widzisz ten komunikat to znaczy, że prawdopodobnie przekroczyłeś limit dostępnej przepustowości... albo... blockchain Steem zaczął się bronić ;-)
Co to jest bandwidth (przepustowość) i jak to działa?
Steem jest dostępny dla każdego za darmo, tu nie ma opłat za transakcje tak jak w przypadku wielu innych kryptowalut, nie ma tu reklam które wyskakują i próbują nam coś sprzedać, jest wręcz przeciwnie, Steem nas wynagradza i pozwala zarobić prawidziwe pieniądze. W związku z tym, Steem został uzbrojony w pewne mechanizmy obronne które pozwalają na szybką reakcję w przypadku gwałtownego zwiększenia się aktywności w sieci.
Każde konto w zależności od ilości posiadanych STEEM POWER ma nałożony limit na ilość danych które może wysłać i odebrać, im więcej SP posiada, tym większy dostaje limit. Jako dane wysłane lub odebrane uważa się każdą operację, może to być oddanie głosu, śledzenie użytkownika, transakcja, dodanie posta lub komentarza, generalnie każda nasza aktywność.
W przypadku normalnego działania Steem, kiedy nie występuje wzmożona aktywność, np. spowodowana przez boty które masowo głosują na posty, limit przyznany użytkownikowi powinien mu w zupełności wystarczyć na swobodne korzystanie z serwisu. Natomiast w przypadku gdy ruch w Steem zwiększy w krótkim przedziale czasowym, włączy się mechanizm ograniczający globalnie przepustowość dostępną dla wszystkich, co będzie skutkować również tym, że ucierpią wszyscy użytkownicy, a w szczególności nowi, ponieważ ich limit jest zazwyczaj bardzo niski ze względu na małą ilość SP jakie posiadają.
Co zrobić kiedy dostaję "Bandwidth limit exceeded"?
Tak naprawdę to są dwie możliwości, możemy zdobyć dodatkowe SP lub otrzymać je w postaci delegacji od innej osoby, albo po prostu przeczekać aż limit się zregeneruje ;-)
Natomiast, jeśli problemem nie jest bezpośrednio Twoja aktywność, a wzmożona aktywność w Steem to pozostaje Ci tylko poczekać aż obciążenie sieci trochę się zmniejszy i wszystkie limity wrócą do normy. Niestety tak to działa, ktoś psuje a cierpią wszyscy...
Jak wyliczana jest przepustowość Steem
Algorytm do obliczenia maksymalnej przepustowości zapisany jest w kodzie steemd, dokładnie w pluginie witness
r.max_virtual_bandwidth = ( uint128_t( max_block_size ) * uint128_t( r.current_reserve_ratio ) * uint128_t( STEEM_BANDWIDTH_PRECISION * STEEM_BANDWIDTH_AVERAGE_WINDOW_SECONDS ) ) / ( STEEM_BLOCK_INTERVAL * RESERVE_RATIO_PRECISION );
już tłumaczę na polski ;-)
przepustowość_dostępna_w_Steem = ilość_bloków_produkowanych_tygodniowo * maksymalny_rozmiar_bloku * current_reserve_ratio
- ilość produkowanych bloków tygodniowo - wiemy, że bloki w Steem generowane są co 3 sekundy, tak więc będzie to
20 * 60 * 24 * 7 = 201600
- maksymalny_rozmiar_bloku - jest ustalany przez TOP 20 witnessów, obecnie jest to 65536 (64kB)
- current_reserve_ratio - "ilość zapasu", jest to kluczowy element w algorytmie, ponieważ jako jedyny automatycznie zmienia się w czasie w zależności od obciążenia Steem
Z algorytmu wynika, że co minutę robione jest sprawdzenie czy średni rozmiar produkowanego bloku jest większy niż 25% maksymalnego rozmiaru bloku (65536/4 = 16384), jeśli tak, to current_reserve_ratio jest proporcjonalnie zmniejszany. Parametr ten jest mnożnikiem i przez to ma duży wpływ na całkowity wynik maksymalnej przepustowości w Steem.
Policzmy więc jaka jest dostępna przupustowość blockchain podczas normalnego działania, kiedy średnia wielkość bloków nie przekracza 16384. Wiedząc, że maksymalna do uzyskania wartość current_reserve_ratio wynosi 20000 i jest zdefiniowana w kodzie steemd jako STEEM_MAX_RESERVE_RATIO
, możemy wykorzystać ją do wykonania obliczeń,
201600 ilość bloków * 65536 rozmiar bloku * 20000 current_reserve_ratio = 264241152000000
Z tego prostego mnożenia wynika, że wydajność Steem to 264241152000000 bajtów tygodniowo.
A co z przepustowością użytkownika?
Przepustowość użytkownika zależy od ilości VESTS które posiada oraz maksymalnej przepustowości blockchain którą policzyliśmy przed chwilą. Jeśli wiemy, że całkowite dostępne pasmo dla blockchain Steem to 264241152000000, oraz wiemy, że wszystkich VESTS w platformie jest 406336942450, (wartość total_vesting_shares możemy pobrać z blockchain)
$ curl --silent https://api.steemit.com --data '{"jsonrpc":"2.0", "id":0,"method":"get_dynamic_global_properties","params":[]}' | python3 -m json.tool|grep total_vesting_shares
to w łatwy sposób da się wyliczyć jaka jest przepustowość użytkownika,
przepustowość_użytkownika = vests_posiadane_przez_użytkownika * przepustowość_dostępna_w_Steem / liczba_vests_w_Steem
791764.870035 * 264241152000000 / 406336942450 = 514885159.3697
514885159.3697 / 1024 / 1024 = 491.0327 MB
w moim przypadku będzie to 491MB!
Dla potwierdzenia poprawności wyliczeń, możemy jeszcze sprawdzić wyniki z wartościami na https://steemd.com/@jamzed.
Jeśli widzisz gdzieś błąd, chcesz coś dodać, zmienić lub po prostu wyrazić opinię, to będę bardzo wdzięczny za każdy komentarz który zostawisz. ;-)
Chcę zostać Witnessem (delegatem) w sieci Steem i wspólnie z Wami mieć wpływ na jej działanie. Jeśli uważasz, że jestem osobą która posiada odpowiednie umiejętności i może się sprawdzić, proszę o Twój głos.
- wejdź na stronę https://steemit.com/~witnesses
- przewiń na sam dół tabeli
- wpisz mój nick jamzed w polu formularza i kliknij przycisk VOTE
Bardzo dziękuję.
Jest jeszcze trzecia: poprosić inną osobę, by zdelegowała Ci trochę SteemPower.
Dzięki @noisy, faktycznie nie było to oczywiste z mojego opisu... poprawione ;-)
Ciekawy artykuł. Do tej pory temat PASMA jakoś mi nie "wypłynął" na stemmit.
Popraw sobie:
przupustowość
Dziękuję za zwrócenie uwagi, po chwilowym przemyśleniu "przepustowość" faktycznie brzmi lepiej. ;-)
Kolejny raz dobre wyjaśnienie. Właśnie takie osoby powinny być witnessami :)
Dzięki ;-)
Na steemit bardzo mi brakuje treści bardziej technicznych. Infromacji o tym, w jaki dokładnie sposób działa blockchain Steem. Jasne, że można samemu to znaleźć, ale trzeba w to włożyć trochę wysiłku. Jako leniwy człowiek, cieszę się kiedy mogę bez trudu przyswoić sobie wiedzę. Mam nadzieje, że będę mógł poczytać tutaj więcej takich artykułów.
Dzięki za wyjaśnienie. Spotkałam raz taki komunikat i się zmartwiłam ale widzę, że to nie jest tragedią :)
Cieszę się, że udało mi się przybliżyć temat trochę bliżej ;-)
Ciekawy artyukuł (wczęsniej poczytałem na ten temat po angielsku i nawet myślałem, żeby go przetłumaczyć), mi dzisiaj bandwith spadł do 0, dlatego nie zaniedbuję pisania
Ostatnio też miałem problem bandwidth z zupełnie nieznanych mi wcześniej powodów. Starałem się to wyjaśnić, ale zawsze pewne zrozumienie gubi się przy tłumaczeniu. Jako, że nie posiadam zbyt dobrego rozeznania w świecie IT bardzo miło przeczytać post, który wyjaśnia trochę funkcjonowanie Steemit i jest po polsku. Rozumiały i zwięzły, a takich postów potrzeba jeszcze więcej :D
Z chęcią przygarnę więcej artykułów!
Dziękuję i zapraszam do śledzenia, myślę, że się jeszcze trochę rzeczy pojawi ;-)
Btw. co robicie z takimi przypadkami? @samolot1337 (i @krzychuu18 - prawdopodobnie ten sam człowiek) Wrzuca on kilka razy dziennie ten sam post w intruduceyourself. Używa maskowania (niczym Monero :D) - pomiędzy nimi robi kilka resteemów, aby nie było widać na pierwszy rzut oka, że wkleja ciągle to samo.
W Steem każdy ma takie same możliwości, jeśli czujesz, że jego działania naruszają przyjęte zasady to masz możliwość oflagowania jego postów, przez co straci wynagrodzenie i reputację. Dodatkowo zawsze jest możliwość zgłaszenia nadużyć na https://steemcleaners.org/abuse-report/ i wtedy kilka osób z zespołu @steemcleaners prześledzi jego działalność i podejmie odpowiednie akcje ;-)
Dobry wpis, masz vote na delegata.
Dziękuję za zaufanie ;-)
Nie miałem z tym jeszcze problemu, ale od początku zastanawiało mnie, co oznacza ten drugi pasek na steemd. Teraz już wiem:)