Введение в технологию Блокчейн - страница 44

Шрифт
Интервал


Найти выход транзакции легко, так как мы используем хэш указатели.

Чтобы убедиться, что этот выход не был потрачен, нам нужно отсканировать цепочку блоков между указанной транзакцией и последним блоком.

Нам не нужно проходить весь путь назад к началу цепочки блоков, и это не требует хранения каких-либо дополнительных структур данных, хотя, как мы увидим, дополнительные структуры данных ускорят работу.

Так как транзакции могут иметь много входов и много выходов, разделять и объединять значения легко.

Например, Боб получил деньги в двух разных транзакциях – 17 биткойнов в одной и 2 биткойна в другой.

Боб может сказать, что хотел бы иметь одну транзакцию, которую он может потратить позже, где у него будут все 19 биткойнов.

Сделать это легко – он создает транзакцию с двумя входами и одним выходом, причем выходной адрес принадлежит ему.

Это позволяет ему консолидировать эти две транзакции.

Также, легко сделать и совместные платежи.

Предположим, Кэрол и Боб оба хотят заплатить Дэвиду.

Они могут создать транзакцию с двумя входами, которые принадлежат разным людям, и одним выходом.

И единственное отличие от предыдущего примера состоит в том, что, поскольку два выхода из предыдущих транзакций, которые здесь заявляются, относятся к разным адресам, для новой транзакции потребуется две отдельные подписи: одна – Кэрол, а другая – Боба.

Концептуально это все, что связано с транзакцией биткойнов.

Теперь посмотрим, как она представлена на низком уровне в биткойне.



В конечном счете, каждая структура данных, которая отправляется в сеть, представляет собой строку бит.

То, что здесь показано, является низкоуровневым форматом, но далее это дополнительно компилируется до компактного двоичного формата, который не читается человеком.

Как вы можете видеть в этом примере, транзакция делится на три части: некоторые метаданные, серия входов и серия выходов.

Что качается метаданных, здесь есть некоторая информация о самой транзакции – размер транзакции, количество входов и количества выходов.

Также здесь указан хэш всей транзакции, который служит уникальным идентификатором транзакции.

Это позволяет нам использовать хеш-указатели для ссылок на транзакции.

Наконец, есть поле «lock_time», к которому мы вернемся позже.

Теперь о входах.

Входы транзакций образуют массив, и каждый вход имеет один и тот же формат.