Angenommen, es gibt 3 Personen (A, B, C), die an einem 2-von-3-Multisig-Szenario beteiligt sind. Wenn A & B zustimmen, eine Transaktion zu unterzeichnen, welche Schritte sollten sie unternehmen? Meine Vermutung ist:
Nicht genau.
1.
Zuerst müssen Sie eine Empfangsadresse erstellen, die Ihre "2 von 3 auszugebenden" Gelder enthält. Dafür benötigen Sie drei Pubkeys (pubA, pubB und pubC).
2.
Bilden Sie mit diesen drei Pubkeys ein Multisig-Skript/Adresse. Sie können Bitcoin Cores aufrufen addmultisigaddress nrequired ["key",...]
. Alle drei Teilnehmer sollten dies mit der exakt gleichen Reihenfolge der Pubkeys tun.
addmultisigaddress 2 <pubA> <pubB> <pubC>
Dies spuckt eine Multisig-Adresse aus. Die 2 steht dafür, wie viele Unterschriften nötig sind, um die Eingabe später zu signieren.
Wenn Sie das Einlöse-Skript möchten (Expertenbenutzer), rufen Sie auf validateaddress <newmultisig-addr>
(es gibt ein Zeichenfolgenobjekt namens script
)
3.
Erhalte Münzen mit deiner neu erstellten Multisig-Adresse.
4.
Das Ausgeben der Coins/Inputs erfordert nun 2 Unterschriften. Wenn Sie Bitcoin-Core verwenden, müssen Sie eine (Roh-)Transaktion erstellen, die diese bestimmte Eingabe ausgibt. Dazu müssen Sie die Transaktions-ID und den Ausgabeindex der erhaltenen Münze kennen, die Sie ausgeben möchten.
Mach sowas wie
createrawtransaction
'[{
"txid": "8b9123963a3bbeedac1469daf6111929286e57128812dc08e83a94a3c4e76e3e",
"vout":0
}]'
'{"<newaddress>": <amount>}'
Sie erhalten eine Rohtransaktion, die Sie dann unterzeichnen können (auf Ihrer Seite, erste Unterschrift oder zwei erforderlich).
signrawtransaction <hex from createrawtransaction>
Sie können die teilweise signierte Transaktion an andere Teilnehmer weitergeben und ihnen das Gleiche überlassen:
signrawtransaction <hex from partial signed transaction>
Details: Wenn Sie verwenden, addmultisigaddress
müssen Sie das Reedem-Skript nicht herumreichen und signtransaction
die Parameter von sind viel einfacher.
anhldbk
Pieter Wuille
anhldbk
Jonas Schnelli