Что такое блокчейн и как он работает?

Что такое блокчейн и как он работает?

Test Engineering Notes

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

Когда я только начинал терзать Гугл на эту тему, я получил огромное количество статей, видео и даже курсов. Но все эти ресурсы в итоге разделились на две категории: слишком поверхностно или слишком углубленно. Не было ничего "посередине".

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

Зачем нужен блокчейн, если и так есть банк?

Каждый из нас пользуется услугами банка и совершает транзакции с карты или счета. Список транзакций каждый из нас может посмотреть, зайдя в приложение банка. (Или запросив в бумажном виде как справку).

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

Этот список транзакций могут видеть две стороны - Вы, как клиента банка и сам банк. Информация об этих транзакциях "надежно" хранится на серверах банка. Получая этот список - Вы доверяете банку, что он ненароком не подтасовал Ваш баланс.

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

Что такое блокчейн?

Блокчейн дает альтернативу привычным банковским платежам. (Разумеется, блокчейн используется не только для финансовых транзакций - но начнем с них).

В блокчейне, история Ваших транзакций хранится в открытом виде на множестве узлов огромной Peer-to-Peer сети. Историю транзакций практически невозможно "изменить" и "подтасовать". Все узлы в сети равны - соответственно никто не вправе заблокировать Ваш счет просто так.

Как это работает технически?

Блокчейн с высоты птичьего полета

История транзакций в блокчейне хранится в виде распределенного реестра (distributed ledger). Можно думать о таком реестре как большой распределенной базе данных. Реестр представляет собой набор одинаковых блоков.

Блоки связаны между собой криптографически. Каждый блок внутри себя хранит hash предыдущего блока. Именно поэтому блокчейн так и назван - это chain of blocks (цепочка блоков).

Зачем хранить hash предыдущего блока? Затем, что при любом изменении внутри блока - его hash поменяется. Соответственно если мы хотим поменять блок 1, измениться его hash значение. Изменение hash значения блока 1, ведет к изменению блока 2 и так далее.

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

Каждый блок и каждая транзакция подписаны с помощью цифровой подписи. Любой участник сети может проверить эту подпись и быть уверенными, что не было подделок.

Как создаются транзакции

Создание транзакций

Клиент с помощью командной строки и специального приложения криптокошелька, формирует транзакцию. В транзакции он указывает отправителя, получателя и сумму перевода. Кроме того, он указывает плату за транзакцию. (О том, как модели транзакций бывают - разберем отдельно).

В нашем примере клиент 1 подключается к узлу 1 и отправляет trx1, а клиент 2 отправляет trx2 узлу 3. Клиент не контролирует к какому узлу он подключится и куда отправит транзакцию.

Подготовка транзакций на узлах

Каждый узел сети некоторое время собирает входящие транзакции в свое локальное хранилище (MemPool). Узлы обмениваются между собой входящими транзакциями. Но так как транзакции приходят в любое время, то их порядок на каждом узле может быть разным.

Время от времени узел формирует новый блок из транзакций. Узел подписывает блок. Кроме того, чтобы окончательно сформировать правильный блок - узел должен участвовать в Proof-Of-Work консенсусе.

Mining и выбор победителя

Выбор майнера и его блока

Каждый из узлов, у которого есть новый потенциальный блок - начинает гонку с остальными узлами. Их цель - добавить к своему блоку такое число Nonce, чтобы исходящий hash блока был определенного вида (имел определенное количество нулей в начале). Эта задача несложная, но ресурсоемкая - нужно делать огромное количество проб и ошибок перебором. Это и называется - mining. За то, что узел провел вычисления и первым добавил блок - он получает вознаграждение в виде монет плюс fee с каждой транзакции.

Валидация блока


Распространяем и валидируем блок

Когда узел находит такое число - он отправляет новый блок другим узлам в сети. Узел, получивший новый блок - валидирует его и все транзакции внутри. Если с блоком все в порядке - он начинает распространятся по сети как новый валидный блок.

Распространение проверенного блока по сети

Новый блок уже везде

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

В Bitcoin, новый блок появляется в сети в среднем каждые 10 минут (За этим даже следит внутренний алгоритм сложности mining'a). Но это вовсе не означает, что Ваша транзакция будет в блоке через 10 минут. Но об этом - в следующий раз.

Я надеюсь, что общее понимание блокчейна у Вас появилось. В дальнейшем, мы будем постепенно углубляться в разным части этой огромной системы и смотреть как ее тестируют.


Report Page