Добрый день, меня зовут Павел Поляков, я 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.

Комментарии (12)


  1. Useroff
    04.02.2022 11:46
    +16

    О криптовалютах просто:

    ... сидят бухгалтера с гроссбухами, кидают кости. Кто выкинул значение меньше оговоренного заранее, тот получает право сделать запись в гроссбух.

    Гроссбух - блокчейн.

    Кидание костей - "математическая проблема"


  1. PsinaSobaka
    04.02.2022 11:47
    +1

    Ни дать ни взять актуалочка....


  1. spooky
    04.02.2022 12:27
    +7

    Сколько книг прочитал, а Алиса никак Бобу не переведет за кофе...


  1. fedechka
    04.02.2022 12:48
    -1

    Ни черта все равно не понятно. Без поллитры точно не разберешься.


  1. saboteur_kiev
    04.02.2022 15:24

    Безопасная альтернатива традиционным банкам ????

    На этом месте перестал читать.


  1. Ingushka
    04.02.2022 16:12
    +1

    В 2022 году все еще выходят новые материалы (основанные на старых) о работе битка.
    А ведь чем выше курс крипты, тем больше подобных статей будет появляться...)


    1. PavloPoliakov Автор
      04.02.2022 16:16

      Не совсем так. Я на самом деле тоже не знал толком, пока не прочитал эту статью. А именно - я не знал как вычисляется хэш и что при майнинге хэши сравниваются. Поэтому перевел и опубликовал.


  1. GeMir
    04.02.2022 19:20
    +1

    But how does bitcoin actually work?

    Это если спокойно и по делу.


  1. Daemon_Hell
    05.02.2022 14:56

    Достаточно забавно читать что "bitcoin не поддерживает создание токенов", учитывая что оригинальный USDT был выпущен как раз на блокчейне биткоина


  1. Alequez97
    06.02.2022 20:35

    Если участнику в распределенной P2P нужна информация, он контактирует других участников, у которых есть эта информация.

    Как только блок будет помещен в блокчейн, об этом будет сообщено другим пользователям сети

    Можно абстрагироваться для простоты понимания от криптографии и не вникать как работают хэш-функции, но вот абстрагироваться от сетевого взаимодействия как-то не получается. В централизованной схеме мы знаем доменное имя, по которому днс нам вернёт айпи адреса владельца ресурса. В биткойне или любой другой системе - где хранится информация об участниках сети и их айпи адресах? Насколько я понял работает это все на тех же протоколах стека TCP/IP или все же нет? Что такое mempool? Если это только временное хранилище, то где оно храниться? Или до создания блока все майнеры хранят копию всех неподтвержденным транзакций? Тогда получается mempool = копия всех неподтвержденных транзакций у всех майнеров? Тогда все равно следуют вопрос как обычные участники знают кто такие майнеры? Эта информация тоже у всех скопирована локально? Если это так, то получается, что когда в сеть добавляется новый майнер, он должен сообщить всем, что его надо тоже вписать в этот список? Я заранее извиняюсь за такое огромное количество вопросов, многое из этого лишь мои догадки на основе небольших познаний в сетях, просто большиство лекций, книг и статей не особо освещают эту тему. Большинство из них на уровне "представьте аборигенов на острове, которые ходят каждый со своими дощечками и когда встречаются переписывают друг другу на дощечки то, что у них записано". Все это замечательно и прекрасно, только компьютеры это не аборигены на острове, они не ходят и не встречаются друг с другом, а посему эти аналогии поначалу напрягают, а потом и вовсе раздражают. Если кто-то может направить меня на ресурс, где тема networking в криптовалютах раскрывалась бы более подробно, я буду очень признателен


    1. alexander_fedoseev
      07.02.2022 01:04

      У меня те же вопросы возникли. Не договаривают. И ещё я удивился, что не сказали ничего про 4-е нуля в хэше вначале ведь это из-за них, как я понимаю, долго вычисляется хэш. Именно долгое вычисление хэша и делает блокчейн устойчивым к взлому. А условие меньше или равно звучит не очен понятно.


      1. kuza2000
        07.02.2022 08:25

        У меня ровно такие же вопросы, которая не раскрывает даже такая статья для самых маленьких.

        Вообразим, что я хочу майнить. Один, без пула. Ставлю софт - узел сети, нода. Запускаю. С кем он связывается?