VIZ-Blockchain / viz-cpp-node

VIZ C++ node
Other
14 stars 5 forks source link

Witness scheduler changes #6

Closed bitphage closed 6 years ago

bitphage commented 6 years ago

Our block generation plan is the following:

So, block producers queue should look like this:

  1. top 1
  2. timeshare 1
  3. top 2
  4. timeshare 2
  5. top 3
  6. timeshare 3
  7. top 4
  8. timeshare 4
  9. top 5
  10. timeshare 5
  11. top 6
  12. timeshare 6
  13. top 7
  14. timeshare 7
  15. top 8
  16. timeshare 8
  17. top 9
  18. timeshare 9
  19. top 10
  20. timeshare 10
  21. timeshare 11

https://github.com/steemit/steem/blob/master/libraries/chain/witness_schedule.cpp

On1x commented 6 years ago

Please change 21 - to timeshare 11. Top only 10 witnesses, 11 - support witnesses. Max witnesses votes per account = 2.

bitphage commented 6 years ago

Done, for witness votes I created a separate issue #8

On1x commented 6 years ago

Итак, у нас есть update_witness_schedule4, который после 4 ХФ работает как часы. Создает active_witnesses, проходится по топ делегатам, по майнерам и по временным и пополняет его. В основном active_witnesses.push_back( itr->owner) ; Плюс добавляет временные списки, типа selected_voted.insert( itr->id );, чтобы не допустить повторения делегатов из нескольких списков в очередь. Я в начале думал переписать всю механику, но проще будет модифицировать лишь часть. Внутри временных делегатов https://github.com/steemit/steem/blob/master/libraries/chain/witness_schedule.cpp#L160 Сделать заполнение другого массива. А потом, когда идет составления уже очереди и модифицируется witness_schedule_object: https://github.com/steemit/steem/blob/master/libraries/chain/witness_schedule.cpp#L272 Сделать обход двух массивов и чередовать их номер по каждому. Это позволит не нарушать старую логику - изменить лишь сборщик очереди.