совершенно другой. С этого момента в сети образуется разветвление, рассинхронизация базы блоков, иными словами — возникает проблема для
всей сети в целом, которую необходимо решать.
Если мы хотим решить эту проблему, нам нужно рассмотреть процесс
создания блока как такового. Чтобы создать блок, необходимо набрать из
мемпула транзакций, пока хватает места в блоке, вычислить на их основе
корневое значение дерева Меркла, на базе которого вместе с остальной
служебной информацией будет сформирован заголовок блока. Далее следует
поместить в заголовок создаваемого блока хеш заголовка предыдущего блока, чтобы продолжить непрерывность цепочки блоков, после чего новый блок
готов и его можно отправить в сеть, чтобы остальные узлы включили его в свои
цепочки. А теперь зададимся вопросом: а что, если достаточно большое
количество узлов одновременно начнут предлагать свои блоки остальным
участникам сети? Вне всякого сомнения, начнется полнейший хаос. Каналы
связи будут перегружены пересылаемой для синхронизации информацией, неизбежно возникнет огромное количество различных вариантов разветвления
цепочек — в общем, сеть фактически утратит целостность и, как следствие, работоспособность.
Чтобы избежать такого негативного сценария развития событий, необходимо
сделать так, чтобы количество предлагаемых сети блоков для включения в
цепочку было чрезвычайно малым. В идеале — чтобы в течение среднего
временного интервала между созданием блоков (в сети Биткоин — около
десяти минут) конкурирующие блоки в сети вообще отсутствовали. Но как этого
достичь? Ответ прост: необходимо сделать процесс создания блоков
настолько сложным, чтобы внутри кванта времени, выделяемого на создание
нового блока, сети предлагалось минимальное количество новых блоков. В
этом случае необходимым условием для их создания должно стать решение
сложной вычислительной задачи — примерно такой, как описывалось в
концепте «Доказательства работы», или Proof-of-Work. В сети Биткоин
подобный процесс создания блока называется «майнингом», по аналогии с
добычей полезных ископаемых, где необходимо затратить серьезные усилия, прежде чем можно будет извлечь драгоценный ресурс из шахты и реализовать
его, получив материальную выгоду. Как же осуществляется цифровой майнинг
в сети Биткоин?
Майнинг в сети Биткоин
Занимаясь интеграцией концепта Proof-of-Work в свой проект Bit Gold, который
многие считают «предтечей» Биткоина, Ник Сабо столкнулся с проблемой, когда фиксированная сложность вычислительной задачи вела к потенциальной
уязвимости, которая с большой вероятностью проявилась бы в будущем. Дело
в том, что совокупная вычислительная мощность сети будет со временем
естественным образом расти. Произойдет это по двум причинам: во-первых, вырастет общее количество узлов, а во-вторых, согласно закону Мура, усредненная вычислительная мощность отдельно взятого узла системы будет
также постепенно увеличиваться. Таким образом, через какое-то время
заложенная в логике проекта фиксированная сложность вычислительной
задачи перестанет быть для сети проблемой. В конечном итоге сетевые узлы
превратятся в «печатные станки» для электронных денег, что неизбежно
спровоцирует в системе гиперинфляцию. Стоит ли сомневаться, что после
этого все узлы системы будут материально демотивированы и едва ли захотят
в дальнейшем участвовать в подобном проекте.
Напомним, что суть сложновычислимой задачи в проекте Bit Gold состояла в
переборе хешей различных прообразов. А конечной целью было нахождение
такого хеша, который бы считался для всей сети валидным — то есть в данном
случае содержал определенное количество нулей в начале строки данных.
Статическая сложность вычислительной задачи стала для Сабо одним из
непреодолимых препятствий, которое так и не позволило BitGold увидеть свет.
Однако Сатоши Накамото в своем проекте Биткоин эту задачу решил, и, как мы
сейчас убедимся, достаточно элегантно.
На самом деле для данной проблемы напрашивается очевидное решение: если статическая сложность задачи является барьером для экономической
стабильности системы, то необходимо сделать ее динамической. Как нам уже
известно, для того, чтобы получить n нулевых бит в начале строки хеша, надо
перебрать для хеширования максимум 2n прообразов. Очевидно, что чем
больше число n, тем сложность задачи экспоненциально увеличивается.
Накамото предложил хешировать заголовок создаваемого блока, начав с
самой маленькой сложности. В этом случае нужно было получить всего восемь
нулевых символов в начале строки хеша заголовка. Поскольку один символ
занимает четыре бита, то необходимо было перебрать не более
232 вариантов, то есть около 4,3 млрд. А затем, по мере увеличения
количества узлов в сети, которые пытаются искать валидные хеши, пропорционально поднимать сложность, увеличивая требования к количеству
стартовых нулей.
Когда Накамото запустил свою сеть Биткоин в начале января 2009 года, в ней, помимо самого создателя системы, не было других участников. Поэтому
первые блоки «намайнил» именно сам Накамото. Когда в сети Биткоин стали
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии