Блокчейн. Принципы и основы | страница 58
На самом деле для данной проблемы напрашивается очевидное решение: если статическая сложность задачи является барьером для экономической стабильности системы, то необходимо сделать ее динамической. Как нам уже известно, для того, чтобы получить n нулевых бит в начале строки хеша, надо перебрать для хеширования максимум 2>n прообразов. Очевидно, что чем больше число n, тем сложность задачи экспоненциально увеличивается. Накамото предложил хешировать заголовок создаваемого блока, начав с самой маленькой сложности. В этом случае нужно было получить всего восемь нулевых символов в начале строки хеша заголовка. Поскольку один символ занимает четыре бита, то необходимо было перебрать не более 2>32 вариантов, то есть около 4,3 млрд. А затем, по мере увеличения количества узлов в сети, которые пытаются искать валидные хеши, пропорционально поднимать сложность, увеличивая требования к количеству стартовых нулей.
Когда Накамото запустил свою сеть Биткоин в начале января 2009 года, в ней, помимо самого создателя системы, не было других участников. Поэтому первые блоки «намайнил» именно сам Накамото. Когда в сети Биткоин стали появляться другие узлы, сложность сети начала постепенно увеличиваться. Логика управления сложностью была заложена следующая: сложность сети должна быть такова, чтобы вне зависимости от количества узлов, которые ищут блоки, а также от их вычислительной мощности новый блок можно было бы найти в среднем не более и не менее чем за десять минут. Сложность пересчитывалась каждые 2016 блоков, то есть примерно один раз в две недели. Совокупное, реально затраченное время нахождения всех 2016 блоков разделялось на их количество, и полученный результат сравнивался с десятиминутным эталоном. Если блоки находились в среднем быстрее, сложность увеличивалась – то есть поднимались требования к количеству нулей в хеше заголовка блока. Если медленнее – требования уменьшались.
Теперь следует сделать отступление, чтобы разобраться, каким образом перебираются хеши в процессе майнинга. Поскольку хешируется заголовок блока, это означает, что хешируемая информация довольно статична. А это, в свою очередь, говорит о том, что при неизменном прообразе мы будем все время получать один и тот же хеш. Что входит в противоречие с нашей целью – найти «золотой» хеш, чтобы он начинался с большого количества нулей. Давайте взглянем еще раз на структуру заголовка блока, чтобы понять: есть ли там какая-либо динамическая величина, которая будет меняться настолько быстро, чтобы у майнера была возможность хешировать миллионы, миллиарды или даже триллионы прообразов в секунду?