Мы все недавно знали о терминах «блокчейн» и «биткойн». Люди обычно путают эти два термина и на самом деле не понимают, что оба они не «равны». Давайте теперь выясним, что они на самом деле означают и как они функционируют.

Блокчейн — это просто список блоков/узлов, связанных с помощью криптографии. Блоки в этой цепочке связаны друг с другом с помощью криптографического хэша. Следовательно, каждый блок содержит криптографический хэш предыдущего блока, метку времени и данные транзакции. Блокчейн в основном действует как публичная книга, в которой записываются транзакции.

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

Типичный сценарий использования

Теперь давайте углубимся в блокчейн. Прежде всего рассмотрим обычный сценарий, когда вы переводите некоторую сумму денег из своего банка в Великобритании в банк в США. Во-первых, мы просим третью доверенную сторону (банк) перевести некоторую сумму на определенный банковский счет в США. Затем доверенная третья сторона идентифицирует банковский счет в США и переводит запрошенную сумму на конкретный счет. Для этого доверенная третья сторона (ваш банк) взимает определенную сумму денег в качестве комиссии за транзакцию. Кроме того, вся операция может занять много времени (может быть даже несколько дней). Вот где вступает в действие блокчейн, где мы полностью избавляемся от третьей стороны. Транзакция будет происходить непосредственно между отправителем и получателем. Комиссия за транзакцию теперь становится практически незначительной, а время сокращается с дней до секунд! да всего секунды!

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

Открытая книга

Рассмотрим блокчейн, который состоит из нескольких узлов A, B, C, D. Теперь предположим, что A хочет выполнить транзакцию с B, B хочет выполнить транзакцию с C и так далее. Вся эта транзакция отображается в реестре, который является общедоступным. Важность открытой/общедоступной книги заключается в том, что каждый в сети может легко узнать, сколько денег есть у каждого узла в сети, а также каждый узел в сети может решить, действительна ли транзакция или нет.

Предположим, что у A было 10$ в начальном состоянии, и он уже перевел сумму в 5$ с B. Как только транзакция завершена и запись была успешно создана в общедоступной книге, данные теперь общедоступны, и все в сети теперь знает, что у А осталось только 5$. Теперь, если A снова инициирует транзакцию на 10 долларов для D, все узлы в сети легко аннулируют транзакцию, поскольку у A есть только баланс в 5 долларов, и практически невозможно перевести сумму в 10 долларов.

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

Распределенный реестр (децентрализованный)

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

Предположим сценарий, в котором узел A хочет выполнить транзакцию с узлом B. Итак, что в основном делает A, так это то, что он публикует/транслирует предполагаемое сообщение о транзакции в сети. На данный момент эта сделка является недействительной. Вот тут-то и появляются майнеры. Майнеры — это специальные узлы в сети, у которых есть доступ к леджеру. Как только предполагаемая транзакция будет создана в сети, майнеры будут соревноваться между собой, чтобы подтвердить транзакцию и добавить ее в реестр. Первый майнер, который сделает это, получит финансовое вознаграждение, в случае с биткойн-сетью он получит определенное количество биткойнов.

Чтобы успешно добавить транзакцию в реестр, майнерам необходимо сделать две вещи:

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

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

Теперь давайте посмотрим, как мы можем программно объяснить архитектуру биткойна:

Прежде всего создайте новый файл javascript и назовите его blockchain.js. Теперь создайте класс с именем Block, который принимает индекс, временную метку, данные и предыдущую хэш-сумму через свой конструктор, как показано ниже.

Теперь нам нужно будет создать calculateHash(), показанный выше. Для этого нам понадобится SHA256 в качестве хэш-функции. Чтобы импортировать эту библиотеку, сначала перейдите к файлу blockchain.js с помощью терминала и введите следующую команду:

установить npm — сохранить крипто-js

Теперь обновите файл blockchain.js следующим кодом.

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

Если вы проверите метод addBlock ( newBlock ) в классе Blockchain, вы увидите, что мы установили значение previousHash нового блока в значение хеш-функции последнего блока, что означает, что каждый узел в цепочке блоков указывает на следующий узел, используя уникальный ключевой хеш.

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

Теперь откройте терминал и попробуйте запустить

узел blockchain.js

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

Теперь давайте проверим, действителен ли наш блокчейн, добавив следующий оператор console.log внизу blockchain.js.

console.log('Действительна ли цепочка?' + navneetCoin.isChainValid());

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

Теперь давайте попробуем изменить блокчейн, добавив следующее в конец файла blockchain.js.

navneetCoin.chain[1].data = { сумма: 100 };
console.log(‘Действительна ли цепочка? ‘ + navneetCoin.isChainValid());

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

Первоначально опубликовано на https://www.freshbytelabs.com.