Сначала кошелёк составляет предложение платежа
Когда вы вводите адрес получателя и сумму, кошелёк не выбирает файл с монетами. Он находит прежние выходы, которые можно потратить с помощью ваших ключей, и использует их как входы новой транзакции. Затем создаёт выход получателю, обычно выход со сдачей обратно вам, и подбирает комиссию.
Пока предложение не подписано должным образом, само по себе оно не даёт сети разрешения что-либо потратить. Кошелёк должен проверить суммы и условия, подготовить точные данные для подписи и лишь затем передать результат подключённому узлу. Хорошо спроектированное подписывающее устройство показывает пользователю адрес назначения, сумму и комиссию до подтверждения.
Входы указывают назад, выходы — вперёд
Каждый обычный вход обозначает конкретный выход старой транзакции с помощью идентификатора и порядкового номера. Он также предоставляет данные, удовлетворяющие условию траты этого выхода. Новые выходы задают количество сатоши и новое условие, которое должен будет выполнить тот, кто потратит выход в будущем.
Транзакция не записывает команду вроде «спиши со счёта Ивана и зачисли Петру». Она полностью расходует выбранные выходы и создаёт новые. Если входы больше платежа и комиссии, разница обычно возвращается отправителю отдельным выходом. Эту модель подробнее разбирает статья 45.
- вход указывает на конкретный старый непотраченный выход
- выход задаёт сумму и условие будущей траты
- разницу между входами и выходами майнер может получить как комиссию
Подпись передаётся, приватный ключ остаётся дома
Кошелёк использует приватный ключ, чтобы подписать определённые части транзакции. Подпись позволяет узлам проверить, что требуемое разрешение было предоставлено и защищённые данные после подписания не изменились. Сам приватный ключ не отправляется ни получателю, ни в сеть.
Подписанная транзакция передаётся одному или нескольким узлам. Они независимо проверяют её и могут переслать действительную транзакцию другим соседям. Но распространение ещё не означает подтверждение: на этом этапе транзакция остаётся неподтверждённой и может пока не входить ни в один блок.
Получатель наблюдает запись, а не прибывающий предмет
Кошелёк получателя замечает, что новый выход соответствует условию, которое позднее сможет выполнить его ключ. Он может сразу показать его как ожидающий платёж. Включение в действительный блок создаёт первое подтверждение, а последующие блоки снижают вероятность изменения порядка истории.
Это объяснение не превращает Биткоин в обычный банковский счёт. Разница в том, что действительность не обязан удостоверять единственный оператор базы счетов. Каждый полный узел может по открытым данным и правилам сам определить, существуют ли входы, не были ли они потрачены и не создаёт ли транзакция запрещённую стоимость.