Автор оригинала: FreeCodeCamp Community Member.
Шон Хан
Согласно Википедии, блокчан:
Это звучит приятно, но как это работает?
Чтобы проиллюстрировать блокчану, мы будем использовать интерфейс командной строки с открытым исходным кодом 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
Вы должны увидеть ? Добро пожаловать в BlockChain CLI! A
ND A B Локчан →
Подскажите готовые команды.
Как выглядит блок?
Чтобы увидеть ваш нынешний блокчан, введите Блокчан
или BC
в командную строку. Вы должны увидеть блок, как изображение ниже.
- Индекс (блок №): Какой блок это? (Блок Genesis имеет индекс 0)
- Хэш: Это блок действителен?
- Предыдущее хэш: Предыдущий блок действителен?
- Timestamp: Когда был добавлен блок?
- Данные: Какая информация хранится на блоке?
- Nonce: Сколько итераций мы проходили до того, как мы нашли действительный блок?
Блок Бытия
Каждый блокчан начнет с ? Блок Бытия.
Как вы увидите позже, каждый блок на блокчане зависит от предыдущего блока. Итак, блок Genesis необходим для моего первого блока.
Что происходит, когда новый блок добывается?
Давайте моим наш первый блок. Введите Мой FreeCodeCamp ♥ ︎
в подсказку.
Блокчан смотрит на последний блок на блокчане для индекса и предыдущих хэш. В этом случае блок Genesis является последним блоком.
- Индекс:
- Предыдущее хэш: 0000018035A828da0 …
- Timestamp: Когда блок добавлен
- Данные: FreeCodeCamp❤.
- Хэш: ??
- Nonce: ??
Как рассчитан хэш?
А Hash Value Является ли числовой ценность фиксированной длины, которая однозначно идентифицирует данные.
Хеш рассчитывается путем принятия индекса, предыдущего блока HASH, Timestamp, Block Data и Nonce в качестве ввода.
CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)
Алгоритм SHA256 рассчитывает уникальный хэш, учитывая эти входы. Те же входные данные всегда будут возвращать ту же хеш.
Вы заметили, что четыре ведущих 0 в блоке хэш?
Четыре ведущих 0 является минимальным требованием для действительного хэша. Количество лидирующих 0 требуемых 0 называется Сложность Отказ
function isValidHashDifficulty(hash, difficulty) { for (var i = 0, b = hash.length; i < b; i ++) { if (hash[i] !== '0') { break; } } return i >= difficulty; }
Это также известно как Система доказательства работы Отказ
Что такое нон?
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 Iterate, пока хэш не будет действительным. В нашем случае действительное хэш имеет как минимум четыре ведущих 0. Процесс нахождения нон, который соответствует действительным хэш, является добыча Отказ
Как сложность увеличивается , количество возможных действительных хэшей уменьшается Отказ Благодаря менее возможным действительным хэшим, требуется больше мощности обработки, чтобы найти действительный хэш.
Почему этот вопрос?
Это имеет значение, потому что он хранит в блокчане неизменно.
Если у нас есть следующий блокчан A → B → C, и кто-то хочет изменить данные на блоке A. Это то, что происходит:
- Изменения данных на блоке А.
- Заблокируйте изменения хэш, потому что данные используются для расчета хеша.
- Блок А становится недействительным, потому что его хеш больше не имеет четырех ведущих 0.
- Изменения хэш Block B, потому что блок A хеш был использован для расчета хеша Block B.
- Блок B становится недействительным, потому что его хеш больше не имеет четырех ведущих 0.
- Изменения хеш-блока C, потому что хеш Block B использовался для расчета хеша блока C.
- Блок C становится недействительным, потому что его хеш больше не имеет четырех ведущих 0.
Единственный способ Mutate Block снова будет снова до блока, и все блоки после. Поскольку новые блоки всегда добавляются, почти невозможно мутировать блокчану.
Я надеюсь, что этот учебник был полезен для вас!
Если вы хотите проверить веб-версию демонстрации, отправляйтесь на http://blockchaindemo.io.