Bandwidth - то чувство когда разобрался

Так приятно, когда таки смог немного для себя понять как устроена фактически одна из основных экономик нашего блокчейна, а именно market и forum bandwidth (он же "газ", она же пропускная способность).

Для самых маленьких спешу прояснить, что наш блокчейн бесплатный... условно бесплатный, за переводы токенов, за общение мы не платим (не то что биткойн и эфир). И чтобы защититься от спам-ботов есть у каждого свой лимит на общение.

И если организация post bandwidth прекрасна описана @veritas в его вечном посте https://golos.io/ru--obrazovanie/@veritas/kak-ustroeno-ogranichenie-na-kolichestvo-publikacii-na-golose который хочется перечитывать и апвотить снова и снова, то по двум другим информация представлена не так понятно.

Пару слов об post... оно же ограничение на кол-во постов ваших в сутки. https://dpos.space/profiles - пользуйтесь сервисом от Дениса и доголосуйте за него как за делегата!!! https://golos.io/ru--delegaty/@denis-skripnik/witness

Немного ему помог с формулами и теперь каждый может спокойно узнать сколько постов без штрафа он может опубликовать и если опубликовано много постов, то сервис любезно посчитает сколько осталось времени до следующей возможной публикации без штрафа. Могу сказать, что процесс был не мгновенный, пока выверить, адаптировать и проверить, пару раз Денис переделывал, но теперь всё отлично работает.

Для гуманитариев сразу готовлю эмпирические волшебные выводы:

  1. Если вы публикуете постоянно, то постинг через каждые 6 часов позволит вам опубликовать бесконечное число постов без штрафа. Отсюда "гуру" и советуют, что мол в стуки можно только 4 поста опубликовать... но это враки
  2. В сутки, если ну очень надо можно опубликовать 6 постов без штрафа. С промежутками между постами менее чем 5 часов. Но в таком случае придется следующие сутки ничего не постить, чтобы восстановиться. Чисто статистически такой подход в среднем позволяет вам публиковать 3 поста в сутки. 6 в первые сутки, 0 во вторые сутки и повторить бесконечное число раз.
  3. Если ничего не постить сутки, то все штрафы за постинг обнуляются. Так что если вы лопухнулись и выдали 100500 за раз, то через сутки будете как стеклышко.
  4. Вишенька на торте: можно опубликовать 4 поста подряд и словить штраф.

А теперь можно перейти к вкусному... к пропускной способности переводов монеток и остальной деятельности типа апвотов/комментов и тех же постов, но уже относительно спам-контроля.

@vvk описал в своё время формулы для рассчета и логику работы блокчейна в своем посте https://golos.io/goldvoice/@vvk/bandwidth-draft
Материал ушел в вики-голоса
https://wiki.golos.io/golosd/mechanics/bandwidth.html

поэтому выдохнули, открыли ссылки и начали читать что там и к чему... по крайней мере ту часть, которая вам понятна.

Лично я запустался сразу на этом месте:

Данные типы bandwidth по сути являются единой сущностью. Отличие в том, что market bandwidth представляет собой 1/10 от общей bandwidth аккаунта. Например, пусть bandwidth аккаунта - 100 KB. Тогда:
forum bandwidth: 100 KB
market bandwidth: 10 KB

и мне потребовалось приложить усилия, чтобы разобраться.

Предлагаю немного отмотать назад и понять, а что же нужно рассчитать и кому может потребоваться считать то это всё?

Первое... у каждого из нас есть своя полоса, которую мы можем занимать на блокчейне и она обновляется каждые 7 дней.

Время восстановления bandwidth от 0 до 100% определяется константой STEEMIT_BANDWIDTH_AVERAGE_WINDOW_SECONDS и составляет 7 дней

7 * 24 * 60 * 60 = 604800 (average_seconds)

Те у кого сила голоса больше - могут требовать под себя больше ресурсов, чем те, у кого сила голоса мала. Измеряется эта полоса в килобайтах (kB). Кстати у нас же блоки записываются в блокчейн каждые 3 секунды и есть ограничения на размер блока... 64 kB... так что сразу занять больше блока не получится.

Чтобы посчитать сколько вам доступно места на голосе в килобайтах нужно

Для получения максимально доступной аккаунту полосы получается следующая формула. Какую долю от суммарной СГ имеет аккаунт, такую долю он и может взять из общей max_virtual_bandwidth:
avail_kb = account_vshares/total_vesting_shares * max_virtual_bandwidth / STEEMIT_BANDWIDTH_PRECISION / 1024

STEEMIT_BANDWIDTH_PRECISION = 1000000

Странность для меня оказалось в том, что в предложенной формуле STEEMIT_BANDWIDTH_PRECISION надо брать в квадрате, то есть два раза поделить на миллион. Без этого получается какое-то меганереальное число.

Отлично, с первым разобрались. Далее по предложенным формулам спокойно рассчитывается сколько килобайт аккаунт уже занял, при этом я сразу параллельно считал как расход в полосе market, так и в forum.

Если вы кодер, то пояснять нет смысла, у @vvk отлично расписано как что считать. Находите сколько реально прошло времени после последнего действия, далее пересчитываете текущий bandwidth как для forum, так и для market. И приводите к килобайтам.

И с радостью переходим к третьему этапу и считаем две разности, между тем что нам доступно и тем что мы уже использовали (used). И чешем репу... ибо что делать с полученными kB? Как что спрогнозировать, сколько "весит" та или иная транзакция? И что за 1/10 таинственные и как употреблять в дальнейших расчетах.

Пришлось перейти к практике, чтобы разобраться, ибо читать С++ не умею, а поэкспериментировать можно. Для это выбрал забытого участника студботнета, немного залил ему СГ и получил следующее:

1.237 kB - avail (доступно всего)
0.000 kB - used forum (использовано)
0.000 kB - used market (использовано)

И в качестве контрольного примера начал подписываться и отписываться от моего аккаунта @ksantoprotein. При этом подписка на тот момент занимала 0.164 kB, а отписка 0.158 kB. На 4 подписке у меня закончился газ и ситуация стала такой:

1.237 kB - avail (доступно всего)
1.124 kB - used forum (использовано)
0.000 kB - used market (использовано)

Собственно всё понятно. у меня осталось 1.237 - 1.124 = 0.113 килобайтиков, а подписка стоит/занимает 0.164. Так что блокчейн блокирует мои действия и говорит типа стоп-спам. Обращаю внимание, что при этом полосу в области market своими подписками и отписками я не расходовал.

Берем следующего юнита, так же закачиваем в него чутка СГ и снова смотрим ситуацию:

1.237 kB - avail (доступно всего)
0.000 kB - used forum (использовано)
0.000 kB - used market (использовано)

Но в это раз я еще дал немного ликвидных токенов аккаунту отданного во благо науки и сделал один перевод 0.001 GOLOS себе же обратно в кошелек. И ситуация стала такой:

1.237 kB - avail (доступно всего)
0.112 kB - used forum (использовано)
1.122 kB - used market (использовано)

Вжух, и я всё понял. Когда я сделал перевод монеток, то размер перевода оказался 0.112 килобайтов и это значение прописалось в полосе forum, а в полосе market прописалось в 10 раз больше. Так что попытка снова сделать еще один перевод токенов не увенчалась успехом, так как (1.237 - 1.122) < 1.122. При этом спокойно можно было продолжать подписываться и отписываться как раз столько, сколько осталось.

Представляем себя на месте новичков с СГ=1, которые то монетки переводят, то комменты строчат и никак не могут понять почему в одной ситуации можно, а в другой пишет блокчейн в ответ, что газа нет... ждите или купите СГ.

Кстати, кто более прошаренный догадается какой у меня казус произошел с первым аккаунтом... В тот момент, когда исчерпал свои подписки и отписки решил сделать контрольный перевод 0.001 GOLOS. И он сцуко прошел, что привело меня в тот момент в хреновое состоянии... блин, как??? Это ж надо так попасть, оставалось 0.113, а перевод был на 0.112.

Собственно от перемены мест слагаемых ничего не поменяется. Об этом и писалось в самом начале про 1/10

Тогда:
forum bandwidth: 100 KB
market bandwidth: 10 KB

Хотя по мне лучше один раз умножить на 10, чем дважды поделить на десятку.

апвот50-50голосgolosbandwidth
25%
1
784
442.817 GOLOS
0
В избранное
Протеюшко
кафедра биоинженерии и биоинформатики
784
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (11)
Сортировать по:
Сначала старые