Блокчейн. Принципы и основы | страница 44





Возникает вопрос: а может ли участник системы при переводе средств сослаться на «входы», которые ему самому не принадлежат, и каким образом это можно проверить? На самом деле для того, чтобы легитимно сослаться на «входы», необходимо в ссылке указать свой открытый ключ и свою цифровую электронную подпись, сформированную на базе закрытого ключа, связанного с адресом владельца. При помощи алгоритмов проверки цифровой подписи любой участник системы может удостовериться в том, что ссылка на «входы» действительно легитимна. А в случае ошибки проверки данная транзакция просто игнорируется и не включается в блок тем узлом, который его формирует для сети.

Подобная система формирования транзакций и ведения балансов называется UTXO (Unspent Transaction Output – «непотраченные транзакционные выходы»). Как было указано выше, для расчета баланса, связанного с конкретным адресом в системе, необходимо найти и проверить все связанные с ним «входы» и «выходы» с самого начала базы блоков. Плюс этого метода в том, что не нужно отдельно хранить состояние балансов и постоянно их актуализировать, тем самым получая экономию свободного места на носителях. Минус – это время, которое постоянно затрачивается на расчет баланса, особенно если база блоков достаточно выросла в своих размерах. Поэтому ряд проектов все же хранит специальные базы «актуального состояния», где, в частности, находятся и данные о балансах адресов, которые можно быстро оттуда получить.

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

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