Блокчейн
Web3 встречается с восторгом некоторых как следующий этап развития Интернета. Хотя он все еще находится в начальной стадии, Web3 обещает предоставить децентрализованный способ вычислений. Нравится это вам или нет, как инженеры, мы должны понимать технические основы Web3. Для полного понимания Web3 необходимо разобраться в основах блокчейнов. Потому что блокчейны являются основой систем, таких как Bitcoin
и Ethereum
, предоставляя криптографически защищенный и неизменяемый слой данных.
Блокчейны имеют довольно крутую кривую обучения, потому что они объединяют темы из нескольких областей, таких как информатика, криптография, распределенные системы и экономика.
Полезный ресурс: Визуализация играет ключевую роль в понимании этих концепций. Андерс Браунворт создал очень хороший интерактивный инструмент для экспериментирования с блокчейнами, его стоит попробовать
Предыстория
Биткойн был задуман как "пиринговая версия электронных наличных...не требующая доверенного третьего лица для предотвращения двойных расходов".
В общих чертах, двойные расходы - это когда кто-то пытается передать одну монету двум людям одновременно.
Много информации про биткоин доступно на его сайте. С ней можно ознакомиться по ссылке
- Из документов можно сделать небольшую выжимку:
- Основная цель Биткойна - предотвратить "двойные траты" без использования доверенного третьего лица.
- Слово "блокчейн" нигде не упоминается.
- Биткойн разработан как электронная валюта, способная обрабатывать платежные транзакции таким образом, чтобы не требовать доверенного третьего лица.
- Пользователи используют криптографию на открытом ключе для подписи транзакций.
Это тема, которая распространена во многих технологиях блокчейна.
Технические особенности
Техничееские концепции, которые позволяют блокчейнам, подобным Биткоину, функционировать:
- Криптографические хеш-функции, такие как
SHA256
. Используются для генерации адресов блокчейна и для создания публичных/приватных ключей, используемых для цифровой подписи транзакций. - Транзакции, содержащие данные, которые обновляют состояние блокчейна. Например, Алиса отправляет Никите 10 биткоинов. Такие транзакции используют цифровые подписи (через приватный ключ), чтобы показать, что Алиса действительно отправила Никите 10 биткоинов. В противном случае Никите мог бы просто подделать транзакцию.
- Блоки, которые группируют транзакции. Это делается для повышения эффективности сети путем обработки нескольких транзакций одновременно.
- Блокчейн - структура данных, содержащая блоки транзакций, которые надежно связаны друг с другом. Можно представить себе это как односвязный список с некоторыми добавленными хеш-функциями. Это простая, но удивительно полезная модель мышления.
- Пиринговая сеть, состоящая из узлов. Эти узлы передают транзакции и блоки по сети друг другу, чтобы достичь консенсуса и внести обновления в блокчейн.
- Распределенный механизм консенсуса для принятия решения о том, как новые блоки должны быть добавлены в блокчейн. Механизм консенсуса имеет жизненно важное значение, поскольку он децентрализует контроль над блокчейном, заставляя узлы, участвующие в сети, сотрудничать в обеспечении выполнения набора правил консенсуса. Это делает сложным для злоумышленников добавление фальшивых блоков или попытки атаки на сеть.
- Криптоэкономика. Игровая теория, используемая для стимулирования узлов в сети тратить энергию и вычислительные ресурсы, необходимые для обработки транзакций честным способом. Обычно это делается в форме вознаграждений, выплачиваемых с использованием внутренней криптовалюты, такой как биткоин.
- Клиентское программное обеспечение с открытым исходным кодом, реализующее все вышеперечисленное, что облегчает загрузку и становление узлом, участвующим в сети.
Прежде чем погружаться в технические детали, стоит на мгновение остановиться и понять некоторые мотивы, лежащие в основе децентрализации.
Децентрализация
В централизованном мире доверенный орган контролирует чтение и запись данных в хранилище. Например, ваш банк является единственной сущностью, которая может обновлять баланс вашего счета в их базе данных, и вы доверяете им в этом. Если бы вы узнали, что ваш банк решил сделать свою базу данных общедоступной для загрузки и обновления для любого, вы, вероятно, были бы в панике.
И вот что делает Bitcoin. Биткойн децентрализован и не требует доверенного органа, который контролирует обновления. Биткойн формирует распределенную сеть компьютеров, называемых "узлами", которые запускают программное обеспечение биткойна. Это программное обеспечение содержит копию блокчейна биткойна, а также возможность записи обновлений в него и связи с другими узлами в сети. Любой человек может свободно скачать копию программного обеспечения и стать узлом.
Если бы Bitcoin использовал традиционную базу данных, это было бы хаосом. Если бы любой узел мог в любое время делать обновления в базе данных, возникли бы конфликты, поддельные транзакции, несоответствия между копиями базы данных разных узлов - это было бы совершенно бесполезно. Это можно было бы решить, разрешив только определенным узлам иметь доступ на запись, но это потребовало бы от сети доверять этим специальным узлам, а биткойн предназначен для отсутствия доверия. Слишком много доверия, и мы снова вернемся к централизации.
Поэтому Bitcoin не использует обычную базу данных, а вместо этого использует и блокчейн для хранения данных, и механизм консенсуса, называемый доказательством работы, который контролирует обновления блокчейна. В любой распределенной сети могут быть несколько конкурирующих версий блокчейна в любое время. Узлы в сети настроены так, чтобы всегда принимать самую длинную цепь как действительную, поскольку в ней содержится наибольшее количество "доказательства работы".
Следует отметить, что наличие блокчейн-журнала с транзакциями не является ничем особенным. Сложная часть - добиться согласия сети о состоянии журнала при его обновлении. На протяжении десятилетий исследователи выпускали статьи на эту тему. Часто можно услышать термин "Византийская Fault Tolerant" (BFT). BFT относится к классу механизмов консенсуса, которые работают, когда участники сети не могут доверять друг другу, чтобы вести себя хорошо. Представьте, что Алиса транслирует транзакцию в сеть, говоря, что она платит Никите 10 биткойнов. Как могут Алиса и Никите быть уверены, что другие узлы в сети добавили эту транзакцию в свой журнал?
Как узлы в сети могут быть уверены, что это легитимная транзакция? Может быть, Алиса уже потратила свои 10 биткойнов где-то еще (Двойное Расходование).
Это была инновация Bitcoin - нахождение простого способа для распределенной сети достичь согласия о состоянии журнала без участия доверенных сторон. Это доказательство работы, также известное как алгоритм Накамото. Коротко говоря, он утверждает, что из всех различных копий блокчейна, существующих в сети в любое время, настоящий блокчейн всегда самый длинный, потому что в него вложено больше всего вычислительной работы сетью. Предполагая, что как минимум 51% вычислительной мощности в сети контролируются честными узлами, то самый длинный блокчейн должен быть реальным. Если бы это было не так, и предположим, что Алиса и Боб вместе контролировали более 50% вычислительной мощности, они могли бы потенциально провести двойные траты своих монет в атаке на 51%.
Криптографическое хеширование
Хеширование является ключевым концептом в блокчейнах. Биткоин использует криптографическую хеш-функцию SHA256
. У криптографических хеш-функций есть два важных свойства:
- Их входные данные невозможно угадать по их выводу. Они являются необратимыми.
- Два похожих входных значения должны дать сильно разные выводы. Это аналогично первому свойству. Вы не должны смочь найти какие-либо закономерности в выводе, которые помогли бы вам угадать ввод.
Блоки
Данные транзакций объединяются и хранятся в блоках. Добавление блоков в блокчейн занимает время, поэтому более эффективно группировать несколько транзакций в один блок. Кроме данных транзакций, блок содержит заголовок, в котором хранится некоторая метаинформация о блоке. На данный момент мы сосредоточимся на двух частях метаданных: на уникальном числе (nonce)
и хеше
.
Мы уже видели, что хеш изменяется в зависимости от данных. При добавлении блока в блокчейн возникает особая задача, которую необходимо решить: нам нужно угадать значение уникального числа nonce
, так чтобы SHA256
хеш уникального числа и сериализованных данных дал хеш
с определенным количеством ведущих нулей. Это "количество ведущих нулей" называется уровнем сложности блока
, и наблюдение заключается в том, что чем больше требуется ведущих нулей, тем дольше занимает угадывание уникального числа, которое дает хеш с таким количеством ведущих нулей. Почему это так?
Представьте это так: SHA256
хеш состоит из 256 бит
, что равно 64 шестнадцатеричным символам
(каждый шестнадцатеричный символ требует 4 бита для кодирования. 4 * 64 = 256). Каждый шестнадцатеричный символ может быть одним из 16 возможных значений, и у нас их 64, поэтому всего существует 16^64 возможных SHA256
хешей. Предположим, что мы хотим найти хеш с 20 ведущими нулями. Это означает, что 20 из наших 64 символов известны, поэтому есть только 16^(64 - 20) или 16^44 таких хешей.
Наши шансы случайно найти такой хеш очень малы, поэтому сложность блока в 20 означает, что для добычи блока (т.е. нахождения уникального числа, которое дает хеш с 20 ведущими нулями) потребуется очень много времени. В приведенном ниже примере мы ищем хеши только с 4 ведущими нулями, поэтому найти подходящее уникальное число будет намного проще.
Даже небольшие изменения в данных изменят хеш и сделают блок недействительным.
Как только нажата кнопка «Mine», мы начинаем угадывать уникальные числа, и блок в конечном итоге становится зеленым, что указывает на то, что хеш имеет четыре ведущих нуля. Как вы могли догадаться, процесс нахождения правильного значения уникального числа для набора данных называется «майнингом», как и находка золота добывателем в Диком Западе.
Вычислительный "труд" в "доказательстве работы" состоит в угадывании уникального числа nonce
, пока не будет получен правильный хеш. Обратите внимание, что в этом примере нам нужно получить хеш только с четырьмя ведущими нулями, но настоящие хеши Bitcoin в настоящее время должны иметь 17 ведущих нулей. Вы можете увидеть это на деле, посмотрев на обозреватель блоков для основной сети Bitcoin. Обратите внимание, как все идентификаторы хешей начинаются с ведущих нулей. Как уже упоминалось ранее, чем больше ведущих нулей, тем более длительным будет процесс добычи.
Почему Bitcoin хочет сделать процесс добычи таким трудоемким? Ответ можно найти, когда мы начнем связывать блоки в цепь. Это связано с тем, чтобы сделать очень сложным для злоумышленника создание поддельной версии блокчейна.
Блокчейн
Кроме полей nonce
и хеша
, заголовок блока также содержит хеш предыдущего блока
в цепи. Этот предыдущий блок также содержит хеш блока, который предшествовал ему
, и так далее, пока не будет сформирована цепь блоков.
В этом примере обратите внимание, что пять блоков в цепи изначально зеленые, каждый с хешами с четырьмя ведущими нулями. Это все действительные «добытые» блоки. Сложность - 4.
Теперь предположим, что злоумышленник хочет изменить данные в блоке 2. В этом случае предположим, что у Алисы есть только 10 биткойнов, и она хочет дважды потратить эти 10 биткойнов, чтобы заплатить как Никите, так и Рустаму Как только она изменяет данные в блоке 2 в своей локальной копии блокчейна, хеш блока 2 меняется. Поскольку блок 3 содержит хеш блока 2 (который только что изменился), хеш блока 3 теперь будет аннулирован, и так далее вверх по цепочке. Каждый блок, начиная с блока 2, теперь красный (недействительный), потому что изменение распространилось и сделало цепочку недействительной.
Если Алиса попытается представить эту цепь в сеть, она немедленно будет отвергнута как недействительная, потому что хешей нет четырех ведущих нулей. Иными словами, нет "доказательства работы", которое бы говорило о том, что эти блоки действительны, и сеть всегда принимает цепочку с наибольшим количеством проверяемой (или доказуемой) работы. Алисе придется переподбирать каждый блок, начиная с блока 2, чтобы подтвердить их, а затем отправить эту цепочку в сеть для достижения консенсуса. Но мы видели на предыдущем этапе, что добыча блока требует вычислительных ресурсов и времени.
За время, пока Алиса будет переделывать каждый из этих блоков, остальная часть сети уже добавит новый блок в законную цепочку блоков. Если только Алиса не контролирует как минимум 51% вычислительной мощности в сети, можно показать, что вероятность того, что она догонит основную цепь и успешно завершит свою атаку, экспоненциально уменьшается с каждым дополнительным блоком. Помните, узлы в сети всегда примут самую длинную добытую цепь как действительную, потому что это цепочка, в которую вложено наибольшее количество вычислительной работы, и мы предполагаем, что большинство вычислительных ресурсов в сети контролируются честными узлами. Вот как блокчейн Bitcoin обеспечивает свою безопасность в публичной, децентрализованной, недоверчивой сети.
Стремится к тому, что механизм доказательства работы является лишь одним из механизмов достижения консенсуса в блокчейнах. У него есть свои ограничения, такие как медлительность и требование больших объемов вычислений. Он также предполагает, что большинство узлов будут честными. Но есть и другие механизмы.
Криптоэкономика
Давайте ответим на важный вопрос: если майнинг так ресурсозатратен, зачем кому-то вообще заниматься этим? Ведь всё это потребляет электричество и требует специализированного оборудования, что несет финансовые затраты, не говоря уже о воздействии на окружающую среду. Здесь на помощь приходит теория игр и новое направление, называемое криптоэкономика, которое отвечает на вопрос "как стимулировать честное участие в сети?".
Вот интересный факт: в Bitcoin майнинг - единственный способ создания новых биткоинов. Каждый раз, когда майнер успешно добавляет блок в цепочку, он может включить в блок транзакцию, в которой передает себе некоторое количество биткоинов в качестве вознаграждения за свою работу (на данный момент 3,125 биткоина, по состоянию на 2024 год. Это количество уменьшается вдвое каждые несколько лет - так называемый халвинг). Это вознаграждение майнера, и оно является основным экономическим стимулом - наряду с комиссиями за транзакции - для майнеров, чтобы оплатить специализированное оборудование и энергию, необходимые для майнинга.
Ethereum также предоставляет своим майнерам вознаграждение в своей собственной валюте (эфире). Следует отметить, что имеет смысл использовать валюту, присущую блокчейну, чтобы вознаграждать майнеров. Если бы вознаграждения использовали фиатные валюты, такие как доллары США или японские иены, мы вернулись бы к доверию централизованной, внецепочной власти, чего изначально хотел избежать Bitcoin. Также следует отметить, что майнерское вознаграждение рассчитано на то, чтобы быть достаточно большим, чтобы стимулировать узлы вести себя честно, вместо того чтобы использовать свои ресурсы для попыток атаки сети.