Что такое технология блокчейн? Пошаговое руководство для начинающих


Традиционно данные контролировали посредники. Например, Facebook является посредником между пользователями и рекламодателями. Банки являются посредниками между заемщиками и кредиторами.

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

Для лучшего понимания поговорим о торрентах. В торрентах ни один файл не принадлежит одному человеку. Это своего рода «одноранговая» архитектура, в которой несколько копий файла присутствуют на нескольких рабочих станциях / пользователях. Следовательно, ни один человек не контролирует этот файл. Такая архитектура отличается высокой масштабируемостью и отказоустойчивостью, поскольку здесь нет единой точки отказа.

Блокчейн по сути заимствует ту же идею: что, если бы базы данных можно было децентрализовать. Это решает множество проблем:

  • Вы можете напрямую подключиться к заемщику без посредников, таких как банк. Вы получите больше прибыли.
  • Вы можете напрямую связаться с рекламодателями, чтобы сообщить им, какая реклама вам нравится, без использования Facebook.

Один из хорошо известных вариантов использования Blockchain — это криптовалюта, которая представляет собой цифровую валюту, не контролируемую каким-либо центральным органом. Точно так же мы можем использовать блокчейн для смарт-цифровых контрактов, когда ни один посредник не проверяет контракт. Есть несколько приложений и вариантов использования Blockchain, для которых мы написали подробную статью: https://hackr.io/blog/applications-and-use-cases-of-blockchains

Основы программирования блокчейн

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

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

hash1 = Хеш ( 
вход1 ) hash2 = Хеш (вход2)

Здесь мы, по сути, пытаемся сказать следующее:

  • Легко вычислить hash1 из input1 и hash2 из input2.
  • Фактически невозможно вычислить input1 с учетом значения hash1. Аналогично для input2 и hash2.
  • Практически невозможно найти разные input1 и input2, такие, что hash1 = hash2.

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

Почему мы говорим о функции хеширования?

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

  • Хеш предыдущего блока.
  • Список транзакций.
  • Хеш сам по себе.

Возьмем пример. Рассмотрим следующий простой блок: [0, «X заплатил Y 100 долларов», 91b452].

Здесь, поскольку это первый блок цепочки блоков, хеш предыдущего блока равен 0. Список транзакций содержит только 1 транзакцию — X заплатил Y 100 долларов. Сам хеш вычисляется следующим образом:

hash_itself = Хеш (Список транзакций, Хеш предыдущего блока)

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

Такие блоки, в которых хэш предыдущего блока равен 0, называются блоками Generis. Блок Genesis — это, по сути, самый первый блок в цепочке блоков.

Теперь предположим, что мы хотим добавить еще несколько блоков в эту цепочку блоков. Пусть у нас есть block1 = [91b452, «Y заплатил 20 долларов Z, X заплатил 10 долларов P», 8ab32k].

Здесь 91b452 — это не что иное, как хеш предыдущего блока (блока Genesis). Есть 2 транзакции:

  • Y заплатил 20 долларов Z
  • X заплатил 10 долларов P

Наконец, у нас есть значение hash_itself, которое по сути является Hash («Y заплатил 20 долларов Z, X заплатил 10 долларов P», 91b452). Оказывается, это 8ab32k.

Пиктографически наша цепочка блоков выглядит следующим образом:

Итак, что же такого особенного в этой «структуре данных»?

Что ж, идея состоит в том, что если предположить, что кто-то искалечит блокчейн, скажем, изменив транзакцию в блоке Genesis — изменив «X заплатил 100 долларов на Y» на «Y заплатил 100 долларов на X», это изменит хэш-значение 91b452. В результате будет несоответствие в значении этого хэша в блоке 1 (помните, что первое значение каждого блока — это хеш-значение его родительского блока). В результате цепочка становится недействительной. Это эффективно действует для каждого блока в цепочке блоков, потому что, как только мы модифицируем блок, хэши всех последующих блоков становятся недействительными, и цепочка рушится. Таким образом, блокчейн обеспечивает высокий уровень безопасности данных.

Пример программного кода блокчейна

Из приведенного выше изображения Blockchain ясно, что мы можем закодировать его практически на любом языке программирования. Например, описанная выше концепция может быть реализована на C ++, Python, Java и даже на JavaScript. Давайте посмотрим на пример кода Python:

# Блок сохраняется как кортеж
# (parent_hash, транзакции, hash_itself)
def get_parent_hash ( блок ):
блок возврата [ 0 ]
def get_transactions ( блок ):
блок возврата [ 1 ]
def get_hash_itself ( блок ):
блок возврата [ 2 ]
# функция для создания блока в блокчейне
def create_block ( транзакции , parent_hash ):
hash_itself = hash (( транзакции , parent_hash ))
возврат ( parent_hash , транзакции , hash_itself )
# функция для создания блока генезиса
def create_genesis_block ( транзакции ):
вернуть create_block ( транзакции , 0 )
# создаем наш генезисный блок
genesis_block = create_genesis_block ( «X заплатил Y 100 долларов» )
# вывести хеш genesis_block
genesis_block_hash = get_hash_itself ( genesis_block )
напечатайте «genesis_block_hash:» , genesis_block_hash
# создать еще один блок
block1 = create_block ( «Y заплатил $ 20 до Z, Х заплатил $ 10 до Р» , genesis_block_hash )
# выводим хеш блока 1
block1_hash = get_hash_itself ( block1 )
напечатать «block1_hash:» , block1_hash

просмотр в сыром видеsnippet1.py размещен на ❤ на GitHub

А теперь предположим, что если бы мы искалечили genesis_block

genesis_block [ 1 ] = «Y заплатил 100 долларов X»
genesis_block_hash = get_hash_itself ( genesis_block )
напечатайте «genesis_block_hash:» , genesis_block_hash
напечатайте «block1_parent_hash:» , get_parent_hash ( block1 )

просмотр в сыром видеsnippet2.py размещено на ❤ на GitHub

Результат будет следующим:

genesis_block_hash : 3495953456182427352
block1_hash : — 554281952046316805
genesis_block_hash : 3220110016770526666
block1_parent_hash : 3495953456182427352

просмотр в сыром видеsnippet3.py размещено на ❤ на GitHub

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

Резюме

Думайте о блокчейне как о распределенной и защищенной структуре данных, которую можно использовать там, где нет посредников. Децентрализованная природа Blockchain — это то, что помогает в удалении посредников, и это исходит из указанной выше неизменности Blockchain. Это интересная структура данных, и, как мы все видели, криптовалюта является ее реальной реализацией. PS: Ищете руководства по блокчейну? Вот лучшие уроки по блокчейну, рекомендованные сообществом программистов .


Добавить комментарий