1

i have a confuse about the "getrawtransaction" RPC function,it returns a json object, which contains the addresses list in the "vout" object,like below.It took me some time to understand when the multiple addresses will contains many items,as i see, it always only one item, After reading the source code, I also found that even for multi signature transactions, there will not be multiple addresses. I need somebody help!please!

 {
      "value": 1000000,
      "script": "a914d550ecfc60d9f976de1f2a43bdf4e491b684cd6887",
      "spent_by": "cd2494071876f91e1f9505f5c5421088c7df2e6f939c17f742d3638bc7df789a",
      "addresses": [
        "3M8voDot82tBrQE7QWGy9WUWxp7gDU7owx"
      ],
      "script_type": "pay-to-script-hash"
 }

full url is: https://api.blockcypher.com/v1/btc/main/txs/46001fade64b8fa23815066ec62cc4a91ee0c8f4a4fad26e428bc4c0a2146290


I tried to send a multi sign transaction to the test network, and then looked at the data, and found that there was only one address.

1

It is a left over API design from bare multisig transactions.

The example you provided is a P2SH multisig - in this, the actual output script has no way of telling Bitcoin Core that it is a multisig output. It can be any script. Thus, Bitcoin Core just decodes it to a regular P2SH address.

Although no longer commonly used, there are also bare multisig outputs, which use multisig scripts that are not wrapped in a P2SH. These would be of the form M <pub1> <pub2> ... <pubN> N OP_CHECKMULTISIG for a M-of-N multisig (this is the redeem script for a P2SH multisig).

When Bitcoin Core used to decode these, you'd get one address per public key, hence the array.

  • I think MULTISIG public keys are hashed to addresses and are shown in the addresses list as well. See script/standard.cpp line 212 (in ExtractDestinations). For each pubkey, it does CTxDestination address = PKHash(pubKey); addressRet.push_back(address); – Jose Fonseca Oct 23 at 2:02
  • Correct - p2pkh (1..) addresses are based on the public key hash, but the public key is not hashed in the bare multisig script. Bitcoin Core will hash it as part of converting it for display purposes. – Raghav Sood Oct 23 at 2:11
  • Understood, but doesn't this subroutine hash the pubkeys found inside the script? – Jose Fonseca Oct 23 at 2:14
  • 1
    It does, yes. But it will only hash it for pubkeys in a bare multisig output. In a P2SH multisig output, the pubkeys are disclosed when spending the coins, not when receiving them. – Raghav Sood Oct 23 at 2:25
  • Got ya. Understood now. Thanks. – Jose Fonseca Oct 23 at 2:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.