Как работает Blockchain

Blockchain (блокчейн) — это механизм хранения и изменения данных без центральных узлов. Что в нем особенного, и почему нужно изобретать какой-то новый механизм, если можно все хранить на сервере?

Проблема центрального узла

Блокчейн впервые был описан и применен для обеспечения транзакций цифровой валюты. Рассмотрим, как обмен деньгами происходит обычно. Пусть есть 3 чувака (А, Б и В), у которых на счету есть по 10 баксов. Их счета хранятся в банке (в обычной таблице). Когда чувак "А" хочет перевести 5 баксов чуваку "Б", он отправит запрос в банк. Банк проверит состояние его баланса и отправит деньги адресату, если их хватает на счету.

С этим механизмом есть несколько проблем:

  • Если банк не работает, клиенты не могут использовать свои счета и проводить транзакции.
  • База данных так или иначе доступна некоторым сотрудникам банка, которые могут вносить в нее изменения (по ошибке либо намеренно).

Решение этих проблем будет подразумевать решение двух задач:

  • Список транзакций должен храниться не в одном единственном месте, а во множестве мест сразу. Так, кто-то один не сможет повлиять на данные, имея супер-доступы.
  • Список транзакций должен быть публичным, и каждый может получить к нему доступ. Т.е. каждый сможет проверить валидность любой транзакции.

Эти принципы положены в основу Блокчейн базы данных.

Распределенное хранение

Представим, что трое наших ребят будут хранить таблицу счетов — каждый у себя. Тогда для перевода денег от "А" к "Б" необходимо будет всего лишь опубликовать событие для всей сети, в котором будет указано, что "А" переводит $5 для "Б".

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

Цепь блоков транзакций

Для того, чтобы в любой момент времени можно было проверить любую транзакцию, хранилище содержит список транзакций, а не список счетов:

А -> Б: $5
Б -> В: $2
В -> A: $1
В -> Б: $1
...

# Данные о деньгах в системе хранятся в виде списка транзакций

Для удобства, транзакции группируются в блоки, которые после сборки отправляются по всей сети:

Блок 1: А -> Б: $5
      : Б -> В: $2
      : В -> A: $1

Блок 2: В -> Б: $1
...

# Блок 2 будет наполнен и отправлен всем клиентам

Каждый клиент принимает такой блок и добавляет к уже сохраненным блокам. Так получается цепь блоков или блокчейн (Blockchain — chain of blocks). Однако, как убедиться, что клиент получил блок с настоящими данным, а не подделанными другими участниками?

Подтверждение данных

На самом деле, когда один клиент направляет деньги другому, его транзакция помечается, как неподтвержденная. В течение короткого времени она остается такой, пока специальные узлы не проверят ее.

Такие узлы называются майнерами. Для подтверждения транзакции они используют сложные вычисления (открытые всем участникам). Побеждает тот, кто сделает это раньше всех. На практике, побеждает тот, у кого больше вычислительных мощностей. Победивший узел получает небольшое вознаграждение, а новый блок добавляется к цепи всей системы в хронологическом порядке.

После этого остальные узлы могут легко проверить валидность нового блока специальной hash() функцией. Так обеспечивается синхронизация данных среди всех узлов системы.

Самое важное

Блокчейн база данных обеспечивает (по-настоящему) распределенное хранение данных. Кроме этого, открытость сети, позволяет изменять данные (в примере — переводить деньги) без использования центральных узлов. Что, в свою очередь, сохраняет данные от фрода и взломов.

Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень