Транзакции в системе Биткойн

В простейшем случае, транзакция это передача денег из рук в руки.

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

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

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

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

  • Банк является третьим лицом, которому вы доверяете в управление ваше золото. Отдав в банк ваше золото, вы уже не владелец золота, а владелец прав на золото в пределах данной банковской системы. В системе Биткойн нет третьего лица, система решает проблему доверия. Гарантом сохранности ваших биткойнов является независимый блокчейн, который невозможно уничтожить и в котором невозможно изменить записи о ваших правах собственности на биткойны;
  • Банковские чековые книжки, бумажные деньги, банковские документы можно подделать. Биткойны подделать невозможно.
  • Банк это централизованная организация. Банк может обанкротиться, его могут ограбить, государство запретит деятельность банка, или потребует заблокировать ваши счета, и вы ничего не сможете сделать, потеряете ваши сбережения. Биткойн децентрализован, его невозможно запретить, закрыть, обанкротить, блокировать счета и транзакции. В системе Биткойн ваши биткойны принадлежат вам, и именно вы отвечаете за их сохранность.

 
Как же так получается, что именно вы являетесь владельцем ваших биткойнов?
 
Обратите внимание, система биткойн не требует ваших личных данных!

Когда вы запускаете биткойн кошелек. Программа, используя метод асимметрического шифрования (public key cryptography, asymmetrical cryptography), генерирует пару строк:

  • приватный ключ (или др. названия личный ключ, секретный ключ), который представляет собой многозначное число в интервале от 1 до 2256;
  • публичный ключ (или др. названия, адрес, биткойн-адрес, биткойн-счет), который генерируется на основе приватного ключа.

 
Внимание! Приватный ключ предоставляет вам право распоряжаться биткойнами. Пары приватный/публичный ключи необходимо записать в блокнот и бережно хранить.

Если вы потеряете приватные ключи, вы потеряете и доступ к управлению биткойнами навсегда. Восстановить их будет невозможно!
 
Свойства асимметрического шифрования:

  • Из приватного ключа генерируется публичный ключ, но используя  публичный ключ, невозможно сгенерировать приватный ключ;
  • Сообщения закодированные одним из ключей можно раскодировать вторым.

 
Когда майнер, находит блок, первую транзакцию в блоке создает система (участник 0). Этой транзакцией система переводит на счет майнера (открытый ключ = адрес участника 1) вознаграждение за найденный блок, или правильнее сказать, передает право распоряжаться новыми монетами. Первая транзакция является истинной, т.к. соответствует правилам системы. В дальнейшем этими новыми биткойнами распоряжается майнер.
 
Транзакции от момента создания системой новых биткойнов, до конечного владельца, связаны между собой в цепочку, через хеши и цифровые подписи, таким образом можно проследить передвижение монет от адреса к адресу и проверить действительно ли транзакции передают права на существующие монеты, которые принадлежат владельцу публичного/приватного ключей. Процессом проверки транзакций занимаются ноды, они просматривают цепочку транзакций до транзакции создания монет системой, и если все верно, транзакция считается легитимной.
 
Когда Участник 1 создает тело транзакции, в определенные сектора вписываются различные параметры. Для упрощения мы ограничимся несколькими основными параметрами:

  • value — Этот параметр содержит сумму биткойнов, которая передается;
  • address_pay — адрес (открытый ключ участника 2) на который будут переданы биткойны;
  • address_payer — адрес или адреса (открытый ключ участника 1) с которых переводится сумма;
  • hash_previous — хеш предыдущей транзакции, который подтверждает ваши права на биткойны;
  • hash — хеш параметров данной транзакции;
  • signature — цифровая подпись параметра hash. Цифровая подпись представляет собой кодирование хеша при помощи приватного ключа участника 1, в результате которого, на выходе, получается строка — набор цифр и букв.

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

Ниже представлена цепочка из подобных транзакций.

После формирования транзакции она отправляется в сеть Биткойн, добавляется в очередь mempool для подтверждения майнерами.

Баланс биткойнов. Когда право управлять биткойнами передают вам, такие транзакции называются входящими (или просто ВХОДЫ). Когда право на управление биткойнами передаете вы, т.е. отправляете биткойны кому-то, такая транзакция называется исходящей (ВЫХОДЫ). Баланс ваших биткойнов это разница между ВХОДАМИ и ВЫХОДАМИ за вычетом комиссии.

Например, два человека отправили вам биткойны 1 btc и 0.6 btc — это две входящие транзакции (два входа), которые в сумме дают баланс 1.6 btc. Затем, вы отправили кому-то 1.1 btc и у вас остается 0.5 btc. В системе биткойн это выглядит так:

Правило: Один вход можно делить на несколько выходов. Один выход может быть только одним входом.

Если вы передаете сумму большую (1.1 btc), чем имеется на первом входе (1 btc), добавляется второй вход (0.6 btc) и с них формируются два выхода, первый выход передает необходимую сумму (1.1 btc) на адрес получателя, а второй выход возвращает остаток, сдачу (0.5 btc) на адрес принадлежащий вам (тот с которого был выход или на новый адрес принадлежащий вам).

Представленный пример касается транзакций с нулевой комиссией. Если же вы устанавливаете некоторую комиссию, то сумма во втором ВЫХОДе, который возвращает вам сдачу, будет меше на сумму комиссионных.

Подтверждение транзакций.

Когда транзакция сформирована, она отправляется в сеть Биткойн и попадает в очередь (mempool) на добавление в блок и подтверждение.

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

Приоритет транзакции зависит от суммы перевода, количества блоков, после блока с транзакцией которая передала вам биткойны и объема памяти, который занимает сформированная транзакция:

Приоритет транзакции = N btc * N blocks / N byte

Например, вы отправляете 0.10000000 btc, которые ранее получили транзакцией в блоке #445961. Сформированная транзакция занимает объем памяти равный 225 byte. Текущий блок #481715. Тогда приоритет транзакции равен:

Приоритет транзакции = 0.1 * (481715 — 445961) / 225 = 15.89

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

Объем памяти транзакции зависит от количества входов, и выходов, которые формируют сумму транзакции. Если у вас много мелких входов по 0.1 btc и вы передаете 1 btc, то объем памяти такой транзакции будет больше, чем если у вас один вход 1 btc и вы передаете 1 btc.

Подтверждение транзакции это процесс добавления новых блоков в блокчейн после блока в котором находится ваша транзакция. Если подтверждение одно, это значит, что блок с вашей транзакцией добавлен в блокчейн. 6 подтверждений — 5 новых блоков после блока с вашей транзакцией добавлены в блокчейн.

Зачем нужны подтверждения? Технически можно создать две транзакции, которые отправляют биткойны с одного и того же входа. Например первая транзакция будет отправлять биткойны на адрес получателя как оплату за какой либо товар, а вторая транзакция с того же входа и с большей комиссией, будет отправлять биткойны на адрес мошенника (т.е. самому себе). Получается двойная трата одних и тех же биткойнов. Эти обе транзакции попадают в очередь (mempool). Кошелек получателя видит транзакцию находящуюся в очереди как неподтвержденную. И может принять решение отдать товар за который якобы оплачено. Но на самом деле, с большой вероятностью, первой в блок попадет транзакция с большей комиссией, которая возвращает биткойны на адрес мошенника. Поэтому продавцу необходимо ждать нескольких подтверждений, как правило 3 и более.

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

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

Транзакции в системе Биткойн обновлено: Сентябрь 8, 2018 автором: SchBit