Как работает биткоин. Часть 2

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

В упрощенном смысле транзакция сообщает сети о том, что владелец некоторого количества биткойнов подтвердил (с помощью процедуры авторизации) передачу этого количества биткойнов другому владельцу. После этого новый владелец также может расходовать биткойны, создавая другие транзакции, которые подтверждают (авторизуют) передачу биткойнов очередному владельцу и т. д. в цепочке прав владения.

Bitcoin Falling Apart To Digits Concept. 3D Model.

Входные и выходные данные транзакции

Транзакции похожи на строки в книге бухгалтерского учета с двойной записью. Каждая транзакция содержит один или несколько элементов входных данных (inputs), которые подобны дебетовым (расходным) записям на биткойновом счете. У транзакции также имеются некоторые выходные данные (outputs), подобные кредитовым (приходным) записям на биткойновом счете. Входные и выходные данные (дебет и кредит) не всегда одинаковы. Выходные данные могут добавлять несколько меньшую сумму, по сравнению с указанной во входных данных. Это небольшое различие объясняется подразумеваемым по умолчанию транзакционным сбором (transaction fee), то есть небольшой суммой, отчисляемой майнеру, который включает данную транзакцию в свой реестр.

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

Цепочки транзакций

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

Получение сдачи

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

Кошельки могут использовать разнообразные стратегии объединения входных данных при формировании платежа, затребованного пользователем. Может объединяться множество небольших входных данных, или могут использоваться входные данные, равные или несколько большие требуемого платежа. Если кошелек не может объединить входные данные таким образом, чтобы обеспечить точное соответствие сумме требуемого платежа плюс сбор за транзакцию, то кошелек должен сгенерировать соответствующую сдачу. Это очень похоже на обращение наличных денег. Если вы всегда носите с собой только крупные купюры, то в конце концов у вас наберется полный карман мелочи, полученной на сдачу. Если вы даете сдачу исключительно мелочью, то у вас всегда будут оставаться только крупные купюры. Люди подсознательно ищут баланс между этими двумя крайностями, и разработчики биткойн-кошельков стараются запрограммировать такой баланс.

Таким образом, транзакции перемещают стоимостную ценность из входных данных транзакции (trasaction inputs) в выходные данные транзакции (transaction outputs). Входные данные — это ссылка на выходные данные предыдущей транзакции, показывающая источник заявленной стоимостной ценности. Выходные данные транзакции направляют конкретную стоимостную ценность на биткойн-адрес нового владельца и могут содержать данные о сдаче, возвращаемой первоначальному владельцу. Выходные данные одной транзакции могут использоваться как входные данные в новой транзакции, создавая тем самым цепочку передачи прав владения как стоимостную ценность, перемещаемую от владельца к владельцу.

Общие формы транзакций

Наиболее общей формой транзакции является простой платеж с одного адреса на другой, в который часто включается некоторая сдача, возвращаемая первоначальному владельцу. При этом типе транзакции входные данные представлены одним фрагментом (один ввод), а выходные данные состоят из двух фрагментов (два вывода).

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

Еще одной формой, часто встречающейся в биткойн-реестре, является транзакция, распределяющая один фрагмент входных данных по нескольким фрагментам выходных данных, представляющих различных получателей. Этот тип транзакций иногда используется коммерческими организациями для распределения денежных средств, например при выдаче заработной платы нескольким сотрудникам.