Добрый день, меня зовут Павел Поляков, я Principal Engineer
в каршеринг компании SHARE NOW, в Гамбурге в ?? Германии. А еще я автор телеграм канала Хороший разработчик знает, где рассказываю обо всем, что обычно знает хороший разработчик.
Сегодня я хочу поговорить про блокчейн и криптовалюты. Мы слышим про это везде, но понимаем ли мы базовые принципы их работы? Давайте разберемся. Это перевод оригинальной статьи.
Как работают криптовалюты. С картинками.
В 2008 году Lehman Brothers Holdings Inc. подало прошение о банкротстве. Это ударило по вере общества в банки так сильно, что появилась новая категория активов, которая управляется без формальной банковской активности. Первая криптовалюта, bitcoin
, появилась в 2008 году. Автором было неизвестное лицо или группа лиц под именем Сатоши Накамото. Идея заключалась в том, чтобы создать децентрализованную цифровую валюту с открытым исходным кодом, без центрального банка или центрального администрирования. Вот ссылка на оригинальную белую книгу (white paper).
В этой статье мы рассмотрим как криптовалюты работают в принципе, начиная с транзакций и заканчивая хранением данных. Так как bitcoin
является первой и наиболее известной криптовалютой, то в этой статье я сфокусируюсь на нем.
Bitcoin ≠ Blockchain
Когда люди используют слова Bitcoin
и blockchain
как синонимы это не верно. Но люди все еще делают так, это популярное заблуждение.
Bitcoin
это не просто монета, а еще и протокол, который основывается на технологии блокчейн. Протокол это набор правил, с помощью которых участники сети общаются друг с другом. Например, часть Bitcoin
протокола регулирует как должны управляться приватные и публичные ключи, как происходит майнинг, чтобы подтверждать транзакции и тому подобное. Ethereum
, waves
, neo
, ripple
и некоторые другие криптовалюты имеют похожий на Bitcoin
протокол.
Этот протокол, как, например, Bitcoin
и Ethereum
, включает в себя определение монеты, которая, как правило, названа в честь протокола. Эта монета и делает использование протокола интересным для людей. Она используется, чтобы вознаградить людей, которые “добывают” или майнят (mine), чтобы добавить блоки к блокчейну и, что еще более важно, чтобы покупать что-то друг у друга.
Токены, в свою очередь, находятся на третьем слое архитектуры. Они существуют благодаря смарт контрактам, которые, в свою очередь, работают благодаря протоколам (второй слой). Ethereum
на данный момент, это наиболее популярный протокол для создания смарт контрактов и токенов. А вот протокол Bitcoin
, в итоге, не позволяет создание токенов, потому что он не поддерживает создание смарт контрактов.
Безопасная альтернатива традиционным банкам ?
Чтобы хорошо понять криптовалюты, давайте сперва разберемся как работает блокчейн и обычная клиент-серверная архитектура.
Клиент-серверная архитектура
Базовая концепция этой архитектуры в том, что клиент (пользователь) делает http
запрос к серверу, и, если все в порядке, то сервер, в качестве ответа, отправляет клиенту вебстраницу. Сама вебстраница, как правило, содержит в себе данные из какой-то централизованной базы данных.
Сам факт, что вся информация хранится централизованно, на одном (условно) сервере, который контролируется банком или компанией, это огромная проблема. Даже больше, из-за того, что вся информация хранится на одном сервере, повышается шанс, что сервер взломают. А это, в свою очередь, ставит под угрозу приватность ваших данных.
Blockchain
Блокчейн решает два больших недостатка, которые присущи традиционной клиент-серверной архитектуре — приватность и безопасность данных. Блокчейн это распределенное и неизменяемое хранилище, в дополнение все операции в нем можно проконтролировать.
Давайте разберем это определение по кусочкам. Распределенное означает, что информация хранится в сети компьютеров. Это исключает необходимость иметь централизованные сервера. Вы можете представить это хранилище как бухгалтерскую книгу, где хранится список всех транзакций, которые происходят в блокчейне. Это хранилище неизменяемое, когда информация попадает в него, ее невозможно оттуда удалить или изменить.
Транзакции в блокчейн являются псевдонимными, вы можете видеть транзакции других людей, но вы не знаете кто именно стоит за ними, вы не можете изменять данные, которые содержаться в транзакции. Некоторые криптовалюты разрешают вам шифровать данные в транзакции или даже требуют этого.
Майнинг bitcoin
Теперь, когда мы обсудили как основы блокчейн, давайте посмотрим как в протоколе bitcoin
происходят транзакции. К примеру, Боб хочет послать 1 BTC Алисе.
Боб проводит транзакцию, чтобы послать деньги Алисе. Транзакция, которую инициировал Боб, изначально сохраняется в Mempool
(место, где содержатся все неподтвержденные транзакции). Для того чтобы транзакция из Mempool
попала в Bitcoin
блокчейн, майнеры, сперва, должны решить математическую проблему. Ее решение, как правило, занимает 9 минут. Майнер, который решит эту проблему первым, заявляет другим участникам сети, что он успешно ее решил. Теперь другие майнеры проверят, является ли добытый блок действительно тем, что хочет добавить Боб, или это хакеры пытаются взломать сеть. После того как все будет проверено, транзакция будет успешно размещена в блокчейне и Алиса получит 1 BTC от Боба.
Отметим, что майнер, который первым решит математическую проблему, получит вознаграждение или комиссию за транзакцию в виде bitcoin
.
Математическая проблема
Теперь, когда мы, в целом, понимаем, что такое майнинг, давайте разберемся с математической проблемой, которую решают майнеры, чтобы добавить блок в Bitcoin
сеть.
Когда Боб с Алисой совершили транзакцию, то она выглядела как та, что на картинке ниже. Каждая транзакция содержит номер блока, одноразовое значение (nonce), данные, предыдущий хэш и собственный хэш.
Номер блока, как и сообщает нам имя, это номер текущего блока, который предстоит добавить в блокчейн. Данные содержат детали транзакции, которую совершили Боб и Алиса. В блокчейне хэши это как отпечатки пальцев, они используются, чтобы ссылаться на предыдущие блоки. Предыдущий хэш содержит значение хэш предыдущего блока, который уже содержится в блокчейне.
Одноразовое значение это число, которое майнер может изменять, чтобы получить определенный хэш. Все остальные данные в блоке, т.е. номер блока, данные и предыдущий хэш являются неизменяемыми по своей природе. Никто не может их изменить.
Алгоритм SHA 256
Представим, что у нас есть файл. Мы можем обработать этот файл с помощью алгоритма SHA 256. На выходе мы получим хэш — 64 символа, каждый из которых может быть любым шестнадцатеричным символом. 4 бита на символ.
Хэш, который является частью блока, генерируется, когда мы обрабатываем номер блока, данные, предыдущий хэш и одноразовое значение с помощью алгоритма SHA 256. Хэши можно сравнивать друг с другом. Bitcoin
протокол дает майнерам целевое значение хэша.
Хэш, который генерируется майнерами, должен быть меньше или равен целевому значению, которое предоставил Bitcoin
протокол. В таком случае, блок будет добавлен в блокчейн. Майнеры могут менять одноразовое значение, чтобы генерировать новые хэши. Майнер, который первым сгенерирует хэш, который меньше или равен целевому значению, получает награду за успешное решение математической проблемы.
На этом вебсайте вы можете попробовать сами.
Выше демонстрация транзакции, которую мы обсуждали. Попробуйте сами. Обратите внимание на то, как изменяется хэш, когда вы изменяете номер блока, одноразовое значение или данные в блоке. Именно это поведение не позволяет хакерам взламывать блокчейн. Мы обсудим это в следующих разделах.
Цепь блоков
Теперь, когда у нас есть базовое понимание о том, как добывается bitcoin
и как в этом участвует алгоритм SHA 256, давайте посмотрим, как успешно намайненый блок добавляется в блокчейн.
Первый блок в блокчейне так же известен как блок Зарождения (Genesis block). Значение предыдущего хэша в этом блоке — 0
. Наша транзакция, та что между Бобом и Алисой, находится в третьем блоке, который был успешно добавлен. Значение предыдущего хэша в этом блоке это значение хэша в блоке номер два.
Распределенные P2P сети
Теперь давайте немного уменьшим масштаб и посмотрим, как блокчейн вообще существует в децентрализованной распределенной peer to peer (P2P) сети.
Если участнику в распределенной P2P нужна информация, он контактирует других участников, у которых есть эта информация. Преимущество P2P сети, в том что она не может быть взломана хакерами, поскольку информация хранится во многих местах. И если одно место взломано, то другие остаются в безопасности. Давайте посмотрим, как успешно намайненый блок Боба и Алисы хранится в P2P сети.
На изображении ниже приведен пример P2P сети с майнерами и пользователями.
Представим что A
это майнер, который успешно решил математическую проблему для транзакции между Бобом и Алисой и он добавляет блок в свой локальный блокчейн. Блок под номером 3. Как только блок будет помещен в блокчейн, об этом будет сообщено другим пользователям сети. Протокол скажет им добавить этот блок в их копию блокчейна. Ниже анимация, которая поможет вам это визуализировать.
Другой пользователь сперва проверит все ли в порядке с блоком, который намайнил A
, а потом добавит этот блок в свой блокчейн.
Когда блок будет успешно добавлен, то P2P сеть будет иметь следующий вид.
Завершаем
Вот и все. Это было быстрое введение в то как работают криптовалюты. Я надеюсь вы научились чему-то, когда читали этот пост.
Если вы хотите дополнительно разобраться в вопросе, я рекомендую ресурсы ниже:
А еще...
Здесь говорю опять я, Павел. В конце еще раз приглашу вас в свой Telegram-канал. На канале Хороший разработчик знает я минимум три раза в неделю простым языком рассказываю про свой опыт, хард скиллы и софт скиллы. Я 15+ лет в IT, мне есть чем поделиться. Все это нужно разработчику, чтобы делать свою работу хорошо, работать в удовольствие, быть востребованным на рынке и получать высокую компенсацию.
А для любителей картинок и историй есть ? Instagram.