<p>Addresses are just a shorthand to encode a locking script. When a locking script requires multiple signatures to be unlocked, it's still a single address. So, when you're writing an indexer, you can likely get away with simply not distinguishing singlesig and multisig addresses in the first iteration.</p>

CC BY-SA 4.0
2019-08-02T19:19:53.560Z
2021-09-03T15:08:45.680Z
2021-09-03T15:08:45.680Z
Murch
<p>Take a look at this transaction  </p>

<p>055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9 (Bitcoin mainnet) </p>

<p>(<a href="https://www.blockchain.com/btc/tx/055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9" rel="nofollow noreferrer">https://www.blockchain.com/btc/tx/055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9</a>)</p>

<p>However, the web explorers fail to present these properly, so here's what you get if you decode it with your own node: </p>

<pre><code>{
    "txid": "055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9",
    "version": 1,
    "locktime": 0,
    "vin": [
        {
            "txid": "b187426f2fdd5a7ac2f49d822f68e07f48486ee53a8a45de2494f12acb37a0d8",
            "vout": 3,
            "scriptSig": {
                "asm": "3046022100d78c31a20fa11533475be893b229eb4d252e600dcc2a0735d360c541b6aec813022100e3eaa72c915ef47d94ccbd18c2ba6d9ae5b98be6e9fbf968d4bbbb003e06d68701 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc"
            },
            "sequence": 4294967295,
            "n": 0,
            "addr": "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
            "valueSat": 1114144,
            "value": 0.01114144,
            "doubleSpentTxID": null
        }
    ],
    "vout": [
        {
            "value": "0.00010860",
            "n": 0,
            "scriptPubKey": {
                "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20434e545250525459000000140001a9e0e85838b5000000174876e800010053b6 2 OP_CHECKMULTISIG",
                "reqSigs": 1,
                "type": "multisig",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
                    "1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E"
                ]
            }
        },
        {
            "value": "0.00010860",
            "n": 1,
            "scriptPubKey": {
                "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20a3c3000000000000000000000000000000000000000000000000000000000000 2 OP_CHECKMULTISIG",
                "reqSigs": 1,
                "type": "multisig",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
                    "1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E"
                ]
            }
        },
        {
            "value": "0.00010860",
            "n": 2,
            "scriptPubKey": {
                "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 100000000000000000000000000000000000000000000000000000000000000000 2 OP_CHECKMULTISIG",
                "reqSigs": 1,
                "type": "multisig",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
                    "1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E"
                ]
            }
        },
        {
            "value": "0.01061564",
            "n": 3,
            "scriptPubKey": {
                "asm": "OP_DUP OP_HASH160 a2f2d251cc06ec1e789800127e3fa6ed9e515651 OP_EQUALVERIFY OP_CHECKSIG",
                "reqSigs": 1,
                "type": "pubkeyhash",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao"
                ]
            }
        }
    ],
    "blockhash": "0000000000000000491fdff68a1c99de7798278a791e461b8d5bebdd9df9de46",
    "confirmations": 1,
    "time": 1401911255,
    "blocktime": 1401911255,
    "valueOut": 0.01094144,
    "size": 433,
    "valueIn": 0.01114144,
    "fees": 0.0002
}
</code></pre>

<p>I'm actually the person who asked this question and after lots of research, I'm pretty sure this kind of transaction can not occur in a scenario when you give your users unique bitcoin addresses for deposits. I think this will only happen when the addresses were intentionally made multisig, however, I'm not sure how and why.</p>

<p>I've done a small experiment where I've made a testnet multisig address and sent some funds to it. I were expecting it to act exactly like in the transaction above, however, it didn't. I think the reason for it is because there has to be a different type of script and I want to know what is it and how to work with it. </p>

<p>Here's what I did:</p>

<p>First I've created 2 new addresses.</p>

<pre><code>index@LAPTOP-QHUBB7MI:~$ btc getnewaddress
2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o
index@LAPTOP-QHUBB7MI:~$ btc getnewaddress
2N2yDtoRTChgrD675GJ12JE3wXzk3hMzgoP
</code></pre>

<p>Then I got their public keys using the getaddressinfo rpc.</p>

<pre><code>index@LAPTOP-QHUBB7MI:~$ btc getaddressinfo 2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o
{
  "address": "2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o",
  "scriptPubKey": "a9140254bfce5627cc6267eb2aaa75dce00f03bc13dc87",
  "ismine": true,
  "solvable": true,
  ...
  "pubkey": "02d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af8",
  ...

}
index@LAPTOP-QHUBB7MI:~$ btc getaddressinfo 2N2yDtoRTChgrD675GJ12JE3wXzk3hMzgoP
{
  "address": "2N2yDtoRTChgrD675GJ12JE3wXzk3hMzgoP",
  "scriptPubKey": "a9146aaa8606a93804de00e4e91c683dbfd5e1caa7d887",
  "ismine": true,
  "solvable": true,
  ...
  "pubkey": "0236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c623262b1f0e0326",
  ...
}
</code></pre>

<p>Then I created the multisig address.</p>

<pre><code>index@LAPTOP-QHUBB7MI:~$ btc createmultisig 1 '["0236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c623262b1f0e0326", "02d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af8"]'
{
  "address": "2Mu6J8iXwzCgWxJzVNkzfQ8yZwJ92YWW6es",
  "redeemScript": "51210236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c623262b1f0e03262102d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af852ae"
}
</code></pre>

<p>Finally, I sent some bitcoin to the address. </p>

<pre><code>index@LAPTOP-QHUBB7MI:~$ btc sendtoaddress 2Mu6J8iXwzCgWxJzVNkzfQ8yZwJ92YWW6es 0.00999744
1373fd7a2da3199e0f4ead0a5456266b52263356a86b726882dbc03da1625ed1
</code></pre>

<p>I decoded that transaction (Testnet) and got this</p>

<pre><code>{
  "txid": "1373fd7a2da3199e0f4ead0a5456266b52263356a86b726882dbc03da1625ed1",
  "hash": "290a0ec0c306a4485a7099c1f7813d9f9a741a9b4fcc68c5decc68de5ddb1b14",
  "version": 2,
  "size": 338,
  "vsize": 173,
  "weight": 692,
  "locktime": 1572217,
  "vin": [
    {
      "txid": "7e57de9ce9797e8c5face7c3ed7ce89eb3107b05e00c129f336cebc1b1113dcb",
      "vout": 1,
      "scriptSig": {
        "asm": "00205a010c52d33bfac812f62f2cb7f917a3b84f67c66c1ac9ac1701c7caa4e5da7c",
        "hex": "2200205a010c52d33bfac812f62f2cb7f917a3b84f67c66c1ac9ac1701c7caa4e5da7c"
      },
      "txinwitness": [
        "",
        "304402206b7f9fcdf972a2aaa6a734e921d1f76b3da3a0f7a98e2bf3657241ed0cc4433a022040b1f0f31b6231ff73465986c3379ce15cbf2b33e28b09460aac8812d8e9826801",
        "304402200ffeeb246535a312f33c05652f9ef5d696fd26883659e6429731e5f0416be9fc022067a5852e99f96c5def0f7288b9a7ba567e3df258fd79071a60694580ac3de1fc01",
        "522103a8f863c198bfa005273ae53d9db239e3be2cabcd5cbf34f52318795166f5cdff2102cff91271435f4f121aa90f3babc5551090f862575e5eb12429acb8e6daf4d8cd52ae"
      ],
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 0.00999744,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 143ff7e3677973ecd914d8d134efde5adff4a96b OP_EQUAL",
        "hex": "a914143ff7e3677973ecd914d8d134efde5adff4a96b87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2Mu6J8iXwzCgWxJzVNkzfQ8yZwJ92YWW6es"
        ]
      }
    }
  ]
}
</code></pre>

<p>Which is a totally normal-looking one.</p>

<p>Even though I'm almost certain this won't happen in the scenario I described, I want I final confirmation from someone who understands how these transaction work and explain.  </p>

CC BY-SA 4.0
2019-08-03T00:25:04.303Z
2019-08-03T00:25:04.303Z
zabbir
<p>Just saw good question on Telegram:</p>

<p>So I working on an algorithm that would download and process bitcoin blocks, specifically the transactions in them. I want to take every output address of every transaction in a block and query my database if any users own this address as their deposit address. Initially I thought an output can only have one address and so I can just credit the person who owns it with the amount of that output. But now I found out that an output can actually have multiple addresses to it and thats called multisig. I don’t really understand the concept of this. So what if a person uses his deposit address that I’ve given them as first address and they also use another address of their own as second address in a single output? Can they use that output with their address to waste it so then so I lose the money they deposited?</p>

CC BY-SA 4.0
2021-09-02T21:40:05.560Z
I would like to contact you. My email address is in my profile, you can reach me there. Thank you for your time.
jokkmokk
<multi-signature>
Question regarding MultiSig outputs
baysx
# Question regarding MultiSig outputs

(Asked by: username_0 on 2019-08-01)

Just saw good question on Telegram:

So I working on an algorithm that would download and process bitcoin blocks, specifically the transactions in them. I want to take every output address of every transaction in a block and query my database if any users own this address as their deposit address. Initially I thought an output can only have one address and so I can just credit the person who owns it with the amount of that output. But now I found out that an output can actually have multiple addresses to it and thats called multisig. I don’t really understand the concept of this. So what if a person uses his deposit address that I’ve given them as first address and they also use another address of their own as second address in a single output? Can they use that output with their address to waste it so then so I lose the money they deposited?

**Tags:** multi-signature

> **Comments:**
> **username_1**: I would like to contact you. My email address is in my profile, you can reach me there. Thank you for your time.  

---

## 2 answers

### Answer by username_2 on 2019-08-02. Score: 1

Addresses are just a shorthand to encode a locking script. When a locking script requires multiple signatures to be unlocked, it's still a single address. So, when you're writing an indexer, you can likely get away with simply not distinguishing singlesig and multisig addresses in the first iteration.


---

### Answer by username_3 on 2019-08-03. Score: 0

Take a look at this transaction  
055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9 (Bitcoin mainnet) 
(https://www.blockchain.com/btc/tx/055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9)
However, the web explorers fail to present these properly, so here's what you get if you decode it with your own node: 
{
    "txid": "055f9c6dc094cf21fa224e1eb4a54ee3cc44ae9daa8aa47f98df5c73c48997f9",
    "version": 1,
    "locktime": 0,
    "vin": [
        {
            "txid": "b187426f2fdd5a7ac2f49d822f68e07f48486ee53a8a45de2494f12acb37a0d8",
            "vout": 3,
            "scriptSig": {
                "asm": "3046022100d78c31a20fa11533475be893b229eb4d252e600dcc2a0735d360c541b6aec813022100e3eaa72c915ef47d94ccbd18c2ba6d9ae5b98be6e9fbf968d4bbbb003e06d68701 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc"
            },
            "sequence": 4294967295,
            "n": 0,
            "addr": "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
            "valueSat": 1114144,
            "value": 0.01114144,
            "doubleSpentTxID": null
        }
    ],
    "vout": [
        {
            "value": "0.00010860",
            "n": 0,
            "scriptPubKey": {
                "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20434e545250525459000000140001a9e0e85838b5000000174876e800010053b6 2 OP_CHECKMULTISIG",
                "reqSigs": 1,
                "type": "multisig",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
                    "1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E"
                ]
            }
        },
        {
            "value": "0.00010860",
            "n": 1,
            "scriptPubKey": {
                "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 20a3c3000000000000000000000000000000000000000000000000000000000000 2 OP_CHECKMULTISIG",
                "reqSigs": 1,
                "type": "multisig",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
                    "1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E"
                ]
            }
        },
        {
            "value": "0.00010860",
            "n": 2,
            "scriptPubKey": {
                "asm": "1 030e001332b43924be343986cca3df669f57b0dedd120990e727787f8dea50fdbc 100000000000000000000000000000000000000000000000000000000000000000 2 OP_CHECKMULTISIG",
                "reqSigs": 1,
                "type": "multisig",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao",
                    "1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E"
                ]
            }
        },
        {
            "value": "0.01061564",
            "n": 3,
            "scriptPubKey": {
                "asm": "OP_DUP OP_HASH160 a2f2d251cc06ec1e789800127e3fa6ed9e515651 OP_EQUALVERIFY OP_CHECKSIG",
                "reqSigs": 1,
                "type": "pubkeyhash",
                "addresses": [
                    "1FrbMcddiM1v3HMpUqygjZYCamBykWCWao"
                ]
            }
        }
    ],
    "blockhash": "0000000000000000491fdff68a1c99de7798278a791e461b8d5bebdd9df9de46",
    "confirmations": 1,
    "time": 1401911255,
    "blocktime": 1401911255,
    "valueOut": 0.01094144,
    "size": 433,
    "valueIn": 0.01114144,
    "fees": 0.0002
}

I'm actually the person who asked this question and after lots of research, I'm pretty sure this kind of transaction can not occur in a scenario when you give your users unique bitcoin addresses for deposits. I think this will only happen when the addresses were intentionally made multisig, however, I'm not sure how and why.
I've done a small experiment where I've made a testnet multisig address and sent some funds to it. I were expecting it to act exactly like in the transaction above, however, it didn't. I think the reason for it is because there has to be a different type of script and I want to know what is it and how to work with it. 
Here's what I did:
First I've created 2 new addresses.
index@LAPTOP-QHUBB7MI:~$ btc getnewaddress
2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o
index@LAPTOP-QHUBB7MI:~$ btc getnewaddress
2N2yDtoRTChgrD675GJ12JE3wXzk3hMzgoP

Then I got their public keys using the getaddressinfo rpc.
index@LAPTOP-QHUBB7MI:~$ btc getaddressinfo 2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o
{
  "address": "2MsTYs9Ymsh332Ctou3dyxVe5PoTW4fLp2o",
  "scriptPubKey": "a9140254bfce5627cc6267eb2aaa75dce00f03bc13dc87",
  "ismine": true,
  "solvable": true,
  ...
  "pubkey": "02d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af8",
  ...

}
index@LAPTOP-QHUBB7MI:~$ btc getaddressinfo 2N2yDtoRTChgrD675GJ12JE3wXzk3hMzgoP
{
  "address": "2N2yDtoRTChgrD675GJ12JE3wXzk3hMzgoP",
  "scriptPubKey": "a9146aaa8606a93804de00e4e91c683dbfd5e1caa7d887",
  "ismine": true,
  "solvable": true,
  ...
  "pubkey": "0236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c623262b1f0e0326",
  ...
}

Then I created the multisig address.
index@LAPTOP-QHUBB7MI:~$ btc createmultisig 1 '["0236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c623262b1f0e0326", "02d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af8"]'
{
  "address": "2Mu6J8iXwzCgWxJzVNkzfQ8yZwJ92YWW6es",
  "redeemScript": "51210236240c39790e770bc0c378bebb1a86d2ac24f835b6e81e69c623262b1f0e03262102d01d8e315567fb3571f31d86eb53d21729c6072751276d0c2617d787d48b2af852ae"
}

Finally, I sent some bitcoin to the address. 
index@LAPTOP-QHUBB7MI:~$ btc sendtoaddress 2Mu6J8iXwzCgWxJzVNkzfQ8yZwJ92YWW6es 0.00999744
1373fd7a2da3199e0f4ead0a5456266b52263356a86b726882dbc03da1625ed1

I decoded that transaction (Testnet) and got this
{
  "txid": "1373fd7a2da3199e0f4ead0a5456266b52263356a86b726882dbc03da1625ed1",
  "hash": "290a0ec0c306a4485a7099c1f7813d9f9a741a9b4fcc68c5decc68de5ddb1b14",
  "version": 2,
  "size": 338,
  "vsize": 173,
  "weight": 692,
  "locktime": 1572217,
  "vin": [
    {
      "txid": "7e57de9ce9797e8c5face7c3ed7ce89eb3107b05e00c129f336cebc1b1113dcb",
      "vout": 1,
      "scriptSig": {
        "asm": "00205a010c52d33bfac812f62f2cb7f917a3b84f67c66c1ac9ac1701c7caa4e5da7c",
        "hex": "2200205a010c52d33bfac812f62f2cb7f917a3b84f67c66c1ac9ac1701c7caa4e5da7c"
      },
      "txinwitness": [
        "",
        "304402206b7f9fcdf972a2aaa6a734e921d1f76b3da3a0f7a98e2bf3657241ed0cc4433a022040b1f0f31b6231ff73465986c3379ce15cbf2b33e28b09460aac8812d8e9826801",
        "304402200ffeeb246535a312f33c05652f9ef5d696fd26883659e6429731e5f0416be9fc022067a5852e99f96c5def0f7288b9a7ba567e3df258fd79071a60694580ac3de1fc01",
        "522103a8f863c198bfa005273ae53d9db239e3be2cabcd5cbf34f52318795166f5cdff2102cff91271435f4f121aa90f3babc5551090f862575e5eb12429acb8e6daf4d8cd52ae"
      ],
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 0.00999744,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 143ff7e3677973ecd914d8d134efde5adff4a96b OP_EQUAL",
        "hex": "a914143ff7e3677973ecd914d8d134efde5adff4a96b87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "2Mu6J8iXwzCgWxJzVNkzfQ8yZwJ92YWW6es"
        ]
      }
    }
  ]
}

Which is a totally normal-looking one.
Even though I'm almost certain this won't happen in the scenario I described, I want I final confirmation from someone who understands how these transaction work and explain.


---

