Продолжаем знакомство с тем, как устроена и как работает децентрализованная электронная денежная система Биткоин. Начало смотрите здесь: Введение в Биткоин: Краткое техническое руководство.
Ранее мы рассмотрели устройство и работу Биткоин-сети, а также зачем нужен Майнинг, как он работает, и что такое Блокчейн и его составляющие — Блоки. Кроме того мы рассмотрели механизм регулирования времени, необходимого для «добычи» блока, в основе которого лежит Сложность (difficulty).
В предыдущей публикации было рассказано о Транзакциях. Сейчас подробнее остановимся на Выходах (Outputs) — важных составляющих транзакций в Биткоине, посредством которых происходит передача биткоинов с одного адреса на другой.
Система транзакций биткоинов включает в себя отправку и получение пакетов биткоинов, называемых выходами (outputs).
Это так, но единственный способ действительно понять, как это работает, это посмотреть на несколько примеров транзакций.
Пример 1: Простая транзакция
Давайте начнем эту историю транзакций с рождения новой партии биткоинов…
Допустим, вы сами майните биткоины. Каким-то чудом вам удалось добыть блок транзакций и заработать себе новую партию из 12,5 биткоинов.
Каждый майнер включает свой собственный биткоин-адрес в формируемый им блок. Поэтому, если ему удастся добыть новый блок (добавить его в блокчейн), то вознаграждение за этот блок будет отправлено на адрес майнера. Это называется транзакцией генерации (generation transaction).
Итак, это текущее состояние вашего биткоин-адреса:
Разумеется, теперь вы можете что-то купить, используя ваши биткоины. Например, вы хотите купить товар на сумму 1 биткоин.
Как в Биткоин-сети будет выглядеть эта транзакция? Просто вычесть из ваших 12,5 биткоинов 1 биткоин и отправить его на адрес продавца товара нельзя.
Такая транзакция недопустима.
Вместо этого мы должны отправить весь пакет из 12,5 биткоинов в одной транзакции.
Но, чтобы потратить на покупку 1 биткоин из наших 12,5 биткоинов, необходимо разделить пакет и отправить его в два адреса:
- Один биткоин отправить на адрес продавца в уплату за товар.
- Оставшиеся 11,5 биткоина вернуть на свой адрес (получить сдачу).
Вновь созданные пакеты называются выходами (output).
Причина, по которой транзакции работают таким образом, заключается в том, что это более простой и безопасный способ сделать это с точки зрения программирования.
После проведения этой транзакции балансы биткоин-адресов будут выглядеть так (предполагается, что на адресе получателя первоначально не было биткоинов):
Первоначальный пакет из 12,5 биткоинов перераспределился между двумя адресами — 11,5 на адресе 1 и 1 биткоин на адресе 2. Ничего не пропало и ничего не добавилось. Суммарный баланс остался прежним — 12,5 биткоинов.
Резюме
Система транзакций биткоинов работает так:
- Берется имеющийся выход (пакет биткоинов).
- На базе него создаются новые выходы (пакеты).
- Эти новые выходы отправляются на разные адреса.
Разумеется, все эти операции реализуются программно. Пользователю не надо самому всё высчитывать и распределять. Он лишь указывает адрес получателя и сумму в биткоинах, которую хочет перевести на этот адрес. Программа-кошелек проверяет, достаточно ли на биткоин-адресе отправителя средств и формирует транзакцию исходя из алгоритма, описанного выше.
Напомним, что это был простой пример транзакции. Теперь перейдем к более сложному случаю
…
Пример 2: Использование выходов (outputs) в качестве входов (inputs)
Мы будем использовать слово «выход» (output) вместо «пакет».
Предположим, что на биткоин-адрес поступило пять переводов по разным транзакциям, которые сформировали следующие выходы (как на картинке):
Суммарно на этом адресе находится 7,5 биткоина (1+3+0,5+2+1).
Владелец адреса хочет купить товар, который стоит 4,2 биткоина. Но, как мы видим, в наличии нет выхода с такой или большей суммой. Как же поступить?
Из имеющихся выходов мы выбираем несколько, которые в сумме дадут более 4,2 биткоина, а затем из них сформируем транзакцию, используя выходы (outputs), как входы (inputs):
Построение транзакции с использованием входов (inputs) и выходов (outputs).
Поэтому, когда создается подобная транзакция, выходы (outputs), которые суммируются для расходования, называются транзакционными «входами» (inputs).
Когда вы используете выход в транзакции, он временно называется «вход» (input).
В показанном выше примере четыре выхода первого адреса (отправителя) собрали в сумме 4,5 биткоина (1+0,5+2+1) и стали входами транзакции в результате которой полученная сумма (4,5) перераспределилась между двумя адресами — на второй адрес (получателя) поступил платеж в размере 4,2 биткоина, а на адрес отправителя вернулся неизрасходованный остаток («сдача») в размере 0,3 биткоина.
В результате этой транзакции несколько выходов первого адреса (отправителя) были израсходованы (потрачены) и не могут уже использоваться. Но остался один неизрасходованный выход (3 биткоина), а также новый выход (0,3 биткоина) — «сдача» от транзакции:
Эти «непотраченные» выходы можно использовать для расходов в будущем, поэтому они называются UTXO (unspent transaction outputs) — неизрасходованные (непотраченные) выходы транзакций.
Общее количество биткоинов на биткоин-адресе — это сумма всех UTXO этого адреса.
Примечание:
Мы выбрали выходы [1] + [0.5] + [2] + [1] в качестве входов для транзакции. Но если общая сумма больше, чем сумма, которую мы хотим отправить, то можно использовать любую комбинацию выходов (ну, входов), которая возможна:
[1] + [3] + [0.5] = 4.5
[3] + [2] = 5
[1] + [3] + [0.5] + [2] + [1] = 7
* * *
Пример 3: Комиссия за транзакцию
Упс! Мы не включили плату за транзакцию ни в одну из последних двух транзакций.
Без комиссии за транзакцию эти две транзакции, вероятно, будут долго ждать, чтобы попасть в блок и блокчейн. Это связано с тем, что комиссия за транзакцию дает приоритет транзакции.
Транзакционные сборы собираются майнерами, когда они добывают блок, поэтому добавление платы за транзакцию является стимулом для майнеров включать вашу транзакцию в блок-кандидат, который они формируют.
Если в мемпуле больше транзакций, чем может поместиться в блок, майнер выберет транзакции с самыми высокими комиссиями.
Комиссионная плата за транзакцию может рассматриваться как способ «купить место» в блоке.
Во всяком случае, представьте, что мы не отправили эту последнюю транзакцию в сеть, и давайте теперь добавим к ней плату за транзакцию. Будет это выглядеть так:
Но где же выход для комиссии за транзакцию? А его и нет. Но посмотрите на размер выходов.
Сумма выходов меньше, чем сумма входов, что означает, что есть некоторые оставшиеся биткоины, которые не используются. Эта недостающая сумма является комиссией за транзакцию.
Вместо 0,3 биткоина на адрес отправителя (адрес 1) возвращается только 0,2999 биткоина. А остаток транзакции — 0,0001 биткоина — это и есть транзакционные сборы (комиссия) майнера.
Наглядно это можно представить так:
Как вы заметили, комиссию за транзакцию оплачивает отправитель.
* * *
В следующей публикации будет подробнее рассмотрено, как блокируются и разблокируются Выходы (Outputs) в транзакциях Биткоина.
Подписывайтесь на мой аккаунт @uanix и голосуйте за меня, как делегата Голоса: https://golos.id/~witnesses
Хорошо!
Искренне ваш @fomka