Блокчейн. Цихилов. Блокчейн (Цихилов). Копирование, воспроизведение и иное использование электронной книги, ее частей
Скачать 2.63 Mb.
|
претендующие на включение в общую цепочку. Причем часть узлов может включить себе один блок, а часть — совершенно другой. С этого момента в сети образуется разветвление, рассинхронизация базы блоков, иными словами — возникает проблема для всей сети в целом, которую необходимо решать. Если мы хотим решить эту проблему, нам нужно рассмотреть процесс создания блока как такового. Чтобы создать блок, необходимо набрать из мемпула транзакций, пока хватает места в блоке, вычислить на их основе корневое значение дерева Меркла, на базе которого вместе с остальной служебной информацией будет сформирован заголовок блока. Далее следует поместить в заголовок создаваемого блока хеш заголовка предыдущего блока, чтобы продолжить непрерывность цепочки блоков, после чего новый блок готов и его можно отправить в сеть, чтобы остальные узлы включили его в свои цепочки. А теперь зададимся вопросом: а что, если достаточно большое количество узлов одновременно начнут предлагать свои блоки остальным участникам сети? Вне всякого сомнения, начнется полнейший хаос. Каналы связи будут перегружены пересылаемой для синхронизации информацией, неизбежно возникнет огромное количество различных вариантов разветвления цепочек — в общем, сеть фактически утратит целостность и, как следствие, работоспособность. Чтобы избежать такого негативного сценария развития событий, необходимо сделать так, чтобы количество предлагаемых сети блоков для включения в цепочку было чрезвычайно малым. В идеале — чтобы в течение среднего временного интервала между созданием блоков (в сети Биткоин — около десяти минут) конкурирующие блоки в сети вообще отсутствовали. Но как этого достичь? Ответ прост: необходимо сделать процесс создания блоков настолько сложным, чтобы внутри кванта времени, выделяемого на создание нового блока, сети предлагалось минимальное количество новых блоков. В этом случае необходимым условием для их создания должно стать решение сложной вычислительной задачи — примерно такой, как описывалось в концепте «Доказательства работы», или Proof-of- Work. В сети Биткоин подобный процесс создания блока называется «майнингом», по аналогии с добычей полезных ископаемых, где необходимо затратить серьезные усилия, прежде чем можно будет извлечь драгоценный ресурс из шахты и реализовать его, получив материальную выгоду. Как же осуществляется цифровой майнинг в сети Биткоин? МАЙНИНГ В СЕТИ БИТКОИН Занимаясь интеграцией концепта Proof-of-Work в свой проект Bit Gold, который многие считают «предтечей» Биткоина, Ник Сабо столкнулся с проблемой, когда фиксированная сложность вычислительной задачи вела к потенциальной уязвимости, которая с большой вероятностью проявилась бы в будущем. Дело в том, что совокупная вычислительная мощность сети будет со временем естественным образом расти. Произойдет это по двум причинам: во-первых, вырастет общее количество узлов, а во- вторых, согласно закону Мура, усредненная вычислительная мощность отдельно взятого узла системы будет также постепенно увеличиваться. Таким образом, через какое-то время заложенная в логике проекта фиксированная сложность вычислительной задачи перестанет быть для сети проблемой. В конечном итоге сетевые узлы превратятся в «печатные станки» для электронных денег, что неизбежно спровоцирует в системе гиперинфляцию. Стоит ли сомневаться, что после этого все узлы системы будут материально демотивированы и едва ли захотят в дальнейшем участвовать в подобном проекте. Напомним, что суть сложновычислимой задачи в проекте Bit Gold состояла в переборе хешей различных прообразов. А конечной целью было нахождение такого хеша, который бы считался для всей сети валидным — то есть в данном случае содержал определенное количество нулей в начале строки данных. Статическая сложность вычислительной задачи стала для Сабо одним из непреодолимых препятствий, которое так и не позволило BitGold увидеть свет. Однако Сатоши Накамото в своем проекте Биткоин эту задачу решил, и, как мы сейчас убедимся, достаточно элегантно. На самом деле для данной проблемы напрашивается очевидное решение: если статическая сложность задачи является барьером для экономической стабильности системы, то необходимо сделать ее динамической. Как нам уже известно, для того, чтобы получить n нулевых бит в начале строки хеша, надо перебрать для хеширования максимум 2 n прообразов. Очевидно, что чем больше число n, тем сложность задачи экспоненциально увеличивается. Накамото предложил хешировать заголовок создаваемого блока, начав с самой маленькой сложности. В этом случае нужно было получить всего восемь нулевых символов в начале строки хеша заголовка. Поскольку один символ занимает четыре бита, то необходимо было перебрать не более 2 32 вариантов, то есть около 4,3 млрд. А затем, по мере увеличения количества узлов в сети, которые пытаются искать валидные хеши, пропорционально поднимать сложность, увеличивая требования к количеству стартовых нулей. Когда Накамото запустил свою сеть Биткоин в начале января 2009 года, в ней, помимо самого создателя системы, не было других участников. Поэтому первые блоки «намайнил» именно сам Накамото. Когда в сети Биткоин стали появляться другие узлы, сложность сети начала постепенно увеличиваться. Логика управления сложностью была заложена следующая: сложность сети должна быть такова, чтобы вне зависимости от количества узлов, которые ищут блоки, а также от их вычислительной мощности новый блок можно было бы найти в среднем не более и не менее чем за десять минут. Сложность пересчитывалась каждые 2016 блоков, то есть примерно один раз в две недели. Совокупное, реально затраченное время нахождения всех 2016 блоков разделялось на их количество, и полученный результат сравнивался с десятиминутным эталоном. Если блоки находились в среднем быстрее, сложность увеличивалась — то есть поднимались требования к количеству нулей в хеше заголовка блока. Если медленнее — требования уменьшались. Теперь следует сделать отступление, чтобы разобраться, каким образом перебираются хеши в процессе майнинга. Поскольку хешируется заголовок блока, это означает, что хешируемая информация довольно статична. А это, в свою очередь, говорит о том, что при неизменном прообразе мы будем все время получать один и тот же хеш. Что входит в противоречие с нашей целью — найти «золотой» хеш, чтобы он начинался с большого количества нулей. Давайте взглянем еще раз на структуру заголовка блока, чтобы понять: есть ли там какая-либо динамическая величина, которая будет меняться настолько быстро, чтобы у майнера была возможность хешировать миллионы, миллиарды или даже триллионы прообразов в секунду? Порядковый номер блока — информация сугубо статичная, которая меняться не будет. Номер версии блока также представляет собой фиксированное значение. Теперь что касается времени создания блока, которое выражается в секундах, прошедших с 1 января 1970 года. Логично было бы предположить, что оно будет меняться не чаще раза в секунду, что для нашей задачи является крайне низкой динамикой. Число транзакций в блоке и вычисленное из них корневое значение дерева Меркла — информация также относительно постоянная. Однако бывают случаи, когда во время поиска валидного хеша майнеру поступают новые транзакции с более высокой комиссией, чем те, что он ранее включил в блок, — тогда блок будет иметь смысл пересобрать заново. Но данная процедура также имеет достаточно низкую динамику и проблем с необходимым разнообразием хешей не решает. Получается, что коль скоро высокодинамичная информация в заголовке блока естественным образом отсутствует, для решения поставленной задачи необходимо вводить в процедуру майнинга некий искусственный элемент. Он не будет нести никакой полезной нагрузки, кроме как играть роль дополнительной составляющей заголовка блока, как прообраза для хеширования. И такой элемент действительно присутствует в заголовке каждого блока, и называется он «нонс» (nonce). Именно значение этого нонса майнер и будет исключительно быстро менять при переборе, открывая возможности для получения огромного количества разнообразных хешей, среди которых может оказаться и заветный «золотой» хеш с требуемым количеством нулей. По сути, процедура майнинга и сводится к поиску подходящего значения этого самого нонса, который, будучи добавленным к заголовку блока, позволит майнеру вычислить валидный хеш, дающий ему право на создание нового блока, безусловно принимаемого всей сетью. Однако процедура поиска необходимого значения нонса достаточно сложна. В сети Биткоин используется алгоритм хеширования SHA-256, который предполагает два цикла по 64 итерации хеширования каждый. По состоянию на весну 2019 года сложность сети Биткоин требует наличия 18 первых нулевых символов для нахождения валидного хеша, соответствующим 72 нулевым битовым значениям. Что требует примерно 2 72 или около 5 · 10 21 переборов хешей. Много это или мало? Давайте попробуем сравнить это число, скажем, с количеством песчинок на всех пляжах нашей планеты. Ученые сопоставляют количество песчинок с величиной, приближенной к 10 18 . Таким образом, сложность нахождения нужного нам валидного хеша с такими требованиями сопоставима с процедурой перебора всех песчинок примерно на 5000 планет, условно подобных Земле. Вот пример такого валидного хеша, с требованием по сложности в 18 начальных нулей: Как уже упоминалось, первые блоки сети Биткоин Сатоши Накамото находил самостоятельно и использовал для этого обычный компьютер. Как, собственно, и другие участники сети, которые стали постепенно в ней появляться. И на том самом начальном уровне сложности обычного процессора компьютера вполне хватало, чтобы находить блок за положенные в среднем десять минут. Однако по мере роста количества участников сети сложность стала автоматически пересчитываться в сторону увеличения, и в какой-то момент для обычного компьютерного процессора вычислительная задача стала «неподъемной». Тем не менее майнеры быстро нашли выход — они задействовали для поиска блоков не центральный процессор, а тот, который был установлен на их видеокартах. В силу специфики своей вычислительной архитектуры графический процессор гораздо быстрее рассчитывал хеши, чем центральный. Но через определенное время сложность возросла настолько, что и графический процессор перестал справляться с майнингом блоков. Правда, решение было найдено довольно скоро: в июне 2012 года компания Butterfly Labs начала поставлять специальное программно-аппаратное обеспечение под названием ASIC (Application-Specific Integrated Circuit, или «интегральная схема специального назначения»). Фактически это был небольшой специализированный компьютер, полностью оптимизированный только под одну задачу — перебирать хеши по алгоритму SHA-256 и делать это исключительно быстро. Началась эра сначала частного, а затем и промышленного майнинга Биткоина с использованием самых новейших аппаратных средств, производимых различными компаниями, активно конкурирующих между собой. Для того чтобы понять, насколько увеличилась сложность сети за первые десять лет ее существования, рассмотрим понятие скорости перебора хешей, или «хешрейт» (hashrate). Различают хешрейт как отдельного устройства, так и совокупный хешрейт всей сети. Очевидно, что чем выше общий хешрейт сети Биткоин, тем выше сложность нахождения валидного хеша для создания блока. Иначе майнеры находили бы блоки слишком быстро, что противоречит логике, заложенной в блокчейн-систему. Вот как менялся хешрейт на протяжении десяти лет существования сети Биткоин (на примере логарифмического графика): Первые устройства ASIC работали с хешрейтом 4,5 Гигахеш в секунду. То есть если бы они использовались в самом начале работы сети Биткоин на минимальной сложности, они находили бы валидный хеш примерно за одну секунду. Эта скорость была в 600 раз выше той, на которой вычислял первые блоки сам Сатоши Накамото, используя процессор своего компьютера. Устройства ASIC образца весны 2019 года, поставляемые компанией Bitmain, осуществляют перебор хешей со скоростью до 53 Терахеш в секунду. Это более чем в 10 000 раз быстрее по сравнению с первыми устройствами, представленными почти за семь лет до этого. Однако совокупный хешрейт сети Биткоин на своих пиковых показателях достигал совершенно космических значений — примерно 60 эксахешей в секунду, что составляет величину перебора всей сетью 6 · 10 19 хешей за одну секунду. И тем не менее сложность задачи поиска валидного хеша такова, что даже настолько огромная совокупная вычислительная мощность всей сети позволяет майнить один блок за те же в среднем десять минут. О чем это говорит? О том, что практически ни один конкретный индивидуум, даже обладая значительным количеством новейших высокоскоростных устройств ASIC, исчисляемых сотнями и даже тысячами, не сможет со своей майнинговой фермой самостоятельно осуществить майнинг хотя бы одного блока в сети Биткоин. Если, конечно, не допускать какую-то исключительную удачу, которая все равно не сможет проявляться на постоянной основе. Поэтому майнеры объединяются в огромные вычислительные пулы и таким образом распределяют как сложность задачи, так и вознаграждение за ее решение пропорционально между участниками пула, сообразно контрибуцированной вычислительной мощности от каждого из них. Первый такой пул открылся 18 сентября 2010 года, еще до появления устройств ASIC, когда майнинг в основном осуществлялся на процессорах и видеокартах. Впоследствии количество подобных пулов увеличилось, а затем они начали консолидироваться в более крупные объединения майнеров со всего мира. Рассматривая майнинговые фермы, объединенные в вычислительные пулы, мы плавно подходим к основной проблеме майнинга на основе консенсуса Proof-of-Work — исключительно большому потреблению электричества при работе майнингового оборудования. Современный высокоскоростной ASIC типа Bitmain S17 Pro потребляет мощность 2250 Вт, что составляет значительную величину, особенно если учесть, что из таких устройств комплектуют целые майнинговые фермы. К тому же эти устройства в процессе работы довольно сильно нагреваются, и их необходимо постоянно охлаждать, на что также расходуется электроэнергия. Организуя свою майниговую ферму, предприниматель несет в первую очередь расходы на приобретение и доставку самого майнингового оборудования, а также на аренду и оснащение специального помещения, где будет функционировать ферма. Но все же основной статьей расхода для «фермера» будет оплата потребленного на майнинг электричества. Именно его стоимость и является наиболее критичным параметром при расчете доходности от деятельности по майнингу различных криптовалют, в первую очередь Биткоина. Совокупное же годовое потребление электроэнергии всей сетью Биткоин сопоставимо с потреблением электроэнергии крупным государством, входящим в список первых 30 стран мира по данному параметру. Речь идет о величине в 30–35 тераватт-часов в год, что составляет примерно 0,5–0,6% всего суммарного потребления электроэнергии во всем мире. Аналитики прогнозируют, что если динамика увеличения потребления электричества сетью Биткоин сохранится на текущем уровне, то через три–четыре года Биткоин-майнеры начнут потреблять всю производимую в мире электроэнергию. Понятно, что подобный сценарий едва ли имеет шанс на реализацию — государственные регуляторы просто не позволят майнерам его осуществить. Учитывая вышеизложенные факторы, следует признать, что будущее майнинга на базе консенсуса Proof-of-Work представляется достаточно туманным. Весьма вероятно, что правительства многих стран начнут ограничивать майнеров в потреблении ими электричества, например, через установку нормативных квот, которые им придется приобретать на специальных аукционах. Не исключено также, что в каких-то странах с особым дефицитом электроэнергии майнинг будет и вовсе законодательно запрещен. Особенно проблематичным представляется то, что все потребленное электричество уходит на решение математической задачи, ценность которой каждые десять минут полностью утрачивается. Иными словами, как только новый блок создан, решение задачи начинается сначала. Очевидно, что это исключительно неэффективное использование такого ценного ресурса, как электроэнергия — она расходуется фактически впустую, не принося человеческой цивилизации никакой существенной пользы (за исключением владельцев и сотрудников энергетических компаний). Гораздо разумнее было бы поставить столь значительную вычислительную мощность на службу решению действительно насущных задач, например, на расчеты, связанные с поиском новых медицинских препаратов, или решения иных научных проблем, для которых требуются серьезные вычисления. Возможно, майнинг криптовалют в будущем эволюционирует в более эффективную для мирового сообщества форму, когда вычислительная работа при нахождении блоков будет направлена на решение полезных научных задач. Подобные проекты уже существуют, хотя и не завоевали пока популярности. В противном случае криптосообществу придется перейти на гораздо менее энергозатратные, чем Proof-of-Work, формы достижения консенсуса при создании блоков. И такие протоколы также активно разрабатываются и тестируются, чтобы впоследствии они могли занять доминирующую позицию в технологическом процессе создания новых блоков. Возвращаясь к проблематике майнинга блоков в сети Биткоин, мы приходим к выводу, что это довольно дорогостоящая процедура для тех, кто инвестирует в нее свои материальные активы. Поэтому для них должна существовать прямая монетарная мотивация, чтобы они могли и дальше этим заниматься. Как упоминалось ранее, майнеры, создав блок, отчисляют в свою пользу всю комиссию от транзакций, которые они поместили в тело созданного ими блока. Однако совокупная величина этих комиссий не так уж велика, чтобы оправдать понесенные затраты для тех, кто содержит дорогостоящие инфраструктуры для майнинга. Также до сих пор мы не заостряли внимание на достаточно важном аспекте: для того, чтобы начать осуществлять денежные транзакции в сети Биткоин, эти средства |