Как работает блокчейн

Завершено

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

Как распределяются данные?

В нашем сценарии участвует несколько компаний. У нас может быть централизованная база данных в компании по переработке молока. Однако ни один участник не хочет быть центральным органом управления. Мы можем использовать распределенный реестр блокчейна. Использование блокчейна устраняет необходимость в центральном управлении. Кроме того, каждый участник с узлом блокчейна получает копию реестра и, следовательно, имеет возможность выполнять собственный аудит и интеграцию со своими системами. Но каждой компании не обязательно иметь собственный узел. Узлы могут совместно использоваться участниками.

Каждый узел подключен к другим узлам с помощью блокчейн-сети. Например, ферма Далиа Пелайо, завод по производству мороженого и магазины мороженого имеют каждый свой управляемый ими узел. Contoso West и Contoso East являются отдельными партнерами, которые имеют одну и ту же материнскую компанию. У Contoso есть один узел. Между узлами и компаниями не обязательно существует отношение "один к одному".

Several participant blockchain nodes connected by a network.

Изменение состояния

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

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

Example transaction from an IoT temperature sensor. The transaction sets the temperature to -2° celsius in the ledger.

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

List of transactions in order that change the responsible party and temperature. The combination of transactions result in a ledger state based on the order of transaction changes.

Отправляя транзакцию, вы отправляете ее на узел транзакции блокчейна. Предположим, что ферма Далиа Пелайо отправляет молоко с помощью компании Contoso West Shipping. Система управления поставками фермы Далиа Пелайо отправляет транзакцию в свой узел блокчейна. Транзакция изменяет ответственность за перевозку с фермы на Contoso West Shipping.

A transaction from the farmer being sent to the farmer's blockchain node.

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

A transaction being copied to all participant blockchain node peers.

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

Как мы можем доверять данным в реестре?

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

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

Consensus mechanism agrees on validated transactions across nodes. Each blockchain node writes the latest validated block to the blockchain.

Существует несколько алгоритмов консенсуса блокчейна, включая подтверждение выполнения работы, подтверждение доли владения и подтверждение полномочий. Каждый алгоритм обеспечивает согласованность различными способами. Говоря простым языком, консенсус предоставляет распределенному реестру возможность прийти к общему состоянию.

Что такое блок?

Блок — это кластер данных в блокчейне, в котором хранятся сведения о транзакциях. Количество транзакций в блоке обычно зависит от времени. Например, на рисунке показан блок, содержащий транзакции за последние 10 минут.

Example of several transactions representing a block. The order of transactions result in a given state.

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

Как можно быть уверенным в неизменности данных в реестре?

Вы можете подумать, что при наличии контроля над книгой в узле можно просто изменить данные в копии. Как реестр может оставаться неизменным?

Блокчейн использует криптографический хэш для создания связи между блоками. При связывании блоков порядок транзакций можно согласовать с помощью алгоритма консенсуса. Криптографический хэш представляет собой алгоритм, который сопоставляет данные произвольного размера с небольшим представлением фиксированного размера. Его можно рассматривать как цифровой отпечаток. В Bitcoin используется алгоритм хеширования SHA-256. Если вы используете хэш-функцию SHA-256 на 100 странице документа, выходные данные функции — это 256-разрядное хэш-значение. Если изменить только один символ в документе и повторно создать хэш, выходные данные отличаются от 256-разрядного хэша. Теперь представьте, что мы используем блок в качестве входных данных для хэш-функции. Выходные данные представляют собой уникальное хэш-значение для данных в блоке.

A block is sent through a hash function and a cryptographic hash is generated.

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

A block includes the previous block's hash when generating it's hash. Including the previous hash links the blocks together.

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

Three blocks linked together by the previous block's hash

Если в цепочке изменяется какой-либо блок, хэш более поздних блоков будет отличаться. В результате проверка обнаруживает расхождение.

Доверенная логика

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

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

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

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

Components of a smart contract include address, logic, and data.

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

A smart contract transaction is sent to one node and copied to the other peer nodes.

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

A smart contract transaction executes logic to set the shipment to out of compliance due to the temperature. The transaction is copied and executed on other peer nodes.

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

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