Исходные данные:
Имеется 10 человек с 1000 Голосов на балансе у каждого.
Вариант 1
Каждый пользователь делает Power Up своих 1000 Голосов и получает 1000 СГ, и, соответственно имеет возможность ставить 40 полномощных апвоутов в день с весом 1000 СГ.
Вариант 2
Все пользователи пересылают свои 1000 Голосов на единый аккаунт, и запускают на нем Power Up 10000 Голосов, получая в итоге 10000 СГ, что при квадратичном голосовании эквивалентно усилению влияния на распределение наград в 100 раз по сравнению с вариантом 1. Далее пользователи понижают силу апвоута на общем аккаунте до 10%, чтобы без потери мощности голоса в день можно было делать 400 апвоутов, и договориваются, что каждый из них может ставить не более 40 десятипроцентных апвоутов в день. Таким образом, каждый пользователь имеет столько же апвоутов сколько и в варианте 1, но сила влияния каждого его апвоута на распределение наград увеличивается в 10 раз (100 раз * 10% силы апвоута).
Вопрос
Просьба, разбирающихся в математике Голоса/Steem подсказать, где допущена ошибка в рассуждениях. Можно ли так провести атаку на Голос? Есть ли вообще смысл в объединении аккаунтов для группы лиц?
Небольшая ошибка в вычислениях.
10 аккаунтов по 1000 СГ имеют суммарный вес голосов 10*(10002) = 107
1 аккаунт с 10,000 голосов имеет вес (104)2 = 108.
Т.е. во втором случае вес не в 100, а в 10 раз больше.
Дальше сами посчитаете?
Apologies for the English (will translate later) however the above is incorrect.
For those of you confused about "rshares", "vshares", and the calculation, here is a quick explanation. "rshares" is a linear function of vote % weight, account voting power, and VESTS. When an object is set for payout, a function "claim_rshare_reward" is called (https://github.com/GolosChain/golos/blob/master/libraries/chain/database.cpp#L2359). This function calls ONCE a helper function "calculate_vshares( rshares.value )" (https://github.com/GolosChain/golos/blob/master/libraries/chain/database.cpp#L2371). rshares.value, which I will refer to as "net_rshares" is the total rshares accumulated by all voters voting on a object.
You can see this again here: https://github.com/GolosChain/golos/blob/master/libraries/chain/database.cpp#L1953 where we issue "claim_rshare_reward( comment.net_rshares, ...".
comment.net_rshares is defined here: https://github.com/GolosChain/golos/blob/master/libraries/chain/include/steemit/chain/comment_object.hpp#L104, with the comment "// reward is proportional to rshares^2, this is the sum of all votes (positive and negative)"
The logical payout is then calculated based on the total net_rshares allocated anywhere in the current state. Once the payout is issued, the net_rshares is then subtracted from the global state (https://github.com/GolosChain/golos/blob/master/libraries/chain/database.cpp#L2386).
"calculate_vshares" is effectively (net_rshares)^2 - c*net_rshares, for some constant c. (In the code it is written as (net_rshares + s)*(net_rshares + s) - s*s, https://github.com/GolosChain/golos/blob/master/libraries/chain/database.cpp#L2285 , http://www.wolframalpha.com/input/?i=(x-y)%5E2+-+y%5E2 ). The constant is added to make the function differentiable at zero, but is effectively small and we can claim that vshares is approximately O(net_rshares^2), where net_rshares is the sum of rshares allocated to the object (see more: https://steemit.com/theoretical/@theoretical/the-steem-reward-system-part-2-v-shares-from-r-shares).
TL;DR: The calculation of reward from a post is the sum of all rshares on a post, squared. Therefore, it does not matter how many accounts voted for a post, only the effective total power of the sum of voters.
(10*100)^2 == (1*1000)^2
Спасибо! Точно, такую жирную ошибку не заметил! Получается, что разницы нет.
Надо бы еще подумать как влияет кол-во СГ голосующего на его кураторскую награду. Кем быть выгоднее с точки зрения кураторства: пользователем с СГ выше среднего или ниже?
Чуть ниже я привёл точную формулу из исходников Голоса - как именно считается награда при последовательном голосовании за пост.
Можно посчитать для разных случаев.
Обобщающий вывод - это скорее материал уже для полноценной статьи, чем для комментариев. Наверное, надо на примерах всё подробнее расписать, с итоговыми выводами и рекомендациями.
Но это нужно лишь чтобы математически обосновать известный результат: выгоднее держать все СГ на одном аккаунте, чем на нескольких.
Если посмотрите список наиболее эффективных кураторов на Стимите, то увидите, что китов там нет. Дело в том, что наиболее эффективным будет курирование, если после вашего голоса проголосует кто то с большим весом. Для малой силы голоса вероятность того, что после проголосует кто то с большим голосом велика, для кита , соответственно, мала.
Выведенная эмпирическим путём стратегия, которой пользуется большинство китов такова : сначала один(или несколько) аккаунтов-ботов с относительно небольшим весом раскидывает множество голосов, потом крупный аккаунт голосует выборочно.
Но в целом, говорить о "выгоде" тут особо не приходится.
В Стимит сейчас примерно 200 млн это капитал. И примерно 100 тыс в неделю - это теоретически возможная совокупная кураторская награда. Где то 2.5% годовых получается. То, что у кого то получается заработать 25% - это только зо счёт того, что у других - ноль.
По-моему, так Вы не много велосипед изобретаете)))) Тем более не большая ошибка в расчёте есть, @primus указал на неё!
вот тут девочки объединились, но, я думаю, у них не в выгоде дело.
Смотря какая цель. А вообще сейчас нет такого количества контента, чтобы за 400 постов голосовать))
Вопрос крайне спорный, в идеале надо смотреть в код и экспериментировать, но насколько я понимаю на данный момент, формула следующая: (сумма веса голосов за пост)^2 - те по большому не имеет значения будет это 1 аккаунт или много голосов за один пост.
Собственно, вот точная формула:
А что ту означает get_content_constant_s()?
Её посмотрел - это просто число, а что тогда rshares - не сумма ли всех голосов за пост?
The rshares handed to this function is the sum of all rshares on an object, see my above reply for more in depth discussion. The function is called only once, thus the squaring only occurs once, not per voter.
Нет, складываются именно квадраты голосов, а не квадрат суммы.
Точнее, там немного более сложная формула, учитывающая предыдущие голоса плюс квадрат нового добавленного. Но грубо можно считать, что это всё равно сумма квадратов, а не квадрат суммы.