Wie Benutzer gemeinsam eine Transaktion in einem Multisig-Szenario signieren?

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:

  1. A erstellt eine Transaktion mit der Multisig-Adresse und signiert sie mit dem privaten Schlüssel von A.
  2. A erhält die Rohtransaktion oben, sendet sie irgendwie (per E-Mail oder etwas anderem) manuell an B.
  3. B signiert es und sendet an das gesamte Bitcoin-Netzwerk.

Antworten (1)

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, addmultisigaddressmüssen Sie das Reedem-Skript nicht herumreichen und signtransactiondie Parameter von sind viel einfacher.

Danke für die Erklärung. Sie sagten: "Sie können die teilweise signierte Transaktion an andere Teilnehmer weitergeben ...". Wie also bestehen? Per Email? Unterstützt das Bitcoin-Netzwerk die Übertragung von teilweise signierten Transaktionen? Wenn dies der Fall ist, müssen andere Teilnehmer nur die Netzwerkereignisse anhören. Viel besser als die Verwendung von E-Mails, oder?
Das Bitcoin-Netzwerk hat keine garantierte Lieferung (mit Ausnahme der bestätigten), ist langsam und teuer, da es jede Transaktion an alle weiterleiten muss. Es gibt keinen Grund, warum andere Knoten im Netzwerk sich die Mühe machen würden, Ihre (aus ihrer Sicht) ungültige Transaktion weiterzuleiten. Schlimmer noch, es wäre ein großer Verlust an Privatsphäre, wenn die Leute beobachten könnten, welche Eingaben von wem signiert werden. Also, nein, es liegt in Ihrer eigenen Verantwortung, die Transaktion von allen Unterzeichnern signieren zu lassen.
@PieterWuille Du hast meinen Tag gerettet! Vielen Dank.
Es gibt zentralisierte Lösungen, die teilweise signierte Transaktionen "weitergeben" (Bitpays Copay ist ein Beispiel). Leider gibt es derzeit keine dezentrale Lösung (ich könnte mir vorstellen, dass sich ein P2P-Netzwerk darum kümmert).