Как рассчитывается сложность майнинга на Ethereum?

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

На прошлой неделе сложность подскочила с 11 до более 17, в то время как GH/s колебалась между 800,00 и 1400,00, но без четкой корреляции между ними.

Введена ли теперь «бомба сложности»? И если да, то есть ли способ приблизить или рассчитать, насколько сложность, вероятно, возрастет в следующие 6-12 месяцев?

Связанный: если Serenity / PoS вряд ли будет представлен до начала следующего года, были ли какие-либо предложения от команды разработчиков о том, что эффекты этой «бомбы сложности» будут уменьшены в релизах Homestead или Metropolis?

Ответы (1)

Из https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md :

Сложность майнинга рассчитывается по разнице во времени между блоками. Точная формула изменится в Homestead. Символ //в следующем обозначает целочисленное деление.

  • Граница:

block_diff = parent_diff + parent_diff // 2048 * (1 if block_timestamp - parent_timestamp < 13 else -1) + int(2**((block.number // 100000) - 2))

  • Усадьба:

block_diff = parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99) + int(2**((block.number // 100000) - 2))

РЕДАКТИРОВАТЬ:

Проблема с формулой границы и причина изменения заключалась в том, что версия границы не учитывает, насколько далеко от 13 секунд было время блока. Блок, добытый через 1 секунду после предыдущего, оказывает такое же влияние на сложность, как и блок, добытый через 12 секунд. Это приводит к тому, что сложность блока приспосабливается к среднему времени блока, а не к среднему .

Опять же, проверьте EIP для более подробной информации.

Извиняюсь, что мне не хватает знаний, но как именно я могу использовать это для расчета? Видя разницу "< 13 else -1" и "// 10, -99", мне непонятно, в чем будет разница. Если у вас есть минутка, чтобы объяснить более подробно, это было бы очень признательно!
В формуле время между последним блоком и блоком перед его оценкой. Если разница во времени меньше 13, сложность повышается: block_diff = parent_diff + parent_diff // 2048 + int(2**((block.number // 100000) - 2))Если время между двумя последними блоками больше 13 секунд, сложность снижается:block_diff = parent_diff - parent_diff // 2048 + int(2**((block.number // 100000) - 2))
Отсутствует ссылка в ответе