Bitcoin транзакция

Материал из Bitcoin Wiki
Перейти к: навигация, поиск

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

Браузер цепочки блоков — это место, где все транзакции, объединённые в цепочку блоков, могут быть найдены и проверены. Это необходимо не только для определения технических параметров транзакции, но и для проверки качества осуществления платежа.

Общий формат Bitcoin транзакций (внутри блока)

Поле Описание Размер
Номер версии На данный момент 1 4 байта
Входящий счётчик Положительное целое VI = VarInt 1-9 байтов
Список входящих данных Первый ввод первой транзакции также называется «coinbase» (монетная база) <входящий счётчик> много входящих данных
Исходящий счётчик Положительное целое VI = VarInt 1-9 байтов
Список исходящих данных Исходящие данные первой транзакции используют добытые Биткойны для блока <исходящий счётчик> много исходящих данных
Время блокировки Если не равны нулю и порядковые номера меньше 0xFFFFFFFF: высота блока или временная отметка (для конечных транзакций) 4 байта

Пример транзакции Биткойна с одним входом и одним выходом

Данные

Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG

Объяснение

Вход в этой транзакции импортирует 50 BTC от выхода #0 в транзакции f5d8..., а затем выход отправляет 50 BTC на Биткойн адрес (выраженный здесь в шестнадцатеричной системе — 4043…). Когда получатель захочет потратить свои деньги, то он будет ссылаться на выход #0 этой транзакции для входа своей собственной транзакции.

Вход

Вход (input) — это ссылка на выход другой транзакции. У транзакции часто бывает несколько входов. Значения этих ссылок суммируются, и общая сумма биткоинов может быть использован в выходе текущей транзакции. Previous tx — это хеш предыдущей транзакции. Index — это определённый выход этой транзакции. ScriptSig — это первая половина половина скрипта (подробнее об этом — ниже).

Скрипт содержит две компоненты: подпись (signature) и публичный ключ (public key). Публичный ключ принадлежит пользователю, который использует выходы транзакции, и подтверждает то, что создатель транзакции имеет право распоряжаться суммой, пришедшей с выходов. Другой компонент – это ECDSA-подпись хеша упрощённой версии транзакции. Объединённая с публичным ключом, подпись подтверждает, что транзакция была создана реальным владельцем данного Bitcoin адреса.

Выход

Выход (output) содержит инструкции по отправлению биткойнов. Значение (value) — это количество сатоши (1 BTC = 100,000,000 сатоши), которое сможет использовать транзакция, для которая текущая будет входом. ScriptPubKey — это вторая половина скрипта (будет рассмотрена далее).

Может существовать более одного выхода, и они будут делить между собой сумму, пришедшую со входов.

Каждый выход транзакции может быть использован в качестве входа для следующей транзакции только один раз, поэтому сумма всех входов для текущей транзакции должна быть использована на её выходах. В противном случае, оставшаяся сумма входов транзакции будет потеряна. Например, если ввод равен 50 BTC, а пользователю нужно отправить только 25 BTC, то биткойн создаст два выхода по 25 BTC каждый: один отправится в пункт назначения, а другой отправится ещё раз владельцу этих средств (так называемая "сдача" — транзакция, которую пользователь фактически отправляет сам себе).

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

Верификация транзакции

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

Вход подтверждается, если скрипт scriptPubKey возвращает значение «true» (истинно). Через систему скрипта, отправитель может создавать очень сложные условия, которым должны соответствовать люди, желающие получить выходящее значение. Например, возможно создать вход, который сможет получить любой пользователь без авторизации. Также возможно потребовать того, чтобы вход был подписан 10 разными ключами, или проверялся не ключом, а паролем.

Общий формат каждого входа транзакции — Txin

Поле Описание Размер
Хеш предыдущей транзакции Двойное SHA256-хэширование предыдущей транзакции 32 байта
Предыдущий Txout-индекс Неотрицательное целое, индексирующее выходы предыдущей транзакции 4 байта
Длина скрипта Txin Не отрицательное целое VI = VarInt 1-9 байтов
Txin-script / scriptSig Скрипт <длина внутри скрипта>-много байтов
sequence_no обычно 0xFFFFFFFF; действует, только если lock_time транзакции > 0 4 байта

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

Общий формат каждого выхода транзакции — Txout

Поле Описание Размер
value Неотрицательное цело, дающее сумму сатоши (BTC/10^8), необходимых для транзакции 8 байтов
Длина Txout-скрипта Не отрицательное множество 1-9 байтов
Txout-script / scriptPubKey Скрипт <длина выходного скрипта>-много байтов

Выход определяет условия по использования данных биткоинов в следующих транзакциях.

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

См. также

Ссылки