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

  • 29 апреля, 14:00
  • 972
  • 0

Что такое технология блокчейн?

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

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

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

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

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

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

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

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

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

hash1 = Hash(input1)
hash2 = Hash(input2)

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Y заплатил 20 долларов - это Z
  2. 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:



# A block is stored as a tuple of

# (parent_hash, transactions, hash_itself)



def get_parent_hash(block):

    return block[0]





def get_transactions(block):

    return block[1]





def get_hash_itself(block):

    return block[2]



# function to create a block in a blockchain

def create_block(transactions, parent_hash):

    hash_itself = hash((transactions, parent_hash))

    return (parent_hash, transactions, hash_itself)





# function to create the genesis block

def create_genesis_block(transactions):

    return create_block(transactions, 0)





# we create our genesis block

genesis_block = create_genesis_block("X paid $100 to Y")



# print the hash of the genesis_block

genesis_block_hash = get_hash_itself(genesis_block)

print "genesis_block_hash:", genesis_block_hash



# create another block

block1 = create_block("Y paid $20 to Z, X paid $10 to P", genesis_block_hash)



# print the hash of block1

block1_hash = get_hash_itself(block1)

print "block1_hash:", block1_hash


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



genesis_block[1] = "Y paid $100 to X"

genesis_block_hash = get_hash_itself(genesis_block)



print "genesis_block_hash:", genesis_block_hash

print "block1_parent_hash:", get_parent_hash(block1)


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


genesis_block_hash: 3495953456182427352

block1_hash: -554281952046316805

genesis_block_hash: 3220110016770526666

block1_parent_hash: 3495953456182427352


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

Резюме

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



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

IT Новости

Смотреть все