• Welcome to forex.pm forex forum binary options trade. Please login or sign up.
 

How does createrawtransaction get the pubkey hash from the provided address?

Started by Bitcoin, Feb 10, 2022, 09:43 am

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Bitcoin

How does createrawtransaction get the pubkey hash from the provided address?

The createrawtransaction RPC takes as parameters the source TX ID and the UTXO index (to create the new unsigned input) and the destination address and amount of bitcoins (to create the new output).



In the output created, the scriptPubKey is a standard P2PKH script containing the pubkey hash. What I don't understand is...if createrawtransaction only received the address, how did it get the pubkey hash from it?



I understand that going from the pubkey hash to the address is pretty easy:



[PubKey Hash] -> Add network bytes -> SHA-256 -> SHA-256 -> checksum -> Base58Check -> [BTC Address]


So how does createrawtransaction go the other way from BTC Address -> PubKey Hash?



To show this, you can follow my steps using this web based interface of Bitcoin API:



http://chainquery.com/bitcoin-api/createrawtransaction



In that page, let's use this transaction for the Outpoints



f0f5ad66b8c09a8b5ec5a379439281a32fc446e0185c3b1b854880d3dc49d065


and output index 3



Now, for the Outputs, use this address



183XLwHyKJGCD9Dj9Pafv2zoqfiXWd5WMZ


and put 0.00159468 as the amount of BTC.



Click Execute Command and you should get this result



{
"result": "020000000165d049dcd38048851b3b5c18e046c42fa381924379a3c55e8b9ac0b866adf5f00300000000ffffffff01ec6e0200000000001976a9144d430ac5863757f5dc45f475d7cd2ccf43cf784588ac00000000",
"error": null,
"id": null


}



Now, let's decode this transaction with decoderawtransaction RPC



http://chainquery.com/bitcoin-api/decoderawtransaction



Just put there the "result" field value you got from the previous response. Click Execute Command and you'll get the raw transaction



{
"result": {
    "txid": "8d02780fbd265fdeaf08195b5488fc309270a8ff9d23043d0dfc9a0d8599a01c",
    "hash": "8d02780fbd265fdeaf08195b5488fc309270a8ff9d23043d0dfc9a0d8599a01c",
    "version": 2,
    "size": 85,
    "vsize": 85,
    "locktime": 0,
    "vin": [
        {
            "txid": "f0f5ad66b8c09a8b5ec5a379439281a32fc446e0185c3b1b854880d3dc49d065",
            "vout": 3,
            "scriptSig": {
                "asm": "",
                "hex": ""
            },
            "sequence": 4294967295
        }
    ],
    "vout": [
        {
            "value": 0.00159468,
            "n": 0,
            "scriptPubKey": {
                "asm": "OP_DUP OP_HASH160 4d430ac5863757f5dc45f475d7cd2ccf43cf7845 OP_EQUALVERIFY OP_CHECKSIG",
                "hex": "76a9144d430ac5863757f5dc45f475d7cd2ccf43cf784588ac",
                "reqSigs": 1,
                "type": "pubkeyhash",
                "addresses": [
                    "183XLwHyKJGCD9Dj9Pafv2zoqfiXWd5WMZ"
                ]
            }
        }
    ]
},
"error": null,
"id": null


}



If you see the scriptPubKey script, i.e.



OP_DUP OP_HASH160 4d430ac5863757f5dc45f475d7cd2ccf43cf7845 OP_EQUALVERIFY OP_CHECKSIG


you can see the pubkey hash is there



4d430ac5863757f5dc45f475d7cd2ccf43cf7845


and this pubkey hash matches the address given as parameter in the beginning. You can verify this by pasting the pubkey hash in step #3 in this page:



http://gobittest.appspot.com/Address



and clicking Send. You should get this address



183XLwHyKJGCD9Dj9Pafv2zoqfiXWd5WMZ


in step #9.



So, my question once again...how did createrawtransaction go from the address to the pubkey hash if it didn't have the public key?


Source: How does createrawtransaction get the pubkey hash from the provided address?