Как устроен блокчейн? Простое и понятное объяснение принципов работы


Как многие могли заметить, Голос — это онлайн-медиа, принцип работы которого основывается на технологии блокчейн. Но если фраза «онлайн-медиа» не нуждается в дополнительных разъяснениях, то вот с технологией блокчейн все сложнее. Немалое число пользователей теряется, пытаясь разобраться в механизме ее работы, и в итоге остается при мнении, что понять это могут только избранные техногуру. Однако, смею вас уверить, что блокчейн устроен гораздо проще, чем может показаться, и разобраться в его работе может каждый. Чтобы доказать это, я хочу привести перевод небольшой заметки с freeCodeCamp, в которой просто и наглядно объясняется процесс работы блокчейн-сети и основные принципы ее устройства.

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

Согласно определению из Википедии, блокчейн это

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

Звучит интересно, но как это работает?

Чтобы проиллюстрировать принцип работы блокчейна, мы будем использовать интерфейс для коммандной строки, который называется Blockchain CLI.

Также я создал браузерную версию этого инструмента

Установка интерфейса для командной строки

Если вы до сих пор этого не сделали, установите Node.js.

После этого введите следующие команды в терминал:

npm install blockchain-cli -g
blockchain

Вы должны увидеть следующее сообщение: 👋 Welcome to Blockchain CLI! и строку blockchain →, готовую принимать команды

Как выглядит блок?

Чтобы увидеть текущее состояние блокчейна, введите blockchain или bc в терминал. Вы должны увидеть блок, похожий на картинку ниже:

  • Index (Block #): каков номер текущего блока? (начальный (Genesis) блок имеет индекс 0)
  • Hash: показывает, является ли блок валидным
  • Timestamp: обозначает время, когда был добавлен блок
  • Data: показывает, какая информация хранится в блоке
  • Nonce: показывает, сколько итераций нужно совершить до обнаружения валидного блока

Начальный блок

Каждый блокчейн начинается с 🏆 Genesis Block. Как вы увидите позже, каждый блок в блокчейне зависит от предыдущего. Поэтому начальный блок нужен для того, чтобы намайнить (добыть) наш первый блок

Что происходит, когда майнится новый блок?

Давайте намайним наш первый блок. Введите mine freeCodeCamp♥︎ в терминал

Блокчейн ищет индекс последнего блока и предыдущий хэш. В нашем случае последним блоком является Genesis Block.

  • Index: 0 + 1 = 1
  • Previous Hash: 0000018035a828da0…
  • Timestamp: время создания Genesis Block
  • Data: freeCodeCamp❤
  • Hash: ???
  • Nonce: ???

Как высчитывается хэш?

Хэш — это числовое значение фиксированной длины, являющееся уникальным идентификатором данных

Чтобы вычислить хэш, берутся индекс, хэш предыдущего блока, время создания, данные блока и nonce

CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)

Алгоритм SHA256 вычислит уникальный хэш для этих входных данных. Одинаковые входные данные всегда возвращают одинаковый хэш

Заметили четыре ведущих нуля в хэше блока?

Четыре ведущих нуля — это минимальное требование для валидности хэша. Число требуемых ведущих нулей называется сложностью (difficulty)

function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i < b; i ++) {
    if (hash[i] !== '0') {
       break;
    }
  }
 return i >= difficulty;
}

Оно также известно как система Proof-of-Work

Что такое nonce?

nonce — это число, которое используется для нахождения валидного хэша

let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {
   nonce = nonce + 1; 
   input = index + previousHash + timestamp + data + nonce;
   hash = CryptoJS.SHA256(input)
}

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

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

Почему это имеет значение?

Это имеет значение из-за того, что позволяет блокчейну оставаться неизменяемым

Если мы имеем блокчейн A → B → C, и кто-нибудь захочет изменить данные в блоке А, произойдет следующее:

1. Данные изменятся в блоке А

2. Хэш блока А изменится, так как изменились данные, используемые для вычисления хэша

3. Блок А перестанет быть валидным, так как в хэше больше нет четырех ведущих нулей

4. Изменится хэш блока B, так как хэш блока А используется для вычисления хэша блока B

5. Блок В станет невалидным, так как в его хэше больше не будет четырех ведущих нулей

6. Хэш блока С изменится, так как хэш блока В используется для вычисления хэша блока С

7. Блок С перестанет быть валибным, так как в нем не будет четырех ведущих нулей

Единственный способ изменить блокчейн — намайнить заново этот блок, а также все блоки после него. А так как всегда добавляются новые блоки, изменить блокчейн будет практически нереально

Надеюсь, этот обучающий материал был для вас полезен!

Если вы хотите увидеть веб-версию демо, взгляните на http://blockchaindemo.io

Источник: golos.io

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.


Поделиться ссылкой:
Финансовая поддержка проекта: