В getrawtransaction, что такое vout integer в списке vin?

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

Мне не удалось найти необходимую документацию для описания целого числа vout в массиве vin:

{"txid"=>"0fbf9a6f2172251611a58028bf596c3ace98b19f6f08d2b6581326c58aecda8e",
    "vout"=>0,     <----- THIS
    "scriptSig"=>
     {"asm"=>
       "3045022100a9ba4f0b8ff86e91e622f43f9b76944643a807c0f6c8b43490087a169fe7542f0220258eaa36c96faaaeb41052e8d4aa41f74950df1b1c2835cb677f201c1ee0a33901 0393a2770ce81ddd9cd1e6ef71a282261ef8c03648373db209078f7850b9ab1ad1",
      "hex"=>
       "483045022100a9ba4f0b8ff86e91e622f43f9b76944643a807c0f6c8b43490087a169fe7542f0220258eaa36c96faaaeb41052e8d4aa41f74950df1b1c2835cb677f201c1ee0a33901210393a2770ce81ddd9cd1e6ef71a282261ef8c03648373db209078f7850b9ab1ad1"},
    "sequence"=>4294967295},
{"txid"=>"4983504e9727a5ea73c4a0915da475faba248d0d8da265e2d270563dc3eabbaf",
    "vout"=>1,     <----- THIS
    "scriptSig"=>
     {"asm"=>
       "3045022100ccc460cb0b8777d14f27acb821eacae0b5316de19db03ea707c59364f098d44f0220058a4f9df9a917944299b4c52efe500d50ab28c2fd29bb7b9ff8b75f38abcd4201 03244951ad9d146a635b321816d953e54986c62ce9c92502873335531dada0156c",
      "hex"=>
       "483045022100ccc460cb0b8777d14f27acb821eacae0b5316de19db03ea707c59364f098d44f0220058a4f9df9a917944299b4c52efe500d50ab28c2fd29bb7b9ff8b75f38abcd42012103244951ad9d146a635b321816d953e54986c62ce9c92502873335531dada0156c"},
    "sequence"=>4294967295}

В транзакциях, которые я вижу, он имеет тенденцию vout 0 1 0 1 0 1 в массиве. Что это означает в транзакции? Нужно ли мне интерпретировать его определенным образом? Спасибо!

26 голосов | спросил Kyle Drake 2 J0000006Europe/Moscow 2013, 05:04:59

5 ответов


32

Ввод каждой транзакции относится к выходу предыдущей транзакции.

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

Поскольку эти типы вопросов часто возникают из-за большего непонимания того, как сеть «действительно работает», я собираюсь начать с некоторых правил «простого английского» по транзакциям (tx):

1. A tx consists of one or more inputs and one or more outputs.
2. All tx inputs refer to an unspent output of a prior transaction.
3. The full value of an input is always spent; a tx can not spend part of the value.
4. Likewise all outputs are either spent or unspent, they can't be partially spent.
5. A tx "spends" the outputs which are referenced in the input portion of the tx.
6. A tx creates new spendable "unspent outputs" listed in the output portion of the tx.

Теперь, когда мы получили это, , чтобы определить вход tx, вам нужно обратиться к хэшу предыдущей транзакции и индексу вывода . Хэш типа tx идентифицирует транзакцию, но транзакция может иметь более одного вывода, поэтому индекс используется для определения того, какой выход «расходуется» здесь.

Это может показаться запутанным, потому что вы услышите такие заявления, как «У меня есть 20 BTC, хранящихся по адресу 1XYZ ...» или «У моего кошелька 100 BTC», но это действительно абстракция. Клиент просто показывает вам сумму всех неизрасходованных выходов для адреса или всего кошелька.

Сеть Bitcoin работает над концепцией входов и выходов

Сеть Bitcoin не учитывает «значение» адреса при проверке txs. При проверке tx выходы считаются независимыми объектами. Трафик одного выхода для определенного адреса не влияет на другие выходы (если есть) для этого адреса. Транзакция действительна (между прочим), если все входы относятся к действительным неизрасходованным выданным ранее транзакциям (не могут проводить монеты дважды), сумма выходов меньше или равна сумме входов (не может поддельные новые монеты), а входы подписываются правильным личным ключом (только «владелец» частного ключа может потратить монеты).

Примеры

Чтобы избежать излишней детализации, мы рассмотрим упрощенную версию транзакций, используемых в сети Bitcoin.

Предположим, что существует предыдущая транзакция (tx hash 1234567890). В этой транзакции у вас есть вход, который ссылается на неизрасходованный вывод предыдущей транзакции на 100 BTC. Вы отправляете 50 BTC по одному адресу, 10 BTC на другой адрес, а изменение (40 BTC) отправляется на новый адрес в вашем кошельке. Помните, что мы не можем тратить часть неизрасходованной продукции, поэтому изменение необходимо, потому что мы тратим 100 BTC-данных, но нам нужно только «отправить» 60 BTC.

Упрощенная псевдо-транзакция может выглядеть примерно так.

In[0] <lets ignore the input for now but it does have a value of 100 BTC>
Out[0] Bitcoin address=1ABC... Value=50 BTC
Out[1] Bitcoin address=1DEF... Value=10 BTC
Out[2] Bitcoin address=1XYZ... Value=40 BTC

tx имеет 1 вход, 3 выхода, все индексы ввода /вывода основаны на нуле, а значение выходов равно значению входа. Если выход (ы) меньше ввода (-ов), то разница - это плата, выплачиваемая шахтеру. Если выходы больше входных (ых), то tx недействителен.

Теперь, поскольку адрес «change» равен 1XYZ, это еще один адрес в нашем кошельке, который мы можем использовать в новых транзакциях. Мы заплатим продавцу 1 BTC и дадим шахтеру плату в размере 0,01 для быстрого включения в блок. Это изменение будет отправлено еще на новый адрес в кошельке (1ZZZ ....). Полученная транзакция может выглядеть так:

In[0]  Tx hash=1234567890 OutputIndex=2
Out[0] Bitcoin Address=1HIJ... Value=1 BTC
Out[1] Bitcoin Address=1ZZZ... Value=38.99 BTC

Ввод относится к выходу 3-го (0 базового массива) выше tx. При поиске выходного индекса 2 tx 123456789 мы можем увидеть значение 40.00 BTC. Сумма выходов 39,99 означает, что 0,01 BTC будет собираться шахтером блока.

Реальные txs отклоняются от упрощенной версии, показанной выше

Обратите внимание, что это не очень важно, если вы не хотите глубже погрузиться в работу протокола. Вывод транзакций биткойнов на самом деле является сценариями вместо статических адресов и значений, показанных выше. Функционально для большинства выходов они работают одинаково, хотя для экономии места используется хэш открытого ключа, а не адрес, который используется на выходе. Все блоки имеют требуемый tx, называемый coinbase, который не имеет входных данных, потому что выход является блочной субсидией и сборы, выплачиваемые шахтерам. Все значения в сети Bitcoin являются целыми числами в Satoshis (1E-8 BTC), поэтому технически все числа в этом сообщении будут умножены на 1E8.

ответил DeathAndTaxes 2 AM00000030000003331 2013, 03:00:33
4

Одна транзакция Bitcoin может иметь много выходов. Поле vout позволяет указать, какой вывод вы хотите потратить.

Посмотрите на эту транзакцию . Предположим, что у вас есть ключ 1EZ5, но не ключ 199N. Вы должны уточнить сеть Bitcoin, выход которой вы хотите потратить.

ответил Nick ODell 2 J0000006Europe/Moscow 2013, 06:24:50
0

В заключение, vout ссылается на индекс соответствующего выходного адреса. Индекс начинается с 0. Так, например, если tx имеет 10 выходных адресов, голосовые сообщения для адресов будут от 0 до 9.

ответил Jus12 24 MarpmTue, 24 Mar 2015 20:18:08 +03002015-03-24T20:18:08+03:0008 2015, 20:18:08
0

В списке vin vout вы можете указать, какой вывод вы хотите потратить на кого. Каждый vout имеет свой собственный tx_id. и сумма значений этого vout равна сумме BTC, которую мы имеем для транзакции; И если

, если vout <vin , то разница в этой сумме должна быть выплачена несовершеннолетнему.

else vout> vin , тогда tx_id недействителен.

ответил prachi kumrawat 12 J000000Thursday18 2018, 14:26:32
-1

В двух словах vout можно было бы считать идентификатором вывода внутри предыдущей транзакции.

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

ответил Badr Bellaj 14 +03002016-10-14T14:09:57+03:00312016bEurope/MoscowFri, 14 Oct 2016 14:09:57 +0300 2016, 14:09:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132