Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Реферат.docx
Скачиваний:
112
Добавлен:
28.06.2021
Размер:
34.5 Кб
Скачать
  1. Принцип работы технологии блокчейн

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

Альтернатива была предложена в виде математического алгоритма, который не требовал бы посредников в лице государства, банков или других третьих лиц. Он также не требовал комиссию за транзакцию, работал анонимно и демократично. Данная технология получила название блокчейн (цепочка блоков). Основные идеи данной технологии:

  1. Использование цифровой подписи для подтверждения транзакций

  2. Использование цепочки блоков

  3. Доверие на основе доказательства совершенной работы

  4. Децентрализация

Далее будет рассмотрено, как основные идеи реализуются на практике.

    1. Транзакции

Транзакция – это передача некоего числа биткоинов от одного пользователя другому, которая транслируется в сеть и объединяется в блоки. В общем случае формат транзакции биткоинов выглядит следующим образом:

Таблица 1 – Формат транзакции биткоинов

Поле

Описание

Длина

№ версии

В данный момент 1

4 байта

Счетчик входов

Положительное целое VI=VarInt

1-9 байтов

Список входов

Первый вход также называется базой коинов

Число счетчика входов

Список выходов

Положительное целое VI=VarInt

1-9 байтов

Список выходов

Число счетчика выходов

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

Input:

Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6

Index: 0

scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10

90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

Output:

Value: 5000000000

scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d

OP_EQUALVERIFY OP_CHECKSIG

В данной транзакции происходит перевод 50 BTC от выхода 0 транзакции, обозначенной под Previous tx, на биткоин адрес, обозначенный под scriptPubKey. Когда получатель захочет расплатиться полученными деньгами, то он будет ссылаться на выход 0 данной транзакции для входа своей собственной. У транзакции часто бывает несколько входов. Это обусловлено тем, что деньги списываются не с общего счета пользователя, а берутся из выходов предыдущих транзакций, в которых пользователь их получал. Таким образом, если пользователь хочет отправить 50 BTC, а в предыдущих транзакциях ему перевели 2 раза по 25 BTC, то во входе будет 2 ссылки на выходы данных транзакций. Поле scriptSig в части входа и scriptPubKey в соответствующей части выхода являются составляющими «скрипта». Скрипт нужен для того, чтобы подтвердить, что транзакция была создана реальным владельцем денежных средств. Поле scriptSig состоит из подписи и биткоин адреса отправителя, что также является его публичным ключом. Если зашифровать сообщение, публичный ключ отправителя и публичный ключ получателя приватным ключом отправителя, топ получится подпись входа. Расшифровать и подтвердить ее можно публичным ключом отправителя. В части выхода в поле Value указано, сколько биткоинов необходимо перевести пользователю на адрес, указанный в поле scriptPubKey. Сумма указывается в «Сатоши», где 108 Сатоши = 1 BTC. Каждый выход транзакции может быть использован в качестве входа только 1 раз, поэтому сумма всех входов для текущей транзакции должна быть использована на ее выходах. В противном случае, оставшаяся сумма будет отправлена обратно отправителю в виде «сдачи» или использована в качестве комиссии транзакции, которая достанется тому, что сгенерирует блок.

    1. Блоки

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

Таблица 2 – Строение блока

Поле

Описание

Размер

Magic no.

Значение всегда равно 0хD4BEF9

4 байта

Размер блока

Число предыдущих байтов, оставшихся до конца блока

4 байта

Заголовок блока

Состоит из 6 компонентов

80 байтов

Счетчик транзакций

Положительное целое число

1-9 байтов

Транзакции

Список транзакций

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

Таблица 3 – Строение заголовка блока

Поле

Описание

Версия

Номер версии блока

hashPrevBlock

256-битовый хэш заголовка предыдущего блока

hashMerkleRoot

256-битовый хэш на основе всех транзакций в блоке

Time

Время в UTC

Bits

Сложность поиска хэша

Nonce

32-битное число (начиная с 0)

В заголовке блока заложены 2 основные идеи системы блокчейн – связанность блоков и доказательство совершенной работы. В поле hashPrevBlock содержится хэш заголовка предыдущего блока, что дает возможность отследить последовательность блоков, связав их в цепь. Копия данных цепи хранится на компьютере каждого пользователя, что обеспечивает децентрализованность системы. Для того, чтобы вычислить хэш блока, необходимо собрать всю информацию в заголовке блока и закодировать ее при помощи алгоритма SHA256 дважды. Однако, хэш, который необходимо получить, должен следовать определенному правилу – иметь заданное количество нулей в n старших разрядах. Для этого введено поле nonce. Nonce – это число от 0 до 232, подбирая которое необходимо добиться получения хэша с заданным условием. Алгоритм SHA256 хэширует сообщение, декодировать которое можно лишь перебором различных вариантов исходного сообщения. Соответственно, для того, чтобы подобрать такое значение nonce, чтобы заголовок, дважды прошедший через алгоритм SHA256, соответствовал заданному условию, необходима большая вычислительная мощность. Процесс поиска данного числа называется майнингом, потому что требует большого количества однообразных вычислений. Сложность поиска корректируется таким образом, чтобы один блок формировался примерно каждые 10 минут. Такая система обеспечивает защиту от мошенничества. Если злоумышленник захочет изменить какую-либо транзакцию в каком-либо из блоков, то ему необходимо будет вычислять хэш данного блока и всех последующих. При трансляции поддельного блока остальным пользователям произойдет конфликт, который необходимо будет разрешить. Создастся новая ветвь блоков, в которой мошенник будет создавать поддельные блоки. Однако, так как для этого необходима высокая вычислительная мощность, то со временем остальные майнеры с их объединенной вычислительной мощностью найдут правильную последовательность быстрее, чем злоумышленник. Это означает, что решение, доверять ли новой создавшейся ветви в блокчейне, нужно принимать не сразу, а только после того, как она станет длиннее, чем другая. В этом заключается основная идея доказательства совершенной работы – те, кто вкладывает больше вычислительных ресурсов, те и имеют главенствующее положение.

Пользователь, нашедший нужный хэш заголовка, формирует блок, рассылает его остальным участникам сети, котороые его подтверждают, и получает награду в виде биткоинов. Изначально награда равнялась 50 BTC, однако, в соответствии с правилом, установленным Сатоши Накамото, данная награда снижается в 2 раза каждые 210000 блоков. Это означает, что максимально возможное число биткоинов в системе равно 21000000 BTC. На момент 2020 года награда за создание блока равна 12.5 BTC.