Как узнать номер транзакции биткоин

Как узнать номер транзакции биткоин

Система биткоин, в отличии от традиционных банковских и платежных система, построена на децентрализации. Вместо центральных доверительных органов, в биткоине доверие достигается путем взаимодействия различных участников биткоин системы. В этой главе мы посмотрим на биткоин со стороны, проследим путь транзакции в системе биткоин, посмотрим как она становится “доверенной”, принимается механизмом распределенного консенсуса и, в конце концов, записывается в блокчейн – распределенный регистр всех транзакций.

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

Популярные биткоин эксплореры:

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

Краткий Обзор Биткоина

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

Покупая Чашку Кофе

Алиса, с который вы знакомы из прошлой главы, еще совсем “зеленая”, так как недавно получила свой перый биткоин. В [getting_first_bitcoin], Алиса встретилась со своим другом Джо, чтоб обменять немного наличных на биткоин. Транзакция, созданная Джо, пополнила кошелек Алисы на 0.10 биткоина. Теперь Алиса отправляется совершить свою первую реальную транзакцию, купив чашку кофе в кафе у Боба в Пало Альто, Калифорния. Боб надавно начал принимать биткоин в своем кафе, добавив опцию оплаты биткоинами в платежный терминал. Цены в кафе указаны в местной валюте (Доллары США), но при оплате клиенты могут воспользоваться опцией оплаты биткоинами. Алиса заказала чашку кофе, Боб ввел заказ в платежный терминал. Терминал отобразил на экране два числа, посчитав стоимость заказа в местной валюте и в биткоинах по текущему курсу, а также показал на экране QR код, который содержит payment request для этой транзакции (see [payment-request-QR]):

В отличии от QR кода, который содержит адрес получателя, чек содержит URL платежа, который включает в себя адрес, сумму и описание, как например “Кафе Боба”. Это позволяет биткоин кошельку получить необходимую для отправки информацию и отобразить понятную информацию для пользователя. Вы можете отсканировать QR код своим биткоин кошельком, чтоб посмотреть, что увидела Алиса отсканировав такой QR.

Боб говорит, “С вас один доллар пятьдесят, или пятнадцать милибитов.”

Алиса смартфоном сканирует штрихкод с экрана. Её смартфон показывает “0.0150 БТС Кафе Боба” она нажимает кнопку “Отправить” чтоб подтвердить платеж. Примерно за пару секунд (не более того, что заняла бы авторизация пластиковой карты), Боб увидит транзакцию и подтвердит платеж.

В следующих разделах мы рассмотрим эту транзакцию более подробно: увидим как кошелек Алисы ее создал, как она распространялась по сети, как проверялась, и, наконец, как Боб потратил эту сумму в последующих транзакциях.

Сеть Биткоин поддерживает переводы дробных количеств, например, от миллибиткоинов (1/1000 часть Биткоин) до 1/100.000.000 доли Биткоин, которая известна как сатоши. В этой книге мы будем использовать термин “биткоины” для обозначения любого количества криптовалюты: от наименьшей единицы (1 сатоши) до максимального возможного числа монет (21.000.000).

Транзакции Биткоин

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

Транзакции аналогичны записям в обычной бухгалтерской книге приходов и расходов. Простыми словами, каждая транзакция содержит один или несколько “входов”, из которых поступают средства. С другой стороны транзакции находятся один или больше “выходов”, куда средства уходят. Входы и выходы (дебета и кредита) не обязательно в сумме составляют одну и ту же сумму. Выходы содержат чуть меньше, чем сумма на входах за счет “комиссии”, небольшой платы майнерам за включения транзакции в блок. Биткоин-транзакция выглядит как две записи в бухгалтерской книге [transaction-double-entry].

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

Транзакции переносят значения из входов транзакции в выходы транзакции. Значение на входе — это как правило выход какой-то предыдущей транзакции. Выход транзакции назначает нового владельца при помощи обременения, т.е. требования подписи для получения возможности распоряжаться средствами. Выходы из одной транзакции могут быть использованы в качестве входов новых транзакций, тем самым создавая цепочку передачи прав собственности, по мере того, как ценность перемещается от адреса к адресу (см. [blockchain-mnemonic]).

Платеж Алисы в кафе Боба использует предыдущую транзакцию в качестве входа. В предыдущей главе Алиса получила биткоины от Джо в обмен на наличные. Та транзакция оказалась заблокирована (обременена) требованием ключа Алисы. Ее новый платеж Бобу ссылается на предыдущую сделку в качестве входа и создает новые выходы для оплаты чашки кофе и для сдачи. Транзакции образуют цепь, в которой входы последующих транзакций соответствуют выходам предыдущих. Ключ Алисы обеспечивает подпись, которая распечатывает эти предыдущие выходы, тем самым доказав остальной сети Биткоин, что Алиса является владелицей средств. Она отправляет оплату за кофе по адресу Боба, добавляя к выходу “обременение” с требованием, что Боб должен предъявить валидную подпись для того, чтобы потратить эту сумму. Это описывает передачу ценности от Алисы к Бобу. Эта цепочка транзакции от Джо к Алисе и далее к Бобу, показана на [blockchain-mnemonic].

Обычные виды транзакций

Наиболее распространенной формой транзакции является простой платеж с одного адреса на другой, что часто включает в себя некоторое количество “сдачи” первоначальному владельцу. Этот тип сделки имеет один вход и два выхода как показано на [transaction-common].

Еще один распространенный вид сделки — объединяющий несколько входов в один выход (см. [transaction-aggregating]). Это представляет собой эквивалент обмена кучи монет на одну купюру в реальной жизни. Подобные транзакции часто создаются ПО кошельков для слияния множества маленьких “сдач”.

Наконец, еще одна распространенная форма транзакция в блокчейне разделяет один входя на несколько выходов, представляющих несколько получателей (см [transaction-distributing]). Этот тип сделки иногда используется коммерческими структурами для распределения средств на несколько кощельков, например, выплаты зарплат нескольким сотрудникам сразу.

Создание транзакции

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

Получение правильных входов

Приложение кошелька Алисы сначала должно найти входы, содержащие достаточное количество средств, чтобы можно было заплатить Бобу. Большинство приложений кошельков содержит небольшую базу данных “неизрасходованных выходов транзакций” (“unspent transaction outputs”), заблокированные (обремененных) собственными ключами кошелька. Значит, кошелек Алисы будет содержать копию выхода транзакции Джо, при помощи которой Алиса приобрела свои первые биткоины (см. [getting_first_bitcoin]). Приложения Биткоин-кошельков, работающие как клиент с полным индексом на самом деле содержит копию каждого неизрасходованного выхода из каждой транзакции в блокчейне. Это позволяет кошельку не только выбирать входы для транзакций, но также и быстро проверять корректность входов входящих транзакций. Однако, поскольку полный индекс занимает много места на диске, большинство пользователей используют “легкие” кошельки, которые отслеживают только собственные неизрасходованные выходы пользователя.

Если приложение кошелька не содержит копию неизрасходованных выходов транзакций, оно может запросить эту информацию у сети Биткоин через API различных провайдеров, или послав JSON RPC запрос узлу, содержащему полный индекс. [example_2-1] показывает запрос к RESTful API в виде HTTP GET по определенному URL. Этот URL-адрес вернет все неизрасходованные выходы транзакций адреса, предоставив любому приложению достаточно информации, чтобы можно было построить входы транзакций. Для запроса мы воспользуемся утилитой коммандной строки cURL.

Ответ в [example_2-2] показывает один неизрасходованный выход (выход, который еще не был израсходован), на принадлежащем Алисе адресе 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK. Ответ включает в себя ссылку на транзакцию, в которой найден этот неизрасходованный выход (перевод от Джо) и его значение в 10 млн сатоши, что эквивалентно 0.10 биткоинов. При помощи этой информации, приложение кошелька Алисы может составить новую транзакцию и отправить средства по новому адресу.

Как можно видеть, кошелек Алисы содержит достаточно биткоинов в одном неизрасходованного выходе, чтобы хватило заплатить за чашку кофе. Если бы в одном выходе не хватало средств, то приложению кошелька Алисы, возможно, пришлось бы “рыться” в куче мелких неизрасходованных выходов, как обычно роются в кошельке набирая в ладонь монеты пока не хватит, чтобы заплатить. В обоих случаях может возникнуть необходимость получить некоторое количество сдачи. Об этом мы поговорим в следующем разделе, когда расскажем как приложение кошелька создает выходы транзакции.

Создание выходов

Выходы сделки описываются в виде сценария, который создает обременение на ценность, разрешающее пользование средствами только если сценарий будет исполнен. Проще говоря, выход транзакции Алисы будет содержать сценарий, который говорит что-то вроде, “Этот выход выплачивается тому, кто может представить подпись ключом, соответствующим публичному адресу Боба.” Так как только у Боба в кошельке есть ключ, соответствующий этому адресу, только кошелек Боба может представить подобную ​​подписьи использовать этот выход. Поэтому Алиса “обременит” выход транзакции требованием предъявления подписи Боба.

Эта транзакция будет также включать в себя второй выход, так как 0.10 BTC слишком много за чашку кофе ценой 0.015 BTC. Алиса должна получить 0.085 BTC в виде сдачи. Выход сдачи Алисы создается кошельком Алисы в той же самой транзакции, в которой создается оплата Бобу. По сути, кошелек Алисы делит ее средства на два платежа: один Бобу, и один обратно себе. В одной из более поздних транзакций Алиса сможет потратить остаток сдачи.

Наконец, для того, чтобы транзакция могла быть обработана сетью в разумные сроки, приложение кошелька Алисы присовокупило небольшую комиссионную плату. Комиссия не указана в транзакции явно; подразумевается что ее можно вычислисть как разницу между входами и выходами. Вместо 0.085 в качестве сдачи, Алиса создает второй выход для 0.0845, подразумевая в остатке 0,0005 BTC (половина миллибиткоина). Количество 0.10 BTC на входе не полностью потрачено двумя выходами, так как в сумме они дают менее чем 0.10. Результирующая разница является комиссией, и уходит в пользу майнера в качестве платы за включение транзакции в блокчейн.

Результирующая транзакция может быть видна через веб-приложение “проводник блокчейна”, как показано на [transaction-alice].

Запись транзакции в бухгалтерскую книгу

Транзакция, которую создал кошелек Алисы имеет размер 258 байт и содержит все необходимое, чтобы подтвердить право собственности на средства и назначить новых владельцев. Теперь транзакция должна быть передана в сеть Биткоин, где она станет частью распределенной бухгалтерской книги (блокчейна). В следующем разделе мы увидим, как транзакция попадает в новый блок и, как блок будет “добыт”. Наконец, мы увидим, что по мере добавления новых блоков к блокчейну, доверие к старым возрастает.

Передача транзакции

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

Как распространяется транзакция

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

С точки зрения Боба

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

Распространенное заблуждение о Биткоин-транзакциях состоит в том, что они якобы должны быть “подтверждены” после 10-ти минут ожидания нового блока, или даже 60-ти минут для шести полных подтверждений. Хотя подтверждения и дают гарантию, что транзакция будет принята всей сетью, подобная задержка не является необходимой для платежей малой стоимости, таких как кофе. Торговец может принять валидную транзакцию малой стоимости и без каких-либо подтверждений вообще, с не большим риском, чем при оплате кредитной картой без предъявления удостоверения личности или подписи, как это часто происходит в наши дни.

Добыча Биткоин

Теперь транзакция распространяется по Биткоин-сети. Она не станет записью в общей бухгалтерской книге (блокчейн) до тех пор, пока не будет проверена и включена в блок во время процесса, называемого добычей (или майнинга). См [ch8] для подробного объяснения.

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

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

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

Майнинг можно сравнить с гигантской одновременной игрой в судоку, но такой, что сбрасывает результат как только кто-то находит решение головоломки и сложность которой автоматически регулируется так, что поиск решения занимает около 10 минут. Представьте себе гигантский судоку, несколько тысяч строк и столбцов в размере. Если вам показать заполненную цифрами головоломку, то вы сможете достаточно быстро проверить ее корректность. Однако, если в головоломке несколько квадратов заполнено, а остальные пусты, понадобится много работы, чтобы ее решить! Сложность судоку можно регулировать путем изменения размера (больше или меньше строк и столбцов), но результат решения головоломки довольно легко проверить несмотря на ее размер. “Головоломка”, которая используется в Биткоин основана на криптографическом хэше и имеет схожие характеристики: ее асимметрично трудно решить, но легко проверить, а также возможно регулировать ее сложность.

В [user-stories] мы познакомили читателя с Цзин, студентом компьютерного факультета из Шанхая. Цзин участвует в Биткоин-сети в качестве майнера. Каждые 10 минут или около того, Цзин вместе с тысячами других майнеров соревнуется в попытке найти очередной блок. Поиск решения головоломки, так называемое доказательство работы, требует квадриллионы операций хэширования в секунду всей сети Биткоин. Алгоритм доказательства работы представляет собой непрекращающееся хеширование заголовка блока и случайного числа при помощи криптографического алгоритма SHA256 до тех пор, пока не будет найдено решение, удовлетворяющее заранее заданному шаблону. Тот, кто первым из всех майнеров найдет подобное решение, выигрывает этот раунд соревнования и публикует найденный блок в блокчейн.

Цзин начал заниматься майнингом в 2010 году с помощью очень быстрого настольного компьютера. Поскольку все больше шахтеров начали присоединяться к Биткоин-сети, сложность задачи быстро выросла. Вскоре Цзин и другие майнеры перешли на более специализированное железо: игровые видеокарты (GPU). На момент написания этой книги, сложность достигла таких размеров, что заниматься поиском блоков выгодно только на очень специализированном железе, так называемых платах ASIC, в которых используются процессоры созданные для решения лишь одной задачи — поиска хешей. Цзин также присоединился к “майнинговому пулу”, который позволяет его участникам разделить между собой усилия по поиску, так и награду за находку. У Цзина в настоящее время работает есть два ASIC в виде двух “компьютеров”, подключенных к основному по USB и работающих 24 часа в сутки. Он оплачивает свои расходы за электроэнергию и сверх того немного зарабатывает за счет продажи найденных биткоинов. На его компьютере запущен bitcoind, основной Биткоин-клиент, который требуется для ПО майнинга.

Транзакции майнинга в блоках

Транзакция, переданная по сети не проверяется до тех пор, пока она не станет частью глобальной распределенной бухгалтерской книги, блокчейна. В среднем каждые 10 минут майнеры находят новый блок, который содержит все транзакции с момента последнего блока. От пользователей в сеть постоянно поступают новые транзакции. Как только сеть их получает, они добавляются к временному пулу непроверенных транзакций, поддерживаемому каждым узлом. Когда майнеры пытаются найти новый блок, они добавляют непроверенные транзакции из этого пула к новому блоку, а затем пытаться найти рушение очень трудной задачи (т.е. предъявить доказательство работы). Процесс майнинга будет подробно описан в [mining].

Транзакции будут добавлены в новый блок в порядке приоритета, рассчитанного на основании количества комиссии и нескольких других критериев. Каждый майнер начинает процесс поиска нового блока, как только получает из сети предыдущий блок, понимая что соревнование по поиску предыдущего блока проиграно. Он сразу же создает новый блок, заполняет его транзакциями и идентификатором-отпечатком предыдущего блока, и начинает расчета доказательства работы нового блока. Каждый майнер включает в свой блок специальную транзакцию, в которой вознаграждает самого себя за найденный блок в виде некоторого количества биткоинов (в настоящее время это 25 BTC). Если он находит решение головоломки, что означает, что блок становится валидным, он “выигрывает” это награду, потому что его блок добавляется к глобальному блокчейну, а награждающая транзакция становится расходуемой. Цзин, который участвует в майнинговом пуле, настроил свое программное обеспечение так, что награда уходит по адрему пула. Оттуда, доля вознаграждения распределяется Цзин и других майнерам пропорционально тому объему работы, который каждый вложил в последнем туре.

Сеть подобрала транзакцию Алисы и включила в пул непроверенных сделок. Так как в нее было включено достаточное количество комиссионных, транзакция попала в новый блок, найденный майнинговым пулом Цзин. Примерно через пять минут после того, как транзакция была иннициирована кошельком Алисы, ASIC-майнер Цзин нашел решение для блока и опубликовал его в качестве блока #277316, содержащий также 419 других сделок. ASIC-майнер Цзин опубликовал новый блок в сети Биткоин, где другие майнеры подтвердили его и начали новую гонку по поиску следующего блока.

Можно видеть, что блок включает в себя транзакцию Алисы.

Спустя несколько минут, другой майнер нашел новый блок #277317. Так как новый блок основан на предыдущем блоке (#277316), который содержал операцию Алисы, он добавил даже больше вычислений над тем блоком, таким образом усилив доверие к тем транзакциям. Блок, содержащий транзакцию Алисы засчитывается как одно “подтверждение” этой транзакции. Каждый новый блок сверху блока, содержащего сделку является дополнительным подтверждением. По мере того, как блоки нанизываются один на другой, становится экспоненциально сложнее отменить транзакцию, тем самым она становится все более доверительной для сети.

На диаграмме в [block-alice1] мы видим блок #277316, содержащий транзакцию Алисы. Под ним находятся 277316 предыдущих блоков (в том числе блок #0), связанных друг с другом в цепь (blockchain) вплоть до нулевого, известного как блок генезиса. Со временем, по мере того как “высота” в блоках увеличивается, то же самое происходит и с вычислительной сложностью каждого блока и с цепочкой в целом. Блоки, добытые после того, который содержит транзакцию Алисы, становятся дополнительной гарантией по мере того, как растет количество вычислений и длина цепочки. По соглашению, любой блок с более чем шестью подтверждениями считается безотзывным, так как для его отмены потребуется пересчитать шесть блоков, а это огромное количество вычислений. Мы рассмотрим процесс майнинга и вопрос доверительности более подробно в [ch8].

Растрачивание транзакции

Теперь, когда транзакция Алисы была встроена в блокчейн в качестве записи в блоке, она становится частью распределенной бухгалтерской книги Биткоин и видной для всех приложений Биткойн. Каждый отдельный Биткоин-клиент может самостоятельно проверить транзакцию на правильность и возможность потратить средства. Клиенты с полным индексом способны отследить источник средств с момента, когда они были созданы в блоке, последовательно транзакция к транзакции и так, пока они не достигнут адреса Боба. Легкие клиенты могут делать то, что называется упрощенной проверкой перевода (см. [spv_nodes]), подтверждая, что транзакция находится в блокчейне и после нее найдено несколько блоков.

Теперь Боб может потратить выход этой и других транзакций, создав свои собственные транзакции, которые бы ссылались на эти выходы в качестве входов. Например, Боб может заплатить подрядчику или поставщику путем передачи стоимости оплаты за чашку кофе Алисы этим новым владельцам. Скорее всего, программное обеспечение Биткоин Боба будет агрегировать множество мелких платежей в большой платеж, возможно, концентрируя доход целого дня в единую транзакцию. Это сведет различные платежи в один адрес, используемый в качестве “проверочного” счета магазина. Диаграмма агрегирующей транзакции изображена в [transaction-aggregating].

Так как Боб тратит средства, полученные от Алисы и других клиентов, он удлиняет цепочку транзакций, которые также добавляются в глобальный гроссбух и становятся видны всем. Давайте предположим, что Боб платит своему веб-дизайнеру Гопешу из Бангалоре за новый дизайн веб-сайта. Теперь цепочка транзакций будет выглядеть как здесь [block-alice2].

ПОДЕЛИТЬСЯ

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here