HF 16.5 или что делать с нерадивыми майнерами


Наверное многие замечали последние месяца три, что иногда не переводятся монеты, не доходят апвоты, пропадают посты или комментарии.

Мне кажется я нашел причину этому. Может быть я ошибаюсь, возможно причина в другом. Пусть поправят меня разработчики @kotbegemot и @nemo1369 если я не прав.

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

@vik даже создал бота, который отслеживает пропуски блоков и скрипт каждые несколько минут сообщает об ошибке. В логах ноды сразу обноружили, что к моменту пропуска появляются сообщения подобные этому

Encountered a block num collision due to a fork. Walking the current fork to determine the correct block. block_num:12152554

Я посмотрел в коде, там вот этот код выдает это сообщение

Как видно, нода запрашивает блок под определенным номером и получает из базы два блока под одним номером. Это не нормально, это говорит о том, что произошел форк. Нода в данном случае берет самую длинную цепочку, а один из блоков отбрасывает.

От куда взялся второй блок? Я честно говоря досконально не изучал вопрос, но по словам разработчиков, это происходит в том случае, если подписант (делегат или майнер) работает через две ноды с одинаковым ключем. То-есть подписант подписывает сразу два блока одновременно. Часть транзакций попадает в один блок, а часть в другой с тем же номером. Как вы догадываетсь, так как один из блоков отбрасывается, то с ним теряются и данные записанные в нем. Чей то пост, апвоты, переводы.

Все это приводит к тому, что невозможно на голосе заниматься бизнесом. Кода твой перевод не доходит по назначению или пост не постится, не может быть и речи о доверии к сети. Это получается ад для разработчиков, так как каждое совершенное действие приходится перепроверять спустя 45 секунд, что бы убедиться, что транзакция была записана в правильную ветку и не отброшена по дурацкой причине.

Что бы понять, в чем причина, я добавил логгирование в этот код. Посмотреть, кем были подписаны блоки с одинаковыми номерами и получил список (смотри ниже) фигурантов этого дела за сутки работы. Как видно в основном это bla, grub и так далее. Это майнеры. В списке есть и делегаты, но их не так много и скорее всего причина у них другая. Я думаю медленная сеть или проблемы с нодой. @lehard и @xanoxt надо проверить свои ноды. Возможно пересмотреть списки сидов и убрать те, к котором пинг большой.

Но вернемся к этим баранам, тобишь майнерам. Очевидно проблема большей частью вызвана ими, вернее неверной конфигурацией нод. Я так думаю это детище одного и того же человека. Появились они недавно. Еще летом я их не встречал в списке майнеров. Можно проверить когда они были созданы. Если автор этого бесчинства читает эти строки, пожалуйста перепроверьте конфигурацию ваших майнеров.

Что можно сделать если владелец этих майнеров не откликнется? Я не знаю. На мой взгляд на данный момент сеть оказалась беззащитной перед нашествием бусурманов. У голоса нету механизмов противодействия этой болезни. На заре стимита, была возможность забрать у подписантов всю их СГ, но эту возможность почти сразу убрали. Убрав майнинг и вовсе убрали вероятный источник этих проблем. Майнинг конечно сам по себе не виноват, виноват владелец, который не правильно использует его.

Разработчики предлагают добавить возможность принудительно отключать таких подписантов, сменив им ключ на пустой. Но при таком количестве майнеров мне кажется это не поможет. Владельцу будет проще их снова активировать, чем заниматься перенастройкой всей сети.

Ну и как вариант, можно отключить сам майнинг. В блокчейне golos он бесполезен. У нас DPOS, то-есть подписанты выбираются голосованием и им нет нужды доказывать свою нужность перебирая хэши. Мне майнинг жаль только потому, что с его помощью можно создать полностью анонимный аккаунт, не привязанный ни к кому.

В любом случае надо делать ХФ. Потому я и предлагаю, пока ХФ 17 еще не готов, выпустить минорный релиз 16.5 с отключенным майнингом. Это добавит стабильности сети, и думаю пойдет всем на пользу.

Не будет вопросов "я проголосовал за пост, а мне не пришел откат", "я перевел монеты бустеру, а они не дошли и бустер не проголосовал" или "я написал пост, его показало мне в ленте, а через пол минуты он исчез как и не бывало"

За одно сделаем хотя бы одно доброе дело до НГ и покажем, что не зря нодами заведуем и можем договариваться )

Как на это смотрят другие делегаты и разработчики? Может есть какой то другой, не такой радикальный способ?

@arcange, @on0tole, @vik, @on1x, @primus, @litvintech, @smailer, @creator, @dmilash, @dr2073, @phenom, @kuna, @lockchained, @lehard, @testz, @anyx, @vitaly-lvov, @roelandp, @dark.sun, @aleksandraz, @yudina-cat, @xtar, @litrbooh, @good-karma, @cheetah, @xanoxt, @jesta, @kulturagolosa, @stakepool, @vvk, @dreamer, @someguy123, @golos.loto

UPD:

В телеграме ко мне обратился хозяин этих майнеров

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

Так что дело действительно было в двух нодах. Примерно с момента обращения была только одна коллизия, вызванная нодой @lehard. Эх не бывать ХФ до НГ )

      1 baybak
      1 bla1
      1 bla13
      1 bla14
      1 bla18
      1 bla19
      1 bla20
      1 bla21
      1 bla22
      1 bla23
      1 bla24
      1 bla26
      1 bla33
      1 bla40
      1 bla5
      1 bla6
      1 bla8
      1 grub10
      1 grub13
      1 grub14
      1 grub16
      1 grub21
      1 grub23
      1 grub25
      1 grub26
      1 grub29
      1 grub3
      1 grub8
      1 grub9
      1 grud10
      1 grud1
      1 grud4
      1 grud5
      1 grud6
      1 mway1
      1 mway27
      1 mway28
      1 mway30
      1 mway3
      1 mway4
      2 bla30
      2 bla32
      2 bla38
      2 grub15
      2 grub17
      2 grub20
      2 grub22
      2 grub27
      2 grub30
      2 grub4
      2 grud
      2 grud3
      2 grud7
      2 jesta
      2 mway23
      2 mway29
      3 bla
      3 bla34
      3 grub
      3 grub1
      3 grub12
      3 grub28
      3 xanoxt
      4 bla17
      4 grub11
      4 grub5
      4 lehard

Comments 30


Я давно выступаю за отмену майнинга, поэтому я за!

15.12.2017 22:08
0

за отмену майнинга и за "микрофорки"

15.12.2017 22:10
0

Это получается ад для разработчиков, так как каждое совершенное действие приходится перепроверять спустя 45 секунд, что бы убедиться, что транзакция была записана в правильную ветку и не отброшена по дурацкой причине.

технический вопрос, а почему именно 45 сек? Ибо проблема случается постоянно и доп костылей для обвязки кода на выявление подобных ошибок не хватает, плюс затраты временные.

15.12.2017 22:26
0

Блок помечается irreversible - принадлежащим основной цепочке, если 75% делегатов подтвердили его своими нодами. В среднем блок помечается irreversible через 45 секунд после создания. 210,75 ~ 15 3сек. ~ 45 секунд

Как раз вот этот отрезок кода, что я привел и занимается этим. Он и определяет, состоялся форк и в какую сторону пойдем.

15.12.2017 22:31
0

(21 раунд по 3 секунды) * 2/3 = 42 секунды, это время за которое происходит Irreversible block — необратимый блок. Если транзакция случилась, то через 42 секунды можно точно узнать не была ли она отвергнута из-за того, что попала не в тот блок.

15.12.2017 22:33
0

@bla1 и его аналоги: Created 2017-12-06

Сеть же форкалась всё время. Просто транзакций было меньше и поэтому было не так заметно.

То-есть подписант подписывает сразу два блока одновременно

Можно подробнее - как вы определили, что сеть форкается именно из-за майнеров и как определяли конкретных майнеров, виноватых в этом, на ваш взгляд?

15.12.2017 22:49
0

Как я написал, к моменту пропуска блока делегатом, в ноде у всех появляется вот эта строка в логе

Encountered a block num collision due to a fork. Walking the current fork to determine the correct block. block_num:12152554

Ее пишет в лог вот этот код

https://github.com/GolosChain/golos/blob/v0.16.4/libraries/chain/database.cpp#L3639

Я просто после этой строки добавил цикл и дополнительный лог, что бы распечатать делегатов подписавших двойные блоки

Скомпилировал и поднял ноду и она мне выдает в лог что то подобное этому

15.12.2017 23:03
0

Сеть же форкалась всё время. Просто транзакций было меньше и поэтому было не так заметно.

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

15.12.2017 23:08
0

Спасибо за пояснение.

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

15.12.2017 23:27
0

Но почему майнеры подписывают два блока одним и тем же акком? Делегаты разные у обоих блоков, а вот майнеры всегда двойные. Как я в тексте написал, разработчики это объясняют двумя нодами с одинаковыми ключами и прямо категоричны в этом.

https://github.com/GolosChain/golos/issues/271

15.12.2017 23:31
0

Да, вполне может и так.

16.12.2017 08:57
0

@primus, была такая проблема и нода пропускала блоки и почему то повторяла блоки по два раза, проблема ушла с установкой SSD, посоветовал @dreamer

24.12.2017 09:48
0

Встречаются и делегаты вроде того

15.12.2017 23:09
0

Только отмена!

15.12.2017 22:50
0

Я за отмену майнинга в данном случае, так как оказать влияние на злоумышлинников мы не можем, а сеть страдает.

16.12.2017 02:38
0

Либо убрать майнинг, или запилить код, который будет провинившихся отлучать от очереди навсегда

16.12.2017 03:34
0

Я за отмену майнинга. Вреда больше чем пользы )

16.12.2017 05:07
0

Выпилить майнинг путём отдачи 21-й позиции в раунде ещё одному делегату не из топа.

16.12.2017 05:34
0

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

16.12.2017 06:16
0

Делегатов. Ну не погоду же.

16.12.2017 07:55
0

За отмену майнинга.

16.12.2017 06:45
0
16.12.2017 09:54
0

Ок, @klubnika!

роботы @gemini, @btc-e и @upbot проголосовали за пост: HF 16.5 или что делать с нерадивыми майнерами

16.12.2017 10:10
0

Честно все прочитала и ничего не поняла. Тарабарский язык для меня... вот же что знают люди! И вас таких тут много!

16.12.2017 19:39
0

Давно поддерживал отмену майнинга, по крайней мере в текущем виде.

16.12.2017 21:30
0

@on0tole, а в каком виде вы его видите? Я бы тоже проголосовал за отмену майнинга, так как моя нода майнера больше не может попасть в очередь на подписание блока(

24.12.2017 09:43
0

Могу только подозревать но чем черт не шутит. (Это только мое мнение)
Такое может быть из-за того что и майнер и делегат настроены на одной ноде. И в момент подписания блока майнер и делегат делят между собой блок.

18.12.2017 07:31
0

@ropox, несколько раз пропадали комментарии, и не только у меня. Пишу посты и комменты в goldvoice, ибо golos.io тормозит сильно.

24.12.2017 08:18
0

Что-то сегодня произошло и сеть стала лучше работать. Кто-то нерадивый отключился, наверное.Супер!

27.12.2017 15:09
0