Согласно Википедии, блокчейн - это:
Распределенная база данных, которая используется для поддержки постоянно растущего списка записей, называемых блоками.
Звучит неплохо, но как это работает?
Чтобы проиллюстрировать блокчейн, мы будем использовать интерфейс командной строки с открытым исходным кодом под названием Blockchain CLI.
Я также создал версию этого для браузера.
Установка версии интерфейса командной строки
Если вы еще этого не сделали, установите Node.js.
Затем запустите в своем терминале следующее:
# Clone this repository $ git clone https://github.com/seanseany/blockchain-cli # Go into the repository $ cd blockchain-cli # Install dependencies $ npm install # Run the app $ npm start
Вы должны увидеть 👋 Welcome to Blockchain CLI!
и blockchain →
приглашение, готовое к выполнению команд.
Как выглядит блок?
Чтобы увидеть текущий блокчейн, введите blockchain
или bc
в командную строку. Вы должны увидеть блок, как на изображении ниже.
- Индекс (№ блока): Какой это блок? (У блока Genesis индекс 0)
- Хеш: действительна ли блокировка?
- Предыдущий хеш: действителен ли предыдущий блок?
- Отметка времени: когда был добавлен блок?
- Данные: Какая информация хранится в блоке?
- Одноразовый номер: Сколько итераций мы прошли, прежде чем нашли действительный блок?
Блок Генезиса
Каждый блокчейн начинается с the🏆 Genesis Block
. Как вы увидите позже, каждый блок в цепочке блоков зависит от предыдущего блока. Итак, блок Genesis нужен для майнинга нашего первого блока.
Что происходит при добыче нового блока?
Давайте займемся добычей нашего первого блока. Введите mine freeCodeCamp♥︎
в подсказку.
Блокчейн просматривает последний блок в блокчейне на предмет индекса и предыдущего хэша. В этом случае блок Genesis - это самый последний блок.
- Индекс: o + 1 = 1
- Предыдущий хеш: 0000018035a828da0…
- Отметка времени: при добавлении блока.
- Данные: freeCodeCamp❤
- Хеш: ??
- Одноразовый номер: ??
Как рассчитывается хеш?
хеш-значение - это числовое значение фиксированной длины, которое однозначно идентифицирует данные.
Хэш вычисляется, принимая в качестве входных данных индекс, предыдущий хэш блока, временную метку, данные блока и одноразовый номер.
CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)
Алгоритм SHA256 вычислит уникальный хеш с учетом этих входных данных. Одни и те же входные данные всегда будут возвращать один и тот же хэш.
Вы заметили четыре ведущих нуля в хэше блока?
Четыре ведущих нуля - это минимальное требование для действительного хеша. Требуемое количество ведущих нулей называется сложностью.
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.
Что за нонс?
Одноразовый номер - это число, используемое для поиска действительного хеша.
let nonce = 0; let hash; let input; while(!isValidHashDifficulty(hash)) { nonce = nonce + 1; input = index + previousHash + timestamp + data + nonce; hash = CryptoJS.SHA256(input) }
Одноразовый номер повторяется до тех пор, пока хеш не станет действительным. В нашем случае действительный хэш имеет не менее четырех ведущих нулей. Процесс поиска одноразового номера, соответствующего действительному хешу, называется майнингом.
По мере увеличения количество возможных действительных хешей уменьшается . Чем меньше возможных действительных хешей, тем больше вычислительных мощностей требуется для поиска действительного хэша. .
Почему это важно?
Это важно, потому что он сохраняет неизменность блокчейна.
Если у нас есть следующий блокчейн A → B → C, и кто-то хочет изменить данные в блоке A. Вот что происходит:
- Изменения данных по блоку А.
- Хэш блока А изменяется, поскольку для его вычисления используются данные.
- Блок A становится недействительным, потому что в его хэше больше нет четырех ведущих нулей.
- Хэш блока B изменяется, поскольку хеш блока A использовался для вычисления хэша блока B.
- Блок B становится недействительным, потому что в его хэше больше нет четырех ведущих нулей.
- Хэш блока C изменяется, потому что хэш блока B использовался для вычисления хэша блока C.
- Блок C становится недействительным, потому что в его хэше больше нет четырех ведущих нулей.
Единственный способ видоизменить блок - снова добыть блок и все блоки после него. Поскольку новые блоки добавляются постоянно, мутировать блокчейн практически невозможно.
Надеюсь, этот урок был для вас полезным!
Если вы хотите проверить веб-версию демонстрации, перейдите на http://blockchaindemo.io