Bitcoin: getrawtransaction (подробный) и decoderawtransaction одной и той же транзакции возвращает разные txid

Созданный на 23 апр. 2019  ·  3Комментарии  ·  Источник: bitcoin/bitcoin


Для транзакции f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c вызов [getrawtransaction (verbose)] и [getrawtransaction (hex) + decoderawtransaction] имеет совершенно другой результат, включая txid.

Шаг воспроизведения проблемы:

  • Используйте getrawtransaction (hex) + decoderawtransaction
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 ).

  • Используйте getrawtransaction (подробный):
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 ).

Все 3 Комментарий

Это (к сожалению) ожидаемое поведение. 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 Спасибо за ваше объяснение, моя проблема решена.

Это сделало бы полезный обмен стеками Вопрос / Ответ!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги