Блокчейн: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Отклонены последние 2 изменения (Julia-ish) восстановление для корректного объединения
Строка 1: Строка 1:
[[Файл:Хэш транзакций.png|right|300px|Схема получения хеша транзакций]]
#REDIRECT [[Blockchain#Блок транзакций]]
'''Блок транзакций''' — специальная структура для записи группы транзакций в системе [[Биткойн]] и аналогичных ей.

Чтобы транзакция считалась достоверной («подтверждённой»), её формат и подписи должны проверить и затем группу транзакций записать в специальную структуру — ''блок''. Информацию в блоках можно быстро перепроверить. Каждый блок всегда содержит информацию о предыдущем блоке. Все блоки можно выстроить в одну цепочку, которая содержит информацию о всех совершённых когда-либо операциях с биткойнами.

Блок состоит из заголовка и списка транзакций. Заголовок блока включает в себя свой хеш, хеш предыдущего блока, хеши транзакций и дополнительную служебную информацию. Первой транзакцией в блоке всегда записывается генерация новых биткойн-монет, которые в случае успешной генерации блока станут наградой пользователю за созданный блок. Далее идут все или некоторые из последних транзакций, которые ещё не были записаны в предыдущие блоки. Для транзакций в блоке используется [[TTH|древовидное хеширование]]<ref>[http://bitcoin.org/bitcoin.pdf «Bitcoin: Peer-To-Peer Electronic Cash System»]: 7. Reclaiming Disk Space</ref>, аналогичное формированию хеш-суммы для файла в [[BitTorrent (протокол)|протоколе BitTorrent]].

Созданный блок будет принят остальными пользователями, если числовое значение хеша заголовка равно или ниже определённого числа, величина которого периодически корректируется. Так как результат [[хеширование|хеширования]] (функции [[SHA-256]]) непредсказуем, нет алгоритма получения желаемого результата, кроме случайного перебора. Если хеш не удовлетворяет условию, то произвольно изменяется блок служебной информации в заголовке и хеш пересчитывается. Обычно требуется большое количество пересчётов. Когда вариант найден, узел рассылает полученный блок другим подключенным узлам, которые проверяют блок. Если ошибок нет, то блок считается добавленным в цепочку и следующий блок должен включить в себя его хеш.

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

=== Цепочка блоков ===
[[Файл:Blockchain.svg|thumb|right|125px|Основная последовательность блоков (чёрные) является самой длинной от начального (зелёный) до текущего. Побочные ветви (фиолетовые) отсекаются.]]

Блоки одновременно формируются множеством «майнеров». Удовлетворяющие критериям блоки отправляются в сеть, включаясь в распределённую базу блоков. Регулярно возникают ситуации, когда несколько новых блоков в разных частях распределённой сети называют предыдущим один и тот же блок, то есть цепочка блоков может ветвиться. Специально или случайно можно ограничить ретрансляцию информации о новых блоках (например, одна из цепочек может развиваться в рамках локальной сети). В этом случае возможно параллельное наращивание различных ветвей. В каждом из новых блоков могут встречаться как одинаковые транзакции, так и разные, вошедшие только в один из них. Когда ретрансляция блоков возобновляется, майнеры начинаю считать главной цепочку с учётом уровня сложности хеша и длины цепочки. При равенстве сложности и длины предпочтение отдаётся той цепочке, конечный блок которой появился раньше. Транзакции, вошедшие только в отвергнутую ветку (в том числе по выплате вознаграждения), теряют статус подтверждённых. Если это транзакция по передаче биткойнов, то она будет поставлена в очередь и затем включена в очередной блок. Транзакции получения вознаграждения за создание отсечённых блоков не дублируются в другой ветке, то есть «лишние» биткойны, выплаченные за формирование отсечённых блоков не получают дальнейших подтверждений и «утрачиваются».

Таким образом, цепочка блоков содержит историю владения, с которой можно ознакомиться, например, на специализированных сайтах<ref name="bbe">{{cite web|url=http://blockexplorer.com/|title=Bitcoin Block Explorer - сайт, позволяющий просматривать цепочку блоков|archiveurl=http://www.webcitation.org/69Ar6Dlbn|archivedate=2012-07-15}}</ref>.

База публично хранит в незашифрованном виде информацию о всех [[Транзакция (информатика)|транзакциях]], [[Электронная цифровая подпись|подписываемых]] с помощью [[Криптосистема с открытым ключом|асимметричного шифрования]]. Для предотвращения многократной траты одной и той же суммы используются метки времени<ref>Аннотация в [http://bitcoin.org/bitcoin.pdf «Bitcoin: Peer-To-Peer Electronic Cash System»]</ref>, реализованные путём разбиения БД на цепочку специальных блоков, каждый из которых, в числе прочего, содержит в себе [[Контрольная сумма|хеш]] предыдущего блока и свой порядковый номер. Каждый новый блок осуществляет подтверждение транзакций, информацию о которых содержит и дополнительное подтверждение транзакций во всех предыдущих блоках цепочки.

Для более наглядного объяснения механизма работы платёжной системы Сатоси Накамото ввёл понятие «цифровая монета»<ref>[http://bitcoin.org/bitcoin.pdf «Bitcoin: Peer-To-Peer Electronic Cash System»]: 2. Transactions</ref>, определив его как цепочку цифровых подписей. Исходя из данного определения, каждая монета имеет свой собственный номинал. Каждому биткойн-адресу может сопоставляться любое количество монет. При помощи транзакций монеты можно делить и объединять, при этом их суммарный номинал за вычетом комиссии сохраняется.

До версии 0.8.0 для хранения цепочки блоков основной клиент использовал [[Berkeley DB]], начиная с версии 0.8.0 разработчики перешли на {{iw|LevelDB}}<ref>{{cite web|url=http://www.linux.org.ru/news/opensource/8874093|title=Релиз Bitcoin 0.8.0 - OpenSource - Новости|accessdate=2013-02-22|archiveurl=http://www.webcitation.org/6F5D2jlmS|archivedate=2013-03-13}}</ref>.

=== Сложность ===
За требование к хешам блоков отвечает специальный параметр, называемый «сложность».
Так как вычислительные мощности сети непостоянны, этот параметр пересчитывается клиентами сети через каждые 2016 блоков таким образом, чтобы поддерживать среднюю скорость формирования распределённой БД на уровне 2016 блоков в две недели. Таким образом 1 блок должен создаваться примерно раз в десять минут. На практике, когда вычислительная мощность сети растёт — соответствующие временные промежутки короче, а когда снижается — длиннее<ref>[http://bitcoin.sipa.be/ Графики изменения сложности сети Bitcoin]</ref>.
Перерасчёт сложности с привязкой ко времени возможен благодаря наличию в заголовках блоков времени их создания. Оно записано в [[UNIX-время|Unix-формате]] и взято по системным часам автора блока (если блок создан в пуле, то из системных часов сервера этого пула)<ref>http://blockexplorer.com/rawblock/0000000000000079d4636e1ed808c4f4b1b0f512ac74b4659e67b5f2a402c9ab</ref>.

== Примечания ==
{{примечания}}

{{Криптовалюты}}

[[Категория:Криптовалюты]]

Версия от 15:19, 5 декабря 2015

Схема получения хеша транзакций
Схема получения хеша транзакций

Блок транзакций — специальная структура для записи группы транзакций в системе Биткойн и аналогичных ей.

Чтобы транзакция считалась достоверной («подтверждённой»), её формат и подписи должны проверить и затем группу транзакций записать в специальную структуру — блок. Информацию в блоках можно быстро перепроверить. Каждый блок всегда содержит информацию о предыдущем блоке. Все блоки можно выстроить в одну цепочку, которая содержит информацию о всех совершённых когда-либо операциях с биткойнами.

Блок состоит из заголовка и списка транзакций. Заголовок блока включает в себя свой хеш, хеш предыдущего блока, хеши транзакций и дополнительную служебную информацию. Первой транзакцией в блоке всегда записывается генерация новых биткойн-монет, которые в случае успешной генерации блока станут наградой пользователю за созданный блок. Далее идут все или некоторые из последних транзакций, которые ещё не были записаны в предыдущие блоки. Для транзакций в блоке используется древовидное хеширование[1], аналогичное формированию хеш-суммы для файла в протоколе BitTorrent.

Созданный блок будет принят остальными пользователями, если числовое значение хеша заголовка равно или ниже определённого числа, величина которого периодически корректируется. Так как результат хеширования (функции SHA-256) непредсказуем, нет алгоритма получения желаемого результата, кроме случайного перебора. Если хеш не удовлетворяет условию, то произвольно изменяется блок служебной информации в заголовке и хеш пересчитывается. Обычно требуется большое количество пересчётов. Когда вариант найден, узел рассылает полученный блок другим подключенным узлам, которые проверяют блок. Если ошибок нет, то блок считается добавленным в цепочку и следующий блок должен включить в себя его хеш.

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

Цепочка блоков

Основная последовательность блоков (чёрные) является самой длинной от начального (зелёный) до текущего. Побочные ветви (фиолетовые) отсекаются.

Блоки одновременно формируются множеством «майнеров». Удовлетворяющие критериям блоки отправляются в сеть, включаясь в распределённую базу блоков. Регулярно возникают ситуации, когда несколько новых блоков в разных частях распределённой сети называют предыдущим один и тот же блок, то есть цепочка блоков может ветвиться. Специально или случайно можно ограничить ретрансляцию информации о новых блоках (например, одна из цепочек может развиваться в рамках локальной сети). В этом случае возможно параллельное наращивание различных ветвей. В каждом из новых блоков могут встречаться как одинаковые транзакции, так и разные, вошедшие только в один из них. Когда ретрансляция блоков возобновляется, майнеры начинаю считать главной цепочку с учётом уровня сложности хеша и длины цепочки. При равенстве сложности и длины предпочтение отдаётся той цепочке, конечный блок которой появился раньше. Транзакции, вошедшие только в отвергнутую ветку (в том числе по выплате вознаграждения), теряют статус подтверждённых. Если это транзакция по передаче биткойнов, то она будет поставлена в очередь и затем включена в очередной блок. Транзакции получения вознаграждения за создание отсечённых блоков не дублируются в другой ветке, то есть «лишние» биткойны, выплаченные за формирование отсечённых блоков не получают дальнейших подтверждений и «утрачиваются».

Таким образом, цепочка блоков содержит историю владения, с которой можно ознакомиться, например, на специализированных сайтах[2].

База публично хранит в незашифрованном виде информацию о всех транзакциях, подписываемых с помощью асимметричного шифрования. Для предотвращения многократной траты одной и той же суммы используются метки времени[3], реализованные путём разбиения БД на цепочку специальных блоков, каждый из которых, в числе прочего, содержит в себе хеш предыдущего блока и свой порядковый номер. Каждый новый блок осуществляет подтверждение транзакций, информацию о которых содержит и дополнительное подтверждение транзакций во всех предыдущих блоках цепочки.

Для более наглядного объяснения механизма работы платёжной системы Сатоси Накамото ввёл понятие «цифровая монета»[4], определив его как цепочку цифровых подписей. Исходя из данного определения, каждая монета имеет свой собственный номинал. Каждому биткойн-адресу может сопоставляться любое количество монет. При помощи транзакций монеты можно делить и объединять, при этом их суммарный номинал за вычетом комиссии сохраняется.

До версии 0.8.0 для хранения цепочки блоков основной клиент использовал Berkeley DB, начиная с версии 0.8.0 разработчики перешли на LevelDB[англ.][5].

Сложность

За требование к хешам блоков отвечает специальный параметр, называемый «сложность». Так как вычислительные мощности сети непостоянны, этот параметр пересчитывается клиентами сети через каждые 2016 блоков таким образом, чтобы поддерживать среднюю скорость формирования распределённой БД на уровне 2016 блоков в две недели. Таким образом 1 блок должен создаваться примерно раз в десять минут. На практике, когда вычислительная мощность сети растёт — соответствующие временные промежутки короче, а когда снижается — длиннее[6]. Перерасчёт сложности с привязкой ко времени возможен благодаря наличию в заголовках блоков времени их создания. Оно записано в Unix-формате и взято по системным часам автора блока (если блок создан в пуле, то из системных часов сервера этого пула)[7].

Примечания