Bitcoin: getrawtransaction(verbose) et decoderawtransaction d'une même transaction renvoient des txid différents

Créé le 23 avr. 2019  ·  3Commentaires  ·  Source: bitcoin/bitcoin


Pour la transaction f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c , l'appel de [getrawtransaction(verbose)] et [getrawtransaction(hex) + decoderawtransaction] a un résultat totalement différent, y compris txid.

Étape de reproduction du problème :

  • Utilisez getrawtransaction(hex) + decoderawtransaction
curl --user yourAuth --data-binary '{"jsonrpc": "1.0","id":"curltest","method":"getrawtransaction", "params": ["f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c"] }' -H 'content-type: text/plain;' http://yourEndPoint

Retour:

{
    "result": "0100000000010115a16270d3ee7ccc58a0757c1d8e1763790f223d4e4c3823948fb3dfdf9865180100000000ffffffff023f3256000000000017a9142915a7db6c6df171fd0436c7cec0042195dad01c8738ee4647000000001600140aad95e932ba045c2daf31a04c36683d39efe91002473044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb465260121031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c400000000",
    "error": null,
    "id": null
}

Décoder avec decoderawtransaction :

curl --user yourAuth  --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "decoderawtransaction", "params": ["0100000000010115a16270d3ee7ccc58a0757c1d8e1763790f223d4e4c3823948fb3dfdf9865180100000000ffffffff023f3256000000000017a9142915a7db6c6df171fd0436c7cec0042195dad01c8738ee4647000000001600140aad95e932ba045c2daf31a04c36683d39efe91002473044022002537539ac9586fdd8b5947fa0a47dc002ebe57502608433e103efe2740f93d4022023b1ade7bdf0f002a8fdc4ec6d534588d2132ab88850ac426ea413b4adb465260121031ef964af6923a2111e4916afcc87c73a8980322cc761dd3648714dfda99e72c400000000"] }' -H 'content-type: text/plain;' http://yourEndPoint

Retour:

{
    "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
}

Aucun des "txid" ou "hash" n'égale le hachage que je lui ai donné au début ( f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c ).

  • Utilisez getrawtransaction (verbeux) :
curl --user yourAuth --data-binary '{"jsonrpc": "1.0","id":"curltest","method":"getrawtransaction", "params": ["f4dedd64c9841d53bbda8beeda52235ec986f1400606812d9c033ac34105532c",true] }' -H 'content-type: text/plain;' http://yourEndPoint

Cela renvoie :

{
    "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
}

qui a le bon Id de transaction (txid).

Ils étaient censés retourner la même transaction, au moins retourne le même txid.

Mes informations sur le nœud :

{
  "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"
}

Commentaire le plus utile

C'est (malheureusement) un comportement attendu. getrawtransaction est correct, decoderawtransaction est incorrect.

Ce problème se produit car la transaction est une transaction segwit qui peut être confondue avec une transaction d'entrée 0 par decoderawtransaction qui doit décoder 0 transactions d'entrée. L'heuristique utilisée pour distinguer les transactions 0 input et segwit que decoderawtransaction utilise n'est pas infaillible et il y a encore quelques faux positifs, comme votre transaction. getrawtransaction n'est pas confus car il récupère les détails d'une transaction qui existe sur le réseau et ne peut donc pas être une transaction d'entrée 0. decoderawtransaction donne le mauvais txid car il inclut les données segwit dans le txid alors qu'il ne devrait pas.

decoderawtransaction a un paramètre optionnel iswitness qui est utilisé pour indiquer s'il doit considérer la transaction comme une transaction segwit et la décoder comme telle. Vous devriez obtenir le résultat correct (le même que getrawtransaction ) si vous le définissez sur true (c'est- bitcoin-cli decoderawtransaction <raw tx> true dire

Tous les 3 commentaires

C'est (malheureusement) un comportement attendu. getrawtransaction est correct, decoderawtransaction est incorrect.

Ce problème se produit car la transaction est une transaction segwit qui peut être confondue avec une transaction d'entrée 0 par decoderawtransaction qui doit décoder 0 transactions d'entrée. L'heuristique utilisée pour distinguer les transactions 0 input et segwit que decoderawtransaction utilise n'est pas infaillible et il y a encore quelques faux positifs, comme votre transaction. getrawtransaction n'est pas confus car il récupère les détails d'une transaction qui existe sur le réseau et ne peut donc pas être une transaction d'entrée 0. decoderawtransaction donne le mauvais txid car il inclut les données segwit dans le txid alors qu'il ne devrait pas.

decoderawtransaction a un paramètre optionnel iswitness qui est utilisé pour indiquer s'il doit considérer la transaction comme une transaction segwit et la décoder comme telle. Vous devriez obtenir le résultat correct (le même que getrawtransaction ) si vous le définissez sur true (c'est- bitcoin-cli decoderawtransaction <raw tx> true dire

@ achow101 Merci pour votre explication, mon problème est résolu.

Cela ferait un échange de pile utile Question/Réponse !

Cette page vous a été utile?
0 / 5 - 0 notes