Эта статья входит в число добротных статей

Блокчейн

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Greshnev (обсуждение | вклад) в 15:25, 18 сентября 2017 (Блок транзакций: пунктуация). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
Схема получения хеша транзакций

Блокче́йн (англ. blockchain или block chain[1]) — выстроенная по определённым правилам непрерывная последовательная цепочка блоков, содержащих информацию.

Общие сведения

Впервые термин появился как название распределённой базы данных, реализованной в системе «Биткойн», из-за чего блокчейн часто относят к транзакциям в различных криптовалютах, однако технология цепочек блоков может быть распространена на любые взаимосвязанные информационные блоки.

Блок транзакций

Блок транзакций — специальная структура для записи группы транзакций в системе Биткойн и аналогичных ей[2]. Транзакция считается завершённой и достоверной («подтверждённой»), когда проверены её формат и подписи, и когда сама транзакция объединена в группу с несколькими другими и записана в специальную структуру — блок. Содержимое блоков может быть проверено, так как каждый блок содержит информацию о предыдущем блоке. Все блоки выстроены в одну цепочку, которая содержит информацию обо всех совершённых когда-либо операциях в базе. Самый первый блок в цепочке — первичный блок (англ. genesis block) — рассматривается как отдельный случай, так как у него отсутствует родительский блок[3].

Блок состоит из заголовка и списка транзакций. Заголовок блока включает в себя свой хеш, хеш предыдущего блока, хеши транзакций и дополнительную служебную информацию. В системе Биткойн первой транзакцией в блоке всегда указывается получение комиссии, которая станет наградой пользователю за созданный блок[2]. Далее идёт список транзакций, сформированный из очереди транзакций, ещё не записанных в предыдущие блоки. Критерий отбора из очереди задаёт майнер самостоятельно. Это не обязательно должна быть хронология по времени. Например, могут включаться только операции с высокой комиссией или с участием заданного списка адресов. Для транзакций в блоке используется древовидное хеширование[4], аналогичное формированию хеш-суммы для файла в протоколе BitTorrent. Транзакции, кроме начисления комиссии за создание блока, содержат внутри параметра input ссылку на транзакцию с предыдущим состоянием данных (в системе Биткойн, например, даётся ссылка на ту транзакцию, по которой были получены расходуемые биткойны). Операции по передаче майнеру комиссии за создание блока не имеют «входных» транзакций, поэтому в данном параметре может указываться любая информация (для них это поле носит название англ. Coinbase parameter).

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

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

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

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

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

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

Распределенная база данных Blockchain формируется как непрерывно растущая цепочка блоков с записями обо всех транзакциях. Копии базы или её части одновременно хранятся на множестве компьютеров и синхронизируются согласно формальным правилам построения цепочки блоков. Информация в блоках не шифрована и доступна в открытом виде, но отсутствие изменений удостоверяется криптографически через хэш-цепочки[7] (элемент цифровой подписи).

База публично хранит в незашифрованном виде информацию о всех транзакциях, подписываемых с помощью асимметричного шифрования. Для предотвращения многократной траты одной и той же суммы используются метки времени[8], реализованные путём разбиения БД на цепочку специальных блоков, каждый из которых, в числе прочего, содержит в себе хеш предыдущего блока и свой порядковый номер. Каждый новый блок осуществляет подтверждение транзакций, информацию о которых содержит и дополнительное подтверждение транзакций во всех предыдущих блоках цепочки. Изменять информацию в блоке, который уже находится в цепи, не практично, так как в таком случае пришлось бы редактировать информацию во всех последующих блоках. Благодаря этому успешная double-spending атака (повторная трата ранее израсходованных средств) на практике крайне маловероятна[9].

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

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

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

Подтверждение транзакций

Пока транзакция не включена в блок, система считает, что количество биткойнов на некоем адресе остаётся неизменным. В это время есть техническая возможность оформить несколько разных транзакций по передаче с одного адреса одних и тех же биткойнов разным получателям[11]. Но как только одна из подобных транзакций будет включена в блок, остальные транзакции с этими же биткойнами система будет уже игнорировать. Например, если в блок будет включена более поздняя транзакция, то более ранняя будет считаться ошибочной. Есть небольшая вероятность, что при ветвлении две подобные транзакции попадут в блоки разных ветвей. Каждая из них будет считаться правильной, лишь при отмирании ветви одна из транзакций станет считаться ошибочной. При этом не будет иметь значения время совершения операции.

Таким образом, попадание транзакции в блок является подтверждением её достоверности вне зависимости от наличия других транзакций с теми же биткойнами. Каждый новый блок считается дополнительным «подтверждением» транзакций из предыдущих блоков. Если в цепочке 3 блока, то транзакции из последнего блока будут подтверждены 1 раз, а помещённые в первый блок будут иметь 3 подтверждения. Достаточно дождаться нескольких подтверждений, чтобы свести вероятность отмены транзакции к минимуму.

Для уменьшения влияния подобных ситуаций на сеть существуют ограничения на распоряжение только что полученными биткойнами. Согласно сервису blockchain.info, до мая 2015 года максимальная длина отвергнутых цепочек была 5 блоков[12]. Необходимое число подтверждений для разблокирования полученного зависит от программы-клиента либо от указаний принимающей стороны. Клиент «Bitcoin-qt» для отправки не требует наличия подтверждений, но у большинства получателей по умолчанию выставлено требование 6 подтверждений, то есть реально воспользоваться полученным обычно можно через час. Различные онлайн-сервисы часто устанавливают свой порог подтверждений.

Биткойны, полученные за создание блока, протокол разрешает использовать после 100 подтверждений[13], но стандартная программа-клиент показывает комиссию через 120 подтверждений, то есть обычно воспользоваться комиссией можно примерно через 20 часов после её начисления.

«Двойное расходование»

Если контролировать более 50 % суммарной вычислительной мощности сети, то существует теоретическая возможность при любом пороге подтверждений одни и те же биткойны передать два раза разным получателям[14] — одна из транзакций будет публичной и подтверждаться в общем порядке, а вторая не будет афишироваться, её подтверждения будут происходить блоками скрытой параллельной ветви. Лишь через некоторое время сеть получит сведения о второй транзакции, она станет подтверждённой, а первая утратит подтверждения и будет игнорироваться. В результате не произойдёт удвоения биткойнов[15], но изменится их текущий владелец, при этом первый получатель утратит биткойны без каких-либо компенсаций.

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

На 1 декабря 2013 года суммарная мощность сети превысила 6000 THash/s[16]. С начала 2014 года объединение майнеров (пул) Ghash.io длительное время контролирует свыше 40 % суммарной мощности сети «Биткойн», а в начале июня 2014 года в нём кратковременно концентрировалось более 50 % мощности сети[17].

Двойное расходование биткойнов на практике никогда не было зафиксировано. На май 2015 года параллельные цепочки никогда не превышали 5 блоков[12].

Сложность

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

Применение

На технологии блокчейн основаны криптовалюты, в частности, биткойн и лайткойн, база данных DNS-записей Namecoin и Emercoin.

В 2014 году основана компания Bitnation, предоставляющая услуги традиционного государства, такие как удостоверение личности, нотариат и ряд других[20][21].

В июне 2016 года Шведский земельный реестр сообщил, что организация тестирует эту технологию с тем, чтобы перевести на её основу базу данных земельных участков в Швеции[22].

Критика

Международная межбанковская система передачи информации и финансовых транзакций SWIFT заявила об опасности нереалистичных ожиданий в отношении ажиотажа вокруг технологий цепочки блоков и распределённых реестров в банковской среде[23][24].

Россия

Пока российские власти ещё окончательно не определились, как относиться к существующим в данный момент криптовалютам[25].

Глава «Сбербанка» Герман Греф подверг критике ограничительную политику российского правительства в отношении блокчейн-технологий:

Технология blockchain на мой взгляд, — это новый интернет. Это идея такого же уровня, как интернет. И она не успела ещё родиться, как наш центробанк сказал, что криптовалюты нельзя выпускать. Потом они сказали, что их нельзя ещё покупать, а теперь они говорят, что тех, кто попытается их купить, могут посадить в тюрьму. Мы понимаем, что весь прогресс в этом случае уйдёт за пределы России, все наши специалисты в области blockchain будут вынуждены работать в более удобных юрисдикциях[26].

Зампред ЦБ Ольга Скоробогатова в ходе ПМЭФ-2017 заявила:

До виртуальной национальной валюты мы точно дойдем, мы над этим уже начали работать[25].

В 2017 году в Новгородской области планировалась работа по запуску пилотного проекта по внедрению технологии блокчейн в работу Росреестра. В проекте должны были участвовать Внешэкономбанк и Агентство по ипотечному жилищному кредитованию[27].

См. также

Ссылки

Примечания

  1. Satoshi, 2008, с. 2-3.
  2. 1 2 3 Satoshi, 2008, с. 3.
  3. Genesis Block, Block 0 (англ.). Дата обращения: 21 декабря 2015.
  4. 1 2 Satoshi, 2008, с. 4.
  5. Finding 2016 Blocks (англ.). Дата обращения: 21 декабря 2015.
  6. Bitcoin Block Explorer - сайт, позволяющий просматривать цепочку блоков (англ.). Дата обращения: 21 декабря 2015. Архивировано 15 июля 2012 года.
  7. Satoshi, 2008, с. 5.
  8. 1 2 Satoshi, 2008, с. 2.
  9. Joshua Kopstein (12 December 2013). "The Mission to Decentralize the Internet". The New Yorker. Дата обращения: 30 декабря 2014. The network's „nodes"—users running the bitcoin software on their computers—collectively check the integrity of other nodes to ensure that no one spends the same coins twice. All transactions are published on a shared public ledger, called the „block chain"
  10. Релиз Bitcoin 0.8.0 - OpenSource - Новости. Дата обращения: 22 февраля 2013. Архивировано 13 марта 2013 года.
  11. Bitcoin is under attack (англ.). Дата обращения: 21 декабря 2015.
  12. 1 2 Число брошенных блоков (англ.). Дата обращения: 21 декабря 2015.
  13. Bitcoin Developer Examples (англ.). Дата обращения: 21 декабря 2015.
  14. Статья о вероятности Double Spending атаки (англ.). Архивировано 21 мая 2013 года.
  15. Satoshi, 2008, с. 6-8.
  16. Bitcoin Charts (англ.). Дата обращения: 21 декабря 2015.
  17. Bitcoin security guarantee shattered by anonymous miner with 51 % network power (англ.). Дата обращения: 21 декабря 2015.
  18. Графики изменения сложности сети Bitcoin (англ.). Дата обращения: 21 декабря 2015.
  19. Bitcoin hash (англ.). Дата обращения: 21 декабря 2015.
  20. Interview: Bitcoin Pioneer Susanne Tarkowski Tempelhof on Bitnation and M+.
  21. D printing, counterfeit pharma and crypto CCTV highlighted at Digital Catapult Blockchain Pitchoff.
  22. Sweden tests blockchain technology for land registry
  23. The Impact and Potential of Blockchain on Securities Transaction Lifecycle | The SWIFT Institute
  24. В SWIFT заявили об опасности нереалистичных ожиданий в отношении блокчейна | ForkLog
  25. 1 2 Российская "виртуальная валюта" будет принципиально отличаться от биткоина. vz.ru. Дата обращения: 2 июня 2017.
  26. Герман Греф «России требуется новая система управления»
  27. "Росреестр в сентябре запустит пилотный проект на основе блокчейна в Новгородской области". ТАСС. Дата обращения: 15 сентября 2017.

Литература

Книги
  • Melanie Swan. Blockchain: Blueprint for a New Economy. — O'Reilly Media, Inc., 2015. — 152 p. — ISBN 978-1-4919-2047-3. В русском переводе Мелани Свон. Блокчейн: Схема новой экономики. — Олимп-Бизнес, 2016. — 240 с. ISBN 978-5-9693-0360-7
  • Pedro Franco. The Blockchain // Understanding Bitcoin: Cryptography, Engineering and Economics. — John Wiley & Sons, 2014. — 288 p. — ISBN 978-1-119-01916-9.
  • Andreas M. Antonopoulos. 7. The Blockchain // Mastering Bitcoin. — O'Reilly Media, Inc., 2014. — ISBN 978-1-4493-7404-4.
Статьи