🇵🇱 Dlaczego czasami dostajesz błąd "Bandwidth limit exceeded"?

bandwidth_limit.png

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

image.png

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.

image.png

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.

image.png


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.

Bardzo dziękuję.

H2
H3
H4
3 columns
2 columns
1 column
24 Comments
Ecency