Продолжаем знакомство с тем, как устроена и как работает децентрализованная электронная денежная система Биткоин. Начало смотрите здесь: Введение в Биткоин: Краткое техническое руководство.
Ранее мы рассмотрели устройство и работу Биткоин-сети, а также зачем нужен Майнинг, как он работает, и что такое Блокчейн и его составляющие — Блоки... Кроме того мы рассмотрели механизм регулирования времени, необходимого для «добычи» блока, в основе которого лежит Сложность (difficulty).
Пришло время узнать, как в блокчейн Биткоина записываются транзакции.
Что такое биткоин-транзакция?
Биткоин-транзакция — это набор данных.
Эти данные содержат информацию об отправляемой сумме (кол-ве биткоинов), учетной записи (биткоин-адреса), с которой она отправляется, и учетной записи, на которую она отправляется.
Это основная информация, поэтому ее можно легко представить в одной строке данных:
И когда кто-то совершает транзакцию, он просто отправляет эти данные транзакции в Биткоин-сеть.
В конечном итоге один из узлов сети будет майнить эту транзакцию в блок, и этот блок (с транзакцией в нем) будет добавлен в файл подтвержденных транзакций (блокчейн).
И это все, что происходит с биткоин-транзакцией — отправка данных в Биткоин-сеть и ожидание её добавления в блокчейн.
Как работает биткоин-транзакция?
Биткоин-адрес похож на номер банковского счета, который содержит биткоины.
Но когда вы совершаете транзакцию в Биткоин-сети, это не то же самое, что взять некоторое количество монет из одного банковского счета и переместить их на другой.
Вместо этого адрес отслеживает каждую отдельную транзакцию, которую он получил.
Поэтому, когда вы хотите отправить биткоины кому-то другому, вы складываете целиком суммы, которые вы уже получили, и используете их для отправки новой суммы на новый адрес:
И когда кто-то еще хочет отправить биткоины другому человеку, он также будет использовать все суммы, которые получил таким же образом:
Таким образом, фактически вы получаете биткоины пакетами, и вы используете эти пакеты для создания новых пакетов для отправки другим людям.
Вот как работают транзакции.
Но есть нюанс!
«Что, если сумма пакета биткоинов составляет больше, чем надо отправить?»
Хороший вопрос! В этом случае (что часто бывает) вы просто добавляете еще один выход (output) в транзакцию и отправляете разницу (сдачу) обратно себе.
Пакет из 5 биткоинов (3+2) разделяется в транзакции на собственно платеж (4 биткоина) и сдачу (1 биткоин)
С первого взгляда это может показаться неудобным, но с точки зрения программирования это лучший способ.
Кстати, аналогично происходит при оплате наличными. Например, у вас есть банкноты в $50 и $100, а цена товара, который вы хотите купить равна $120. В этом случае вы отдаете продавцу $150 ($50+$100) и получаете вместе с товаром сдачу в размере $30.
Резюме:
- Имеется биткоин-адрес. Биткоины поступают на этот адрес с других адресов партиями, называемыми выходами (outputs).
- Биткоин-транзакция — это процесс использования этих выходов для создания новых выходов (и отправки их на новые адреса).
- Всё это может быть представлено одной строкой данных.
Что мешает кому-то другому тратить мои биткоины?
Или другими словами…
«Если совершение транзакции — это просто отправка строки данных в Биткоин-сеть, почему кто-то не может создать транзакцию, которая включает мой адрес и использует его для отправки моих биткоинов на свой адрес?»
Ответ: Потому что каждый из выходов транзакции имеет блокировку…
И если кто-то создаст транзакцию без предварительного разблокирования этих выходов, узлы в Биткоин-сети будут отклонять эту транзакцию.
Поэтому каждый биткоин-адрес имеет соответствующий только ему секретный приватный ключ (private key), который позволяет разблокировать выходы. Все биткоин-адреса идут в паре со своим приватным ключом, который практически невозможно подделать.
Поэтому, чтобы отправить биткоины на адрес получателя, необходимо использовать приватный ключ, соответствующий адресу отправителя, который разблокирует выходы этого адреса.
После разблокировки всех выходов, которые надо использовать, транзакция будет принята и распространена узлами в Биткоин-сети.
Вот так работают транзакции в Биткоин-сети.
* * *
В следующей публикации будет подробнее рассмотрено, как используются Выходы (Outputs) в транзакциях Биткоина.
Подписывайтесь на мой аккаунт @uanix и голосуйте за меня, как делегата Голоса: https://golos.id/~witnesses
Удачный пост!
Искренне ваш @fomka