Я пытаюсь определить исходный адрес транзакций для автоматического возврата средств, но вижу неожиданный результат от Bitcoin-QT.
Рассматриваемая транзакция в blockexplorer: 8bc80f72d9cc6fecda77138e7364f95b48d652db404889deafd48158dc46387e .
А ниже результат bitcoind gettransaction
для того же txid. Разве я не должен увидеть то же самое? Или есть проблема с отправкой между кошельками?
{
"amount" : 0.00000000,
"fee" : -0.00010000,
"confirmations" : 1,
"blockhash" : "0000000000941dab82b8f78596f93832104288c85e7951b5f505b8c1c30dd4ba",
"blockindex" : 1,
"blocktime" : 1377648593,
"txid" : "8bc80f72d9cc6fecda77138e7364f95b48d652db404889deafd48158dc46387e",
"time" : 1377648549,
"timereceived" : 1377648549,
"details" : [
{
"account" : "",
"address" : "n1SrgGXRGjK2gKcvSDRVUDPA1aVKBaG6PQ",
"category" : "send",
"amount" : -0.10000000,
"fee" : -0.00010000
},
{
"account" : "",
"address" : "mtjmGtkZet4Y7rzQrC8cweuJMYGZFpPw4d",
"category" : "send",
"amount" : -0.10000000,
"fee" : -0.00010000
},
{
"account" : "",
"address" : "n4N4hQZK1sgHv8z3ikHsuN98vGNhshQZSo",
"category" : "send",
"amount" : -0.10000000,
"fee" : -0.00010000
},
{
"account" : "",
"address" : "mvw4DVoSL7APFGdHb2RGYebzBKDBankTAM",
"category" : "send",
"amount" : -0.99950000,
"fee" : -0.00010000
},
{
"account" : "account1",
"address" : "n1SrgGXRGjK2gKcvSDRVUDPA1aVKBaG6PQ",
"category" : "receive",
"amount" : 0.10000000
},
{
"account" : "account2",
"address" : "mtjmGtkZet4Y7rzQrC8cweuJMYGZFpPw4d",
"category" : "receive",
"amount" : 0.10000000
},
{
"account" : "account3",
"address" : "n4N4hQZK1sgHv8z3ikHsuN98vGNhshQZSo",
"category" : "receive",
"amount" : 0.10000000
},
{
"account" : "account4",
"address" : "mvw4DVoSL7APFGdHb2RGYebzBKDBankTAM",
"category" : "receive",
"amount" : 0.99950000
}
]
}
Редактировать: А вот результат объединения getrawtransaction
и decoderawtransaction
:
{
"txid" : "8bc80f72d9cc6fecda77138e7364f95b48d652db404889deafd48158dc46387e",
"version" : 1,
"locktime" : 0,
"vin" : [
{
"txid" : "f96590f6db1e8748f349e93ae5e1e335c57d55df9a26a70f99e7c06b32538f16",
"vout" : 0,
"scriptSig" : {
"asm" : "304502201d7a5a31936d9a4a0ff17f357dda13e87d7459a7663d127da783865858b552c5022100bac9edf373d42c578c92231cc096a620baa174d7bf141c519047b3ca5dc3577101 03f5fd9f5ad8f4a5ac11c9c8e6f6b094129dbc3d8a9f753dc8d415c5c42a5cccfa",
"hex" : "48304502201d7a5a31936d9a4a0ff17f357dda13e87d7459a7663d127da783865858b552c5022100bac9edf373d42c578c92231cc096a620baa174d7bf141c519047b3ca5dc35771012103f5fd9f5ad8f4a5ac11c9c8e6f6b094129dbc3d8a9f753dc8d415c5c42a5cccfa"
},
"sequence" : 4294967295
}
],
"vout" : [
{
"value" : 0.10000000,
"n" : 0,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 da9c29ba563c33688e8e1d85b84a634a271b5282 OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a914da9c29ba563c33688e8e1d85b84a634a271b528288ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"n1SrgGXRGjK2gKcvSDRVUDPA1aVKBaG6PQ"
]
}
},
{
"value" : 0.10000000,
"n" : 1,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 9105d7f92fd467f0035cd4b5b58bea1167647618 OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a9149105d7f92fd467f0035cd4b5b58bea116764761888ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"mtjmGtkZet4Y7rzQrC8cweuJMYGZFpPw4d"
]
}
},
{
"value" : 0.10000000,
"n" : 2,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 fa9c7e784bfae5e3d330cba28b73c804da71f213 OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a914fa9c7e784bfae5e3d330cba28b73c804da71f21388ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"n4N4hQZK1sgHv8z3ikHsuN98vGNhshQZSo"
]
}
},
{
"value" : 0.99950000,
"n" : 3,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 a918d01415a09ee82034f1dce3217741dcdf5849 OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a914a918d01415a09ee82034f1dce3217741dcdf584988ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"mvw4DVoSL7APFGdHb2RGYebzBKDBankTAM"
]
}
}
]
}
Вот ссылка, в которой говорится, что единственный способ - определить выходной индекс предыдущей транзакции: https://bitcoin.stackexchange.com/a/12472/3413 .
Если это верно, то для определения адреса «возврата» конкретной транзакции вам нужно будет запустить следующий псевдокод?:
txhex = getrawtransaction(targettxhash)
txjson = decoderawtransaction(txhex)
foreach txinput in txjson.vin:
txhexprev = getrawtransaction(txinput.txid)
txjsonprev = decoderawtransaction(txhexprev)
foreach txprevoutput in txjsonprev.vout:
txrefundarray[] += {'address':txprevoutput.scriptPubKey.addresses[0], 'amount':txprevout.value} // 0th address only doesn't support multi-sig
Биткойн-транзакции не имеют адреса «от» и, конечно же, не имеют гарантированного способа определения адреса возврата. Транзакции потребляют и производят монеты, и хотя теоретически возможно использовать адреса, на которые ранее были отправлены входные монеты, это не та информация, на которую вы должны полагаться (и ее доступность не гарантируется, хотя некоторые сайты используют эту технику).
Для полученных транзакций эталонный клиент указывает адрес, по которому вы получили монеты, а не отправителя. Лучший совет для определения адреса возврата — спросить его у клиента.
Если вам нужно что-то более автоматическое, разрабатывается платежный протокол, который работает поверх биткойнов и позволяет согласовывать транзакции между отправителем и получателем до их трансляции в сети. Он включает в себя функцию автоматической отправки адреса возврата с каждой транзакцией.
coins made from digital signatures, which provides strong control of ownership
и что веб-провайдеры, вероятно, нарушают этот принцип владения, повторно используя закрытые ключи для разных пользователей.Кто-то написал фрагмент python , который пытается определить «входные адреса» конкретной транзакции, используя выходные данные предыдущей транзакции в качестве работоспособного, но не на 100% ненадежного решения. Это выполнило то, что мне нужно.
Вы должны увидеть то же самое, но похоже, что ваши результаты от биткойнов не рассказывают всей истории. Все, что находится в разделе деталей, является результатом транзакции. (Обратите внимание, что каждый элемент с категорией «отправить» имеет соответствующий элемент «получить» с той же суммой, инвертированной — дубликаты!) На самом деле это ничего не говорит вам о входных данных. Это может быть ошибка в биткойне, но, скорее всего, есть другой способ, возможно, дополнительный параметр командной строки, который также предоставит входные данные для транзакции.
getrawtransaction
покажет вам транзакцию в блокчейне, а не влияние на ваш кошелек (однако для этого требуется настройка txindex=1). Однако это все равно не даст вам адрес возврата (см. Мой ответ).
Марч