728x90

В заданной статье мы тщательно разглядим анатомию транзакций в паутине Bitcoin, для заглавной наглядности на заядлом примере.

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

Разглядим, например, этакую ситуацию. Некоторому Mr X переслали 30 BTC. Из их 10 он переправил Mr Y. Опосля чего же кто-то переслал гораздо пяти BTC Mr X. Потом Mr X высылает все свои 24,девяти BTC на адресок Mr Z. Оба раза выплачивается комиссия 0.05BTC.

bitcoin транзакции

А как же в заданной ситуации будут смотреться транзакции этих платежей?

Для транзакции tr2 код будет выгдядеть образцово настолько:

{
«hash»:»2de95ed5d8be1f44889d331994081b7acca87782969bb658e98fc155438c71ca»,
«ver»:1,
«vin_sz»:1,
«vout_sz»:2,
«lock_time»:0,
«size»:227,
«in»:[
    {
       «prev_out»:{
       «hash»:»b50f0d162ac9d073a5ab0ad873efb900771eec28b21e6bd1310da3e052b151ba»,
       «n»:0
       },
      «scriptSig»:»3046022100fff2f97e7b27eaa9dd0e97778e54fc22dec84fc3179387bd21de2698818a4f7e0221
0086aedbeef9c0d4bd1501318d65b396e3ed74f9a1b8a682eebc9947da9c1ec97801 037a8af42aa6a9c71ec0dcd28788938d25f1487599edfcaf4441aff174f5f0bcd7″
    }
],

«out»:[
    {
       «value»:»10.00000000″,
       «scriptPubKey»:»OP_DUP OP_HASH160 a73570db4e204130bee36f2df00221e8cc86f852 OP_EQUALVERIFY OP_CHECKSIG»
       },
       {
       «value»:»19.95000000″,
       «scriptPubKey»:»OP_DUP OP_HASH160 605b9313df4557dfb41f65ad76b519ff3720e17d OP_EQUALVERIFY OP_CHECKSIG»
    }
]
}

Тут:

Главный коалиция:

hash — хэш всей транзакции. На этот хэш будут ссылаться последующие за данной для нас транзакции.

ver — версия схемы транзакции. Пока чего же это же все время версия 1.

vin_sz — количество предшествующих транзакций, откуда брались монеты. В нашем случае это же число равно 1, настолько а как все монеты (10 BTC) берутся из числа тех 30 BTC, кои поступили в кошелек до этого, то кушать из одной транзакции.

vout_sz — количество адресов, на кои переводятся монеты. В нашей ситуации 2. Настолько а как при отправке BTC все денежки с адреса, с коего идет отправка, обязаны быть куда-то переправлены. То кушать 10 монет идет новейшему получателю, 0.05 — комиссия и остальное (19.95) отчаливает на исключительно чего же сгенерированный клиентом новейший адресок вашего кошелька (это же не делать тамошний же адресок, с коего идет отправка), а как сдача. При всем этом комиссия в транзакции не делать указывается, а высчитывается а как разница меж количеством монет, кои поступили с входящих транзакций и количеством монет, кои ушли сквозь исходящие.

lock_time — требуется для сотворения отложенных транзакций. Пока не делать употребляется и приравнивается 0.

size — калибр транзакции в формате JSON в б.

Коалиция in:

in — перечень входящих транзакций, число которых указывается в vin_sz.

hash — хэш предшествующей транзакции в блоке in. В нашем случае это же будет хэш транзакции tr1.

n — показывает из какого выхода транзакции берутся монеты. Отсчет начинается с 0. В примере последующей транзакции будет подробнее расписано значение сего параметра.

scriptSig — В данной для нас строчке обладатель монет подтверждает свое право ими распоряжаться. В начале указывается открытый ключ обладателя, потом подпись данной для нас транзакции, изготовленная его закрытым ключом.

Коалиция out:

out — перечень исходящих транзакций.

value — количество монет, кои передаются в описываемом выходе. В нашем случае 10 монет идет получателю, а 19.95 (опосля вычета комиссии) ворачивается нам на новейший адресок.

scriptPubKey — содержит хэш открытого ключа получателя монет.

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

{
«hash»:»d585a7c300bbf40501e2f9d70dbb24127935b84170692d639b63a0bc31f8f9c9″,
«ver»:1,
«vin_sz»:2,
«vout_sz»:1,
«lock_time»:0,
«size»:490,
«in»:[
    {
       «prev_out»:{
       «hash»:»2de95ed5d8be1f44889d331994081b7acca87782969bb658e98fc155438c71ca»,
       «n»:1
       },
      «scriptSig»:»3046022100f4d15bb0a5292a3e2b66dae278a711b00865633cba328b8e8bc4384726b8019002210
0a46a9e3dba3585a34d5800b03c1a8f2271f873aeba33e9ae34c5e588f51be4b301 039152828874042c670f562ce92e7e0cce38a45f1fb5c7f5d167cd8c1c4c7f83fa»
    },
    {
       «prev_out»:{
       «hash»:»8b6a720b657b0a2dd71ffd8b79d9397c5ab409f5e0e2a8a3e06c2e94e79ff1cf»,
       «n»:0
       },
      «scriptSig»:»3046022100e921e996e1732c09519d6ad63f44abb1b7572b2d75cf89bc7a46f8a9c645ed6e022100
da7b53d846e0e4077e8de51429481b5d39478db767fca04e60e29edddc5bda0601 0304279936210a2dd671cf15728ee77dfb29e7add85f7b27232eac89ad930d62a0″
    }
],

«out»:[
    {
       «value»:»24.90000000″,
       «scriptPubKey»:»OP_DUP OP_HASH160 a73570db4e204130bee36f2df00221e8cc86f852 OP_EQUALVERIFY OP_CHECKSIG»
       }
]
}

тут vin_sz уже равно 2. vout_sz = 1, настолько а как отправляются все денежки (минус комиссия).

Hash первого входа воображает собой хэш транзакции tr2. В данной для нас транзакции мы получили вспять в качестве сдачи 19.95 BTC и это же был 2-ой по счету выход для данной для нас транзакции (сантиметров код tr2). А настолько а как отсчет начинается с 0, то значение n в данном случае будет 1. Хэш второго входа — хэш транзакции tr3.