ЧТО ТАКОЕ БЛОКЧЕЙН

Технология криптовалют исходит из того, что в сети нет доверенного узла — того, чьи действия гарантированно истинны и кто может подтвердить корректность чужих операций. Для принятия решения о достоверности транзакций в условиях неверия любому сообщению в сети (задача византийских генералов) используется технология блокчейн, впервые появившаяся в системе «Биткойн». Для хранения данных транзакции объединяются в блоки, из которых формируется непрерывная цепочка. Непрерывность обеспечивается не столько нумерацией, сколько включением в текущий блок хеш-суммы предыдущего блока — таким образом нет возможности изменить блок без изменения хешей во всех последующих блоках. Истинной считается только самая длинная цепочка, все хеши в которой отвечают определённым требованиям, выполнить которые сложно либо дорого. В разных криптовалютах для верификации блоков применяются методы Proof-of-work[комм. 1], Proof-of-stake[комм. 2] или их комбинация.

Как правило, в криптовалютах разработчики изначально оговаривают верхний предел общего объёма эмиссии[14][9][15]. Однако у некоторых криптовалют, таких как PPCoin (англ.)русск.[16], Novacoin, Sifcoin и других, отсутствует фиксированный верхний предел общего объёма эмиссии и возможна как эмиссия, так и демиссия (путём обязательного уничтожения фиксированной суммы в каждой транзакции).

Большинство криптовалют обеспечивают псевдонимность — все транзакции между всеми адресами (кошельками) общедоступны, но нет данных о владельцах адресов. Однако личность владельца может быть установлена, если становится известна необходимая дополнительная информация. В концепте ZeroCash изложена возможность заменить псевдонимность на анонимность

БЛОК ТРАНЗАКЦИЙ

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

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

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

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

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

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

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

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

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