Vor einiger Zeit bemerkte ich, dass die Methoden von Bitcoin Core bei gleichen Eingaben addmultisigaddress
unterschiedliche createmultisig
p2sh (Adressen) generierten.
Ich habe mich umgehört und ein Benutzer von der Bitcoin-Entwicklerliste sagte mir, dass dies daran lag:
"addmultisigaddress verwendet den Standardadresstyp der Brieftasche, der p2sh-segwit ist, und createmultisig verwendet einen Standardadresstyp von Legacy"
Ein Beispiel für dieses Verhalten ist:
bitcoin-cli addmultisigaddress 1 '["045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d","02ac46c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831","0224a4dc5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07"]'
{
"address": "36ULucjWUTrDvaJzCyhFoVbDoNS6Zum2Du",
"redeemScript": "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac46c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae"
}
bitcoin-cli createmultisig 1 '["045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d","02ac46c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831","0224a4dc5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e07"]'
{
"address": "3GiimyxF1R5VixfBFAbQZbuy9EesD2r6n1",
"redeemScript": "5141045897fee25bd7c5692510b2f50fcae9aa20fbc4d49d59814f4c7fdb5c4bc6eb1c0ce382458f9588e922e0d509ed8d34856787380075b00418b02e0bf7c652ef9d2102ac46c6d74d15e60f4f1035ff07ef740aca1d68d55ba0b8d336a73d7a35858831210224a4dc5620714a9ecf67a09583d1e4c04f5bedb8ecea99028da05bb15a2a7e0753ae"
}
Der Punkt ist, dass ich später bemerkte, dass die beiden Methoden mit bestimmten öffentlichen Schlüsseln denselben Hash erzeugen:
bitcoin-cli addmultisigaddress 1 '["03fc5e16d0ece343a94735ca467d5812922fcc30e3ce43ceaf3cff7d7617631146","02ea92a0cd1738cef7502e42fe119a322845f8f1a2dd9b7216635e17dd2fffd101","04633794a75bfbd9fb2bc6bd54836831c0916dc27f9ac528045cc9352bb2cc97a003b3a6ae397101d801f3d95e6a153368b939aaf7b27bd3a5bb8a30ed92aac204"]'
{
"address": "32AVnYUUSvm4bGgEXoQ2zuFAJBPH4P31Gi",
"redeemScript": "512103fc5e16d0ece343a94735ca467d5812922fcc30e3ce43ceaf3cff7d76176311462102ea92a0cd1738cef7502e42fe119a322845f8f1a2dd9b7216635e17dd2fffd1014104633794a75bfbd9fb2bc6bd54836831c0916dc27f9ac528045cc9352bb2cc97a003b3a6ae397101d801f3d95e6a153368b939aaf7b27bd3a5bb8a30ed92aac20453ae"
}
bitcoin-cli createmultisig 1 '["03fc5e16d0ece343a94735ca467d5812922fcc30e3ce43ceaf3cff7d7617631146","02ea92a0cd1738cef7502e42fe119a322845f8f1a2dd9b7216635e17dd2fffd101","04633794a75bfbd9fb2bc6bd54836831c0916dc27f9ac528045cc9352bb2cc97a003b3a6ae397101d801f3d95e6a153368b939aaf7b27bd3a5bb8a30ed92aac204"]'
{
"address": "32AVnYUUSvm4bGgEXoQ2zuFAJBPH4P31Gi",
"redeemScript": "512103fc5e16d0ece343a94735ca467d5812922fcc30e3ce43ceaf3cff7d76176311462102ea92a0cd1738cef7502e42fe119a322845f8f1a2dd9b7216635e17dd2fffd1014104633794a75bfbd9fb2bc6bd54836831c0916dc27f9ac528045cc9352bb2cc97a003b3a6ae397101d801f3d95e6a153368b939aaf7b27bd3a5bb8a30ed92aac20453ae"
}
Ich verstehe nicht, wie dies möglich sein kann, wenn die Eingaben und die Einlöseskripte identisch sind.
Was ist der Unterschied zwischen den beiden Fällen und im Allgemeinen zwischen einer Legacy-Multisig-Transaktion und einer Segwit-Transaktion?
Wie kann man beim Lesen von rohen Transaktionsdaten aus der Blockchain wissen, ob ein Skript mit Legacy oder Segwit gehasht werden muss?
Ich glaube, das Verhalten, das Sie sehen, ist tatsächlich ein Fehler.
Verwendet standardmäßig addmultisigaddress
p2sh-segwit, den Standardadresstyp für die Brieftasche. Verwendet standardmäßig createmultisig
Legacy. Dies sind zwei verschiedene Adresstypen, und normalerweise erhalten Sie zwei verschiedene Adressen.
Segwit erlaubt jedoch keine unkomprimierten öffentlichen Schlüssel. Wenn also das RedeemScript erstellt wird und ein unkomprimierter öffentlicher Schlüssel erkannt wird, geben beide RPCs Legacy-Adressen zurück. Deshalb sehen Sie im zweiten Beispiel dieselbe Adresse.
Aber ich glaube da ist ein Bug. Ihr erstes Beispiel sollte auch die gleichen Legacy-Adressen geben, tut es aber nicht. Ich denke, das liegt daran, dass der unkomprimierte Pubkey nicht Teil der Brieftasche ist, sodass nicht korrekt erkannt wird, dass es sich um einen unkomprimierten Pubkey handelt. Folgt also addmultisigaddress
seinem Standard, um Ihnen die p2sh-segwit-Adresse zu geben, und createmultisig
folgt seinem Standard, um Ihnen die Legacy-Adresse zu geben.
Wie kann man beim Lesen von rohen Transaktionsdaten aus der Blockchain wissen, ob ein Skript mit Legacy oder Segwit gehasht werden muss?
Für p2sh-segwit ist das einlösenScript nicht wirklich das einlösenScript, das Sie von den RPCs erhalten. Vielmehr ist es das Skript für eine P2WSH-Ausgabe. Das "redeemScript" ist eigentlich das WitnessScript für das P2WSH-Skript, das das eigentliche RedeemScript ist. Der Skripttyp (entweder im scriptPubKey oder im resolveScript) bestimmt, ob diese Ausgabe segwit ist oder nicht.
Ugam Kamat
Michèle
Ugam Kamat
Andreas Chow