LearnBitcoin

Bitcoin Dev Archive 2019

Using the same public keys, the p2sh returned by `addmultisigaddress` differs from the one returned by `createmultisigaddress`

2 messages, 19 Apr 2019. Started by Michele Federici.

Michele Federici, Andrew Chow

Permalink Original thread on gnusha.org

Michele Federici permalink original

Hi everyone,

I'm writing here because I didn't find any resources in the docs or somewhere else online explaining this, I don't get if this is a bug or I'm missing something.

I was working on a function to derive the pay-to-script-hash from a multisig script and I was checking the results against the bitcoin core's `addmultisigaddress` output, although I was quite sure that my implementation was correct, my output address was different. By chance, I then tried the `createmultisigaddress` method, using the same public keys, and this time the output was matching with mine.

I thought the outputs of `addmultisigaddress` and `createmultisigaddress` were supposed to be the same, but instead are inconsistent from each other:

``` bitcoin-cli addmultisigaddress 1 '["045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0c e382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d","02ac46 c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831","0224a4dc 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07"]' { "address": "36ULucjWUTrDvaJzCyhFoVbDoNS6Zum2Du", "redeemScript": "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c 0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac4 6c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae" } ```

``` bitcoin-cli createmultisig 1 '["045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0c e382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d","02ac46 c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831","0224a4dc 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07"]' { "address": "3GiimyxF1R5VixfBFAbQZbuy9EesD2r6n1", "redeemScript": "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c 0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac4 6c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae" } ```

I was also pretty confused by the fact that the `redeemScript` is the same, only the addresses are different, and calling `decodescript` with it I get the same address as `createmultisig`:

``` bitcoin-cli decodescript "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c 0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac4 6c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae" { "asm": "1 045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0ce38 2458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d 02ac46c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831 0224a4dc5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07 3 OP_CHECKMULTISIG", "reqSigs": 1, "type": "multisig", "addresses": [ "12PfkcWheYsfFddWfHhaXpFDVx78gnKQ9k", "1AYLXzXd6N2avqW4j8Gyhb8jb2jXvNPyuV", "1PWsxtcBMRHTSX2L7wrXgwnFigHD3KhbFT" ], "p2sh": "3GiimyxF1R5VixfBFAbQZbuy9EesD2r6n1" } ```

I don't understand, how can this be possible?

Thank you, Michele

Andrew Chow in reply to Michele Federici permalink original

Hi Michele,

You are seeing this discrepancy due to the address types in use. addmultisigaddress uses the default address type of the wallet, which is p2sh-segwit. createmultisig uses a default address type of legacy. To have createmultisig get addmultisigaddress's result, you need to add the string "p2sh-segwit" to the end of your command. To have addmultisigaddress get createmultisig's result, you need to add the string "legacy" to the end of your command.

On 4/19/19 7:53 AM, Michele Federici via bitcoin-dev wrote:

Quoted text (86 lines)
> Hi everyone,
>
> I'm writing here because I didn't find any resources in the docs or
> somewhere else online explaining this, I don't get if this is a bug or
> I'm missing something.
>
> I was working on a function to derive the pay-to-script-hash from a
> multisig script and I was checking the results against the bitcoin
> core's `addmultisigaddress` output, although I was quite sure that my
> implementation was correct, my output address was different.
> By chance, I then tried the `createmultisigaddress` method, using the
> same public keys, and this time the output was matching with mine.
>
> I thought the outputs of `addmultisigaddress` and
> `createmultisigaddress` were supposed to be the same, but instead are
> inconsistent from each other:
>
> ```
> bitcoin-cli addmultisigaddress 1
> '["045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0c
> e382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d","02ac46
> c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831","0224a4dc
> 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07"]'
> {
> "address": "36ULucjWUTrDvaJzCyhFoVbDoNS6Zum2Du",
> "redeemScript":
> "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c
> 0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac4
> 6c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc
> 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae"
> }
> ```
>
> ```
> bitcoin-cli createmultisig 1
> '["045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0c
> e382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d","02ac46
> c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831","0224a4dc
> 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07"]'
> {
> "address": "3GiimyxF1R5VixfBFAbQZbuy9EesD2r6n1",
> "redeemScript":
> "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c
> 0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac4
> 6c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc
> 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae"
> }
> ```
>
> I was also pretty confused by the fact that the `redeemScript` is the
> same, only the addresses are different, and calling `decodescript` with
> it I get the same address as `createmultisig`:
>
> ```
> bitcoin-cli decodescript
> "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c
> 0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac4
> 6c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc
> 5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae"
> {
> "asm": "1
> 045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0ce38
> 2458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d
> 02ac46c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831
> 0224a4dc5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07 3
> OP_CHECKMULTISIG",
> "reqSigs": 1,
> "type": "multisig",
> "addresses": [
> "12PfkcWheYsfFddWfHhaXpFDVx78gnKQ9k",
> "1AYLXzXd6N2avqW4j8Gyhb8jb2jXvNPyuV",
> "1PWsxtcBMRHTSX2L7wrXgwnFigHD3KhbFT"
> ],
> "p2sh": "3GiimyxF1R5VixfBFAbQZbuy9EesD2r6n1"
> }
> ```
>
> I don't understand, how can this be possible?
>
> Thank you,
> Michele
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation•org
>
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev