Для транзакции f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c вызов [getrawtransaction (verbose)] и [getrawtransaction (hex) + decoderawtransaction] имеет совершенно другой результат, включая txid.
Шаг воспроизведения проблемы:
curl --user yourAuth --data-binary '{"jsonrpc": "1.0","id":"curltest","method":"getrawtransaction", "params": ["f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c"] }' -H 'content-type: text/plain;' http://yourEndPoint
Возврат:
{
"result": "0100000000010115a16270d3ee7ccc58a0757c1d8e1763790f223d4e4c3823948fb3dfdf9865180100000000ffffffff023f3256000000000017a9142915a7db6c6df171fd0436c7cec0042195dad01c8738ee4647000000001600140aad95e932ba045c2daf31a04c36683d39efe91002473044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb465260121031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c400000000",
"error": null,
"id": null
}
Расшифровать с помощью decoderawtransaction :
curl --user yourAuth --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "decoderawtransaction", "params": ["0100000000010115a16270d3ee7ccc58a0757c1d8e1763790f223d4e4c3823948fb3dfdf9865180100000000ffffffff023f3256000000000017a9142915a7db6c6df171fd0436c7cec0042195dad01c8738ee4647000000001600140aad95e932ba045c2daf31a04c36683d39efe91002473044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb465260121031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c400000000"] }' -H 'content-type: text/plain;' http://yourEndPoint
Возврат:
{
"result": {
"txid": "0b637b18840d8fc978a657a3422df3c246c86e4c4046d90e63bf0f86b179b403",
"hash": "0b637b18840d8fc978a657a3422df3c246c86e4c4046d90e63bf0f86b179b403",
"version": 1,
"size": 223,
"vsize": 223,
"locktime": 0,
"vin": [
],
"vout": [
{
"value": 90023651848.04721921,
"n": 0,
"scriptPubKey": {
"asm": "8 OP_GREATERTHAN OP_DROP OP_SWAP 8e1763790f223d4e4c3823948fb3dfdf9865180100000000ffffffff02 3256000000000017a9142915a7db6c6df171fd0436c7cec0042195dad01c8738ee4647000000001600140aad95e932ba045c2daf31a04c36683d39efe91002 3044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb4652601 031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c4",
"hex": "58a0757c1d8e1763790f223d4e4c3823948fb3dfdf9865180100000000ffffffff023f3256000000000017a9142915a7db6c6df171fd0436c7cec0042195dad01c8738ee4647000000001600140aad95e932ba045c2daf31a04c36683d39efe91002473044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb465260121031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c4",
"type": "nonstandard"
}
}
]
},
"error": null,
"id": null
}
Ни один из «txid» или «хешей» не соответствует хешу, который я дал ему сначала ( f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c ).
curl --user yourAuth --data-binary '{"jsonrpc": "1.0","id":"curltest","method":"getrawtransaction", "params": ["f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c",true] }' -H 'content-type: text/plain;' http://yourEndPoint
Это возвращает:
{
"result": {
"txid": "f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c",
"hash": "0b637b18840d8fc978a657a3422df3c246c86e4c4046d90e63bf0f86b179b403",
"version": 1,
"size": 223,
"vsize": 142,
"locktime": 0,
"vin": [
{
"txid": "186598dfdfb38f9423384c4e3d220f7963178e1d7c75a058cc7ceed37062a115",
"vout": 1,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"3044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb4652601",
"031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c4"
],
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.05648959,
"n": 0,
"scriptPubKey": {
"asm": "OP_HASH160 2915a7db6c6df171fd0436c7cec0042195dad01c OP_EQUAL",
"hex": "a9142915a7db6c6df171fd0436c7cec0042195dad01c87",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"35SFa5Aev3bjP7gfvfY959GSdWUrSdzoJn"
]
}
},
{
"value": 11.95830840,
"n": 1,
"scriptPubKey": {
"asm": "0 0aad95e932ba045c2daf31a04c36683d39efe910",
"hex": "00140aad95e932ba045c2daf31a04c36683d39efe910",
"reqSigs": 1,
"type": "witness_v0_keyhash",
"addresses": [
"bc1qp2ket6fjhgz9ctd0xxsycdng85u7l6gs2x4dgh"
]
}
}
],
"hex": "0100000000010115a16270d3ee7ccc58a0757c1d8e1763790f223d4e4c3823948fb3dfdf9865180100000000ffffffff023f3256000000000017a9142915a7db6c6df171fd0436c7cec0042195dad01c8738ee4647000000001600140aad95e932ba045c2daf31a04c36683d39efe91002473044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb465260121031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c400000000",
"blockhash": "00000000000000000011ca3164ee629216de2e5dae09ffb099815319f6e35a71",
"confirmations": 1459,
"time": 1555100160,
"blocktime": 1555100160
},
"error": null,
"id": null
}
который имеет правильный идентификатор транзакции (txid).
Они должны были вернуть одну и ту же транзакцию, по крайней мере, тот же txid.
Информация о моем узле:
{
"result": {
"version": 170100,
"subversion": "/Satoshi:0.17.1/",
"protocolversion": 70015,
"localservices": "000000000000040d",
"localrelay": true,
"timeoffset": 10,
"networkactive": true,
"connections": 8,
"networks": [
{
"name": "ipv4",
"limited": false,
"reachable": true,
"proxy": "",
"proxy_randomize_credentials": false
},
{
"name": "ipv6",
"limited": false,
"reachable": true,
"proxy": "",
"proxy_randomize_credentials": false
},
{
"name": "onion",
"limited": true,
"reachable": false,
"proxy": "",
"proxy_randomize_credentials": false
}
],
"relayfee": 0.00001000,
"incrementalfee": 0.00001000,
"localaddresses": [
],
"warnings": ""
},
"error": null,
"id": "curltest"
}
Это (к сожалению) ожидаемое поведение. getrawtransaction
правильно, decoderawtransaction
неверно.
Эта проблема возникает из-за того, что транзакция является транзакцией segwit, которую можно принять за транзакцию ввода 0 с помощью decoderawtransaction
которая должна декодировать транзакции ввода 0. Эвристика, используемая для различения транзакций ввода 0 и транзакций segwit, которые использует decoderawtransaction
не является надежной, и все еще есть некоторые ложные срабатывания, такие как ваша транзакция. getrawtransaction
не сбивает с толку, потому что он извлекает детали транзакции, которая существует в сети и, следовательно, не может быть транзакцией ввода 0. decoderawtransaction
дает неправильный txid, потому что он включает данные segwit в txid, хотя этого не должно быть.
decoderawtransaction
имеет необязательный параметр iswitness
который используется, чтобы указать, следует ли рассматривать транзакцию как транзакцию segwit и декодировать ее как таковую. Вы должны получить правильный результат (такой же, как getrawtransaction
), если установите для него значение true (т.е. bitcoin-cli decoderawtransaction <raw tx> true
).
@ achow101 Спасибо за ваше объяснение, моя проблема решена.
Это сделало бы полезный обмен стеками Вопрос / Ответ!
Самый полезный комментарий
Это (к сожалению) ожидаемое поведение.
getrawtransaction
правильно,decoderawtransaction
неверно.Эта проблема возникает из-за того, что транзакция является транзакцией segwit, которую можно принять за транзакцию ввода 0 с помощью
decoderawtransaction
которая должна декодировать транзакции ввода 0. Эвристика, используемая для различения транзакций ввода 0 и транзакций segwit, которые используетdecoderawtransaction
не является надежной, и все еще есть некоторые ложные срабатывания, такие как ваша транзакция.getrawtransaction
не сбивает с толку, потому что он извлекает детали транзакции, которая существует в сети и, следовательно, не может быть транзакцией ввода 0.decoderawtransaction
дает неправильный txid, потому что он включает данные segwit в txid, хотя этого не должно быть.decoderawtransaction
имеет необязательный параметрiswitness
который используется, чтобы указать, следует ли рассматривать транзакцию как транзакцию segwit и декодировать ее как таковую. Вы должны получить правильный результат (такой же, какgetrawtransaction
), если установите для него значение true (т.е.bitcoin-cli decoderawtransaction <raw tx> true
).