Тимур Машнин - Введение в технологию Блокчейн
- Название:Введение в технологию Блокчейн
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:2021
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Тимур Машнин - Введение в технологию Блокчейн краткое содержание
Введение в технологию Блокчейн - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Но это потребует большого количества дополнительного обслуживания, кроме обслуживания самой книги.
Поэтому Bitcoin не использует модель на основе учетной записи.
Вместо этого Bitcoin использует книгу, которая просто отслеживает транзакции, подобные ScroogeCoin.

Транзакции указывают количество входов и количество выходов.
Вы можете думать о входах как о монетах, которые потребляются и которые были созданы в предыдущей транзакции, и о выходах как о создаваемых монет.
Для транзакций, в которых создаются совершенно новые монеты, нет монет, которые потребляются.
Каждая транзакция имеет уникальный идентификатор.
Выходы индексируются, начиная с 0.
В этом примере, первая транзакция не имеет входа, потому что эта транзакция создает новые монеты, и у нее есть выход из 25 монет, отправляемых Алисе.
Кроме того, поскольку это транзакция, в которой создаются новые монеты, здесь подпись не требуется.
Теперь предположим, что Алиса хочет отправить некоторые из этих монет Бобу.
Для этого она создает новую транзакцию, вторую транзакцию в нашем примере.
В транзакции она должна явно ссылаться на предыдущую транзакцию, в которой эти монеты поступили к ней.
Здесь она ссылается на выход 0 транзакции 1 (единственный выход транзакции 1), который присвоил Алисе 25 битконов.
Она также должна указать выходные адреса в этой транзакции.
В этом примере Алиса указывает два выхода, 17 монет Бобу и 8 монет Алисе.
И, конечно же, эта транзакция подписывается Алисой, так что мы знаем, что Алиса разрешает эту транзакцию.
Почему Алиса должна отправить деньги самой себе в этом примере?
Так как монеты являются неизменяемыми, в биткойне весь вывод транзакции должен потребляться другой транзакцией.
То есть транзакция должна быть самодостаточной, чтобы не калькулировать балансы.
Алиса хочет заплатить Бобу только 17 биткойнов, но выход, который у нее есть, стоит 25 биткойнов.
Поэтому ей нужно создать еще один выход, где 8 биткойнов отправляются обратно ей.
Это может отличаться от адреса, которому принадлежат 25 биткойнов, но он должен принадлежать ей. Это называется изменение адреса или change address.
Когда новая транзакция добавляется в реестр, как можно легко проверить, что она является валидной?
В нашем примере нам нужно найти выход транзакции, на который ссылается Алиса, и убедиться, что он имеет значение 25 биткойнов и что он еще не был потрачен.
Найти выход транзакции легко, так как мы используем хэш указатели.
Чтобы убедиться, что этот выход не был потрачен, нам нужно отсканировать цепочку блоков между указанной транзакцией и последним блоком.
Нам не нужно проходить весь путь назад к началу цепочки блоков, и это не требует хранения каких-либо дополнительных структур данных, хотя, как мы увидим, дополнительные структуры данных ускорят работу.
Так как транзакции могут иметь много входов и много выходов, разделять и объединять значения легко.
Например, Боб получил деньги в двух разных транзакциях – 17 биткойнов в одной и 2 биткойна в другой.
Боб может сказать, что хотел бы иметь одну транзакцию, которую он может потратить позже, где у него будут все 19 биткойнов.
Сделать это легко – он создает транзакцию с двумя входами и одним выходом, причем выходной адрес принадлежит ему.
Это позволяет ему консолидировать эти две транзакции.
Также, легко сделать и совместные платежи.
Предположим, Кэрол и Боб оба хотят заплатить Дэвиду.
Они могут создать транзакцию с двумя входами, которые принадлежат разным людям, и одним выходом.
И единственное отличие от предыдущего примера состоит в том, что, поскольку два выхода из предыдущих транзакций, которые здесь заявляются, относятся к разным адресам, для новой транзакции потребуется две отдельные подписи: одна – Кэрол, а другая – Боба.
Концептуально это все, что связано с транзакцией биткойнов.
Теперь посмотрим, как она представлена на низком уровне в биткойне.

В конечном счете, каждая структура данных, которая отправляется в сеть, представляет собой строку бит.
То, что здесь показано, является низкоуровневым форматом, но далее это дополнительно компилируется до компактного двоичного формата, который не читается человеком.
Как вы можете видеть в этом примере, транзакция делится на три части: некоторые метаданные, серия входов и серия выходов.
Что качается метаданных, здесь есть некоторая информация о самой транзакции – размер транзакции, количество входов и количества выходов.
Также здесь указан хэш всей транзакции, который служит уникальным идентификатором транзакции.
Это позволяет нам использовать хеш-указатели для ссылок на транзакции.
Наконец, есть поле «lock_time», к которому мы вернемся позже.
Теперь о входах.
Входы транзакций образуют массив, и каждый вход имеет один и тот же формат.
Вход указывает предыдущую транзакцию с помощью хэша этой транзакции, который работает как хэш-указатель на предыдущую транзакцию.
Вход также содержит индекс выхода предыдущей транзакции, на которую идет ссылка.
И здесь еще есть подпись.
Помните, что мы должны подписать транзакцию, чтобы показать, что мы на самом деле имеем возможность претендовать на эти предыдущие выходы транзакций.
Теперь о выходах.
Выходы также представляют собой массив.
Каждый выход имеет только два поля. У каждого выхода есть значение, а сумма всех выходных значений должна быть меньше или равна сумме всех входных значений.
Если сумма выходных значений меньше суммы входных значений, разница представляет собой плату за транзакцию для майнера, который публикует эту транзакцию.
Также, у выхода есть строка, которая выглядит как адрес получателя.
Мы видим, что здесь есть хэш публичного ключа, а также есть набор команд.
Так что это поле на самом деле является скриптом.
Bitcoin скрипты
Каждый выход транзакции не просто указывает публичный ключ или адрес следующего получателя монет.
На самом деле он определяет скрипт.
Что такое скрипт и почему мы используем скрипты?
Далее мы рассмотрим язык Bitcoin скриптов и поймем, почему скрипт используется вместо простого указания открытого ключа.

Наиболее распространенным типом транзакции в биткойне является трата выхода предыдущей транзакции путем подписания с помощью правильного ключа.
Читать дальшеИнтервал:
Закладка: