Bitcoin Forum
December 12, 2024, 03:42:40 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 »  All
  Print  
Author Topic: Praktische Umsetzung von Multi-Signature-Wetten im Forum  (Read 639 times)
twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 09, 2018, 10:18:35 PM
Last edit: March 04, 2018, 09:38:23 PM by twbt
Merited by qwk (5), phantastisch (5)
 #1

Übersicht
Ausgangssituation
Grundlagen
Umsetzung mit drei Teilnehmern
Umsetzung mit drei Teilnehmern und Schiedsrichter
Nützliche Links
tl;dr

Ausgangssituation
Nachdem es im Kursverlaufs-Thread immer mal wieder zu der Situation kommt, dass verschiedene Beiträger mit ihren Chartanalysen, Kursphantasien, Wutausbrüchen und FUD-Trollereien am Ende sind, hat es sich als hilfreich erwiesen, einfach einen kleinen Wettspaß zu unternehmen - und auf zukünftige Kurs-Entwicklungen (oder sonstige Ereignisse der Kryptowelt) eine Wette abzuschließen. Frei nach dem Motto: put your money where your mouth is.

Meistens verlaufen solche Wetten unkompliziert, manchmal münden sie in umfänglicher Großzügigkeit, zuweilen kommt es aber auch zu Verwerfungen - seien es nicht hinreichend definierte Wettbedingungen oder bewusste Täuschungsmanöver gänzlich Unbeteiligter.

Dieser Thread hat deshalb das Ziel, einwenig drüber nachzudenken, wie man Wetten im Forum besser formalisieren, dabei Bitcoin-Funktionalitäten sinnvoll nutzen und auch noch etwas über smarte Verträge, die durch das Bitcoin-Protokoll ermöglicht werden, lernen kann. Hierzu gab es schon hier, da und da Umsetzungen, wir fangen also nicht bei Null an.

Grundlagen
Wetten sind ideale Anwendungsfälle für Smart Contracts, sofern sich sämtliche Wettbedingungen und Auszahlungsmodalitäten in einem Algorithmus abbilden lassen, der automatisch die Erfüllungsbedingungen des geschlossenen Vertrages überprüfen und die resultierenden Auszahlungen an die Wettbeteiligten zum vertraglich vereinbarten Zeitpunkt vornehmen kann. Das Bitcoin-Protokoll kann eine solche Abbildung nicht leisten, es verfügt jedoch über eine Teilfunktionalität, sofern man sich einer Multi-Signature-Adresse bedient.

Um Transaktionen von einer Multi-Signature-Adresse durchzuführen, muss eine zuvor definierte Anzahl von Beteiligten (n von m) mit ihren passenden Private-Keys die Transaktion signieren. Für eine Wette hat dies den Vorteil, dass das Vertrauen in deren Einlösung über mehrere Stellen verteilt wird und nicht allein abhängig vom Willen und der Fähigkeit jedes einzelnen Wett-Teilnehmers oder eines Escrows ist. Insofern formalisiert die Verwendung von Multi-Signature-Adressen den Auszahlungsteil der geschlossenen Wette, kann aber nicht den Bedingungsteil derselben realisieren.

Für die Wettpraxis bedeutet dies: Die Wettbedingungen müssen natürlichsprachlich möglichst eindeutig formuliert, die Auszahlungsbedingungen formalisiert werden. Herrscht Einigkeit über die Bedingungen, müssen sich die Teilnehmer zu diesen bekennen. Dies geschieht durch Bekanntmachung des Public-Keys jedes Teilnehmers. Stehen alle Public-Keys sämtlicher Teilnehmer zur Verfügung, generieren sie eine Multi-Signature-Adresse auf dieser Grundlage. Anschließend leistet jeder Teilnehmer eine Transaktion des Wetteinsatzes an diese Adresse.

Umsetzung mit drei Teilnehmern
Die nachfolgende Beispielumsetzung nutzt die API von Bitcoin Core. Parallel wird das Vorgehen über die Python-Konsole von Electrum dokumentiert sowie die Nutzung der Pybitcointools. Ebenfalls wird auf die Nutzung der Online-Implementierung von Coinb.in verwiesen, die recht praktisch ist, zum Signieren jedoch nicht bzw. nur offline verwendet werden sollte. Im BitcoinBlog findet sich eine Beschreibung zur Nutzung von Electrum. Die Multi-Signature-Umsetzung in Electrum basiert auf der Verwendung von Master-Public- und Master-Private-Keys nach BIP32. Erstellt würde also ein gemeinsames Wallet mit einer beliebigen Anzahl von Adressen für alle Teilnehmer. Das Verfahren weicht insofern von der nachfolgend beschriebenen Umsetzung mit den Keys der Einzeladressen ab.

Schritt 1: Public-Keys bereitstellen
Jeder Teilnehmer wählt eine (am besten bislang nicht verwendete) Adresse, über deren Private-Key er verfügt, und stellt den Public-Key dieser allen anderen Beteiligten zur Verfügung. Die Adressen dienen allein zum Signieren der Auszahlung in Schritt 4, nicht der Übersendung oder dem Halten der Wetteinsätze:

Input Teilnehmer 1
Code: (Bitcoind)
validateaddress 15p1QoP2VwHUU2PaFtgEAGuU7Y3p9P59Zd
Code: (Electrum)
getpubkeys("15p1QoP2VwHUU2PaFtgEAGuU7Y3p9P59Zd")
Code: (Pybitcointools)
pybtctool privtopub {myprivkey}

Output Teilnehmer 1
Code: (Public-Key)
02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca

Input Teilnehmer 2
Code: (Bitcoind)
validateaddress 14igQFDVN86HQ2tdo5QTqjTVUhz7Cjb2jV
Code: (Electrum)
getpubkeys("14igQFDVN86HQ2tdo5QTqjTVUhz7Cjb2jV")
Code: (Pybitcointools)
pybtctool privtopub {myprivkey}

Output Teilnehmer 2
Code: (Public-Key)
031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b14

Input Teilnehmer 3
Code: (Bitcoind)
validateaddress 1KtCSrphdSHVv9yumCGgecju6mBb2isMTR
Code: (Electrum)
getpubkeys("1KtCSrphdSHVv9yumCGgecju6mBb2isMTR")
Code: (Pybitcointools)
pybtctool privtopub {myprivkey}

Output Teilnehmer 3
Code: (Public-Key)
02a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9

Bei Nutzung von Electrum kann der Public-Key auch über die Adressliste eingesehen werden. Dazu die Adresse markieren und im Kontextmenü Details auswählen.
 
Schritt 2: Reedem-Script/Multi-Signature-Adresse generieren
Aus den Public-Keys der Teilnehmer sowie den Signierungs-Bedingungen (hier 2 von 3) wird ein Reedem-Script generiert. Der Hash des Scripts ist die Multi-Signature-Adresse, auf die die Wetteinsätze im Schritt 3 übertragen werden (P2SH) :

Input
Code: (Bitcoind)
createmultisig 2 '["02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca", "031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b14", "02a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9"]'
Code: (Electrum)
createmultisig(2, ["02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca", "031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b14", "02a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9"])
Code: (Pybitcointools)
pybtctool mk_multisig_script 02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca 031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b14 02a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9 2 3
pybtctool scriptaddr 522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae

Output
Code: (Adresse)
3ER5NMP4qhEowpf8F1Lwrtyw99GmfJs1my
Code: (Redeem-Script)
522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae

Alternativ kann das MultiSig-Formular von Coinb.in verwendet werden. Ein kurzer Check des Redeem-Scripts zeigt:

Input
Code: (Bitcoind)
decodescript 522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae

Output
Code: (Dekodiertes Script)
{
  "asm": "2 02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca 031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b14 02a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9 3 OP_CHECKMULTISIG",
  "reqSigs": 2,
  "type": "multisig",
  "addresses": [
    "15p1QoP2VwHUU2PaFtgEAGuU7Y3p9P59Zd",
    "14igQFDVN86HQ2tdo5QTqjTVUhz7Cjb2jV",
    "1KtCSrphdSHVv9yumCGgecju6mBb2isMTR"
  ],
  "p2sh": "3ER5NMP4qhEowpf8F1Lwrtyw99GmfJs1my"
}

Electrum und Pybitcointools scheinen keine Möglichkeit vorzusehen, Redeem-Scripts zu decodieren. Es kann alternativ auf die Validierungsfunktion von Coinb.in zurückgegriffen werden.

Schritt 3: Einzahlung der Wetteinsätze
Jeder Teilnehmer überträgt den vereinbarten Betrag auf die in Schritt 2 generierte Multi-Signature-Adresse (für dieses Beispiel drei Mal 0.001 BTC innerhalb einer Transaktion):

  f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859

Schritt 4: Erstellung der Transaktion an den Gewinner
Nach Feststellung des Wettergebnisses wird eine Transaktion an die Zieladresse des Gewinners erstellt. Zur Veranschaulichung gehen 0.00275 BTC an den Gewinner, 0.00025 BTC werden als Transaktionsgebühr verwendet:
 
Input
Code: (Bitcoind)
createrawtransaction '[{"txid":"f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859", "vout":2}, {"txid":"f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859", "vout":0}, {"txid":"f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859", "vout":1}]' '{"3Gp2Jhyy5N5dTqPkXjhSS8vmKttSysNnMK":0.00275}'
Code: (Pybitcointools)
pybtctool mktx f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859:2 f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859:0 f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859:1 3Gp2Jhyy5N5dTqPkXjhSS8vmKttSysNnMK:275000

Output
Code: (Unsignierte Transaktion)
010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf30000000000ffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf30100000000ffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf30200000000ffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000

Alternativ kann das Transaktions-Formular von Coinb.in verwendet werden.

Schritt 5: Signierung der Transaktion an den Gewinner
Der sicherheitskritische Teil der Umsetzung ist die Signierung der Transaktion durch zwei von drei der Teilnehmer. Hierzu dienen die Private-Keys der in Schritt 1 bereitgestellten Adressen. Zunächst signiert der Teilnehmer 1 die in Schritt 4 erstellte Transaktion:

Input Teilnehmer 1
Code: (Bitcoind)
signrawtransaction '010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf30000000000ffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf30100000000ffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf30200000000ffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000' '[{"txid":"f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859", "vout":2, "scriptPubKey":"a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe87", "redeemScript":"522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae"}, {"txid":"f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859", "vout":0, "scriptPubKey":"a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe87", "redeemScript":"522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae"}, {"txid":"f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859", "vout":1, "scriptPubKey":"a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe87", "redeemScript":"522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae"}]' '["{myprivkey}"]

Output
Code: (Mit Private-Key 1 signierte Transaktion)
010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000b500483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000b500483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c1014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000b40047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e78014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000

Anschließend signiert Teilnehmer 3 analog die von Teilnehmer 1 signierte Transaktion:

Output
Code: (Mit Private-Key 3 signierte Transaktion von 1)
010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000fdfe0000483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000fdfd0000483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000fdfd000047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000

Ein kurzer Check der von zwei Teilnehmern signierten Transaktion an den Gewinner zeigt:

Input
Code: (bitcoind)
decoderawtransaction 010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000fdfe0000483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000fdfd0000483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000fdfd000047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000
Code: (Electrum)
deserialize("010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000fdfe0000483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000fdfd0000483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000fdfd000047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000")
Code: (Pybitcointools)
pybtctool deserialize 010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000fdfe0000483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000fdfd0000483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000fdfd000047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000

Output
Code: (Dekodierte Transaktion)
{
  "txid": "c88ee8da1de3ba70a5b131e116fd5f8090b13780e7341b8c764ed690de2ee58d",
  "hash": "c88ee8da1de3ba70a5b131e116fd5f8090b13780e7341b8c764ed690de2ee58d",
  "version": 1,
  "size": 931,
  "vsize": 931,
  "locktime": 0,
  "vin": [
    {
      "txid": "f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859",
      "vout": 2,
      "scriptSig": {
        "asm": "0 3045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e[ALL] 3045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f[ALL] 522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae",
        "hex": "00483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae"
      },
      "sequence": 4294967295
    },
    {
      "txid": "f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859",
      "vout": 0,
      "scriptSig": {
        "asm": "0 3045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c1[ALL] 304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932[ALL] 522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae",
        "hex": "00483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae"
      },
      "sequence": 4294967295
    },
    {
      "txid": "f3fdded77a5adf6fd1e7d2dcabb3cdb22f687226e61b111f29ed8226d846b859",
      "vout": 1,
      "scriptSig": {
        "asm": "0 304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e78[ALL] 3045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db[ALL] 522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae",
        "hex": "0047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953ae"
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.00275000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_HASH160 a5dd1e12f6be37452b2488620cbbb16931cdbbfe OP_EQUAL",
        "hex": "a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe87",
        "reqSigs": 1,
        "type": "scripthash",
        "addresses": [
          "3Gp2Jhyy5N5dTqPkXjhSS8vmKttSysNnMK"
        ]
      }
    }
  ]
}

Zur Prüfung kann ebenfalls auf die Validierungsfunktion von Coinb.in zurückgegriffen werden.

Schritt 6: Broadcast der Transaktion an den Gewinner
Abschließend wird die Transaktion im Netzwerk verteilt:

Code: (bitcoind)
sendrawtransaction 010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000fdfe0000483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000fdfd0000483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000fdfd000047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000
Code: (Electrum)
broadcast("010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000fdfe0000483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000fdfd0000483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000fdfd000047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000")
Code: (Pybitcointools)
pybtctool pushtx 010000000359b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf302000000fdfe0000483045022100db7111070928b3e2133ce8e892ae0a4bd4f60a09909922a666b63aa2ceecc687022003de0e357abdb54f31b959921cd750d1f20a71e66e4bc6d23d2aed273e3f6c5e01483045022100f1e18083a370bb4267e41d01fa791af4f2d1ded91af51490301fe69d8ec7c2ac02204a375b1aa9d4a1573ffbe8a3b53c4c5f3d3c353304952881a3a545be7ecc229f014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf300000000fdfd0000483045022100c0b8087f88d01fddfc16ca725cdc94e3397a6aabc82048376f7422efd86d11f502200b328883bd85d8bf014da31c71a447620702894cdb424a30ada27d555d9a06c10147304402203bf222cb3a662f99aed033696e79361c6a776991d1722dc730aa15fd183f38b2022005d821a34759606fcb689b7d8509ebaedd33d479a4cc899bdc7041c608e8b932014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff59b846d82682ed291f111be62672682fb2cdb3abdcd2e7d16fdf5a7ad7defdf301000000fdfd000047304402205978fa53489429eba7bad690550b0b32bc24e44fb08c1d5ba365d524405ed8ef02203abb5f6b06882af826b84ca9946e9f4d30c7287059e6cedf1ba510d637741e7801483045022100dcdb492f0ffc5ee4c72bf9523a8efbf90be10678f87d07c795994a63faefd29f02206509209d474acacd78ac8c217dbebd7e132f3b1dae92dcb0e3cb931e589602db014c69522102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d953aeffffffff01383204000000000017a914a5dd1e12f6be37452b2488620cbbb16931cdbbfe8700000000

Alternativ kann das Broadcast-Formular von coinb.in verwendet werden. Die Wette ist abgeschlossen, sobald die Transaktion in einen Block aufgenommen und bestätigt wurde:

  c88ee8da1de3ba70a5b131e116fd5f8090b13780e7341b8c764ed690de2ee58d

Umsetzung mit drei Teilnehmern und Schiedsrichter
Das zuvor beschriebene Vorgehen sichert ab, dass die Durchführung der mit der Wette verbundenen Zahlungen nicht in der jeweiligen Hand der einzeln Beteiligten liegt, sondern nur zwei der drei beteiligten Personen die Zahlung gemeinsam autorisieren können. Was aber nun, wenn die beiden Verlierer sich gegen den Gewinner zusammentun - und sich einfach dessen Einsatz untereinander aufteilen? Hier kommt die Rolle eines unabhängigen Schiedsrichters ins Spiel. Der Schiedsrichter ist selbst nicht an der Wette beteiligt, sondern wacht unabhängig über die korrekte Abwicklung derselben.

Hierzu generiert man eine Multi-Signatur-Adresse, die nicht mit zwei der drei vorhandenen Private-Keys signiert werden muss, sondern mit drei von fünf. Die drei Wett-Teilnehmer stellen dazu wie oben beschrieben ihre Public-Keys bereit, der Schiedsrichter stellt zusätzlich seinen Public-Key. Unter zweifacher Verwendung des Public-Keys des Schiedsrichters wird anschließend das Redeem-Script samt Multi-Signature-Adresse (hier 3 von 5) berechnet. Sollten sich die Verlierer in dieser Konstellation unkooperativ verhalten, dann reicht der Private-Key des Gewinners zusammen mit dem Private-Key des Schiedsrichters, um die Transaktion zu autorisieren.

Die nachfolgende Beschreibung basiert auf der zuvor ausgeführten mit drei Teilnehmern ohne Schiedsrichter. Es werden nur noch die jeweiligen Outputs angegeben, auf eine nochmalige Beschreibung der einzelnen Schritte verzichtet.

Schritt 1: Public-Keys bereitstellen
Zusätzlich zu den drei Public-Keys der Teilnehmer stellt der Schiedsrichter einen Public-Key:

Code: (Public-Key)
0369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e

Schritt 2: Reedem-Script/Multi-Signature-Adresse generieren
Aus den Public-Keys der Teilnehmer und des Schiedsrichters sowie den Signierungs-Bedingungen (hier 3 von 5) wird das Reedem-Script und die Multi-Signature-Adresse berechnet:

Code: (Adresse)
3K3aUH4HwWshjDZLe9Zi17JyygorWSJUqH
Code: (Redeem-Script)
532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55ae

Code: (Dekodiertes Script)
{
  "asm": "3 02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca 031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b14 02a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9 0369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e 0369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e 5 OP_CHECKMULTISIG",
  "reqSigs": 3,
  "type": "multisig",
  "addresses": [
    "15p1QoP2VwHUU2PaFtgEAGuU7Y3p9P59Zd",
    "14igQFDVN86HQ2tdo5QTqjTVUhz7Cjb2jV",
    "1KtCSrphdSHVv9yumCGgecju6mBb2isMTR",
    "1EAFJKGB4LuSuHq5ZXrYEKMDdwZcoBtVLN",
    "1EAFJKGB4LuSuHq5ZXrYEKMDdwZcoBtVLN"
  ],
  "p2sh": "3K3aUH4HwWshjDZLe9Zi17JyygorWSJUqH"
}

Schritt 3: Einzahlung der Wetteinsätze
Jeder Teilnehmer überträgt den vereinbarten Betrag auf die in Schritt 2 generierte Multi-Signature-Adresse (drei Mal 0.001 BTC):

  607e5189ac78a411d78d6599b6d79f369e93e7fd6a8b134fa6eb57bc3043c10e

  caf80f64ba96c58db00c377288fd674baa4515e67934bd32230def956b6b75fd

  65d64c1df21b8e4be545310dab18c9c3a0c6cdfa0c756deb7a2b40f3522cdedc

Schritt 4: Erstellung der Transaktion an den Gewinner
Nach Feststellung des Wettergebnisses wird eine Transaktion an die Zieladresse des Gewinners erstellt. Zur Veranschaulichung gehen 0.00275 BTC an den Gewinner, 0.00025 BTC werden als Transaktionsgebühr verwendet:

Code: (Unsignierte Transaktion)
02000000030ec14330bc57eba64f138b6afde7939e369fd7b699658dd711a478ac89517e600100000000fffffffffd756b6b95ef0d2332bd3479e61545aa4b67fd8872370cb08dc596ba640ff8ca0000000000ffffffffdcde2c52f3402b7aeb6d750cfacdc6a0c3c918ab0d3145e54b8e1bf21d4cd6650000000000ffffffff01383204000000000017a914cf9b35930cb2d32980e1c293bf2a9e0e588113878700000000

Die Verlierer wollen sich damit aber nicht abfinden und erstellen schlicht eine andere Transaktion, mit der sie sich den Wetteinsatz untereinander aufteilen und auf ihre Signieradressen überweisen wollen (und dabei noch die Transaktionsgebühren vergessen, da jeder 0.0015 BTC bekommen soll):

Code: (Unsignierte Transaktion)
0100000003fd756b6b95ef0d2332bd3479e61545aa4b67fd8872370cb08dc596ba640ff8ca00000000ad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffff0ec14330bc57eba64f138b6afde7939e369fd7b699658dd711a478ac89517e6001000000ad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffffdcde2c52f3402b7aeb6d750cfacdc6a0c3c918ab0d3145e54b8e1bf21d4cd66500000000ad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffff02f0490200000000001976a91428ca5267ddb6438533a5b913249c0316ecf9b3f188acf0490200000000001976a914cf21085d0680987de4718c63e1d27689e7fe82f588ac00000000

Schritt 5: Signierung der Transaktion an den Gewinner
Alle Teilnehmer signieren ihre jeweiligen Transaktionen. Der Gewinner mit einer Signatur, die beiden Verlieren mit ihren beiden.

Code: (Signierte Transaktion des Gewinners)
02000000030ec14330bc57eba64f138b6afde7939e369fd7b699658dd711a478ac89517e6001000000f900483045022100f1f75d833f9cc91d45376685f5756c0d319b6362243c385dd6e0769f2cea4cb50220418491fa1bf90d02abca0447681b26bac185d4a2a64d8a2f6f7a16fe39dcf930014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aefffffffffd756b6b95ef0d2332bd3479e61545aa4b67fd8872370cb08dc596ba640ff8ca00000000f800473044022062abe0047b20726ced98050187ed37d195586da74c4f5a4e7f70aa456cc65e98022065d40db17deef1fd9e7a6fb6a3b766507e8a373cc7fc3b203550cc15f773b8d9014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffffdcde2c52f3402b7aeb6d750cfacdc6a0c3c918ab0d3145e54b8e1bf21d4cd66500000000f900483045022100d51a2dbd996e69b452ee8fc3b987aec952c9d9bca6d6bd7ab4eef3083cd651dc0220209db65fec66ec7b74b66a7871b7f6b815524b8349f2efee90d622d1cfc558d7014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffff01383204000000000017a914cf9b35930cb2d32980e1c293bf2a9e0e588113878700000000

Code: (Signierte Transaktion der Verlierer)
0100000003fd756b6b95ef0d2332bd3479e61545aa4b67fd8872370cb08dc596ba640ff8ca00000000fd420100483045022100c34c778e38a2da1a8d8e1440c265b788568f605301cfd92a34b8969cf201240702207f307a932ec3cc236d4f336d782277258e74ba707a8a0701bff3a312c356bfc101483045022100d9798001c7c613b4c773b1c3cdb4264f083c873f175f4a7866752340bb4ccdbc0220660f42e36ef7df7167ecf7662c6c313a57920dbf4bce3fe81efeae76752ec3ec014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffff0ec14330bc57eba64f138b6afde7939e369fd7b699658dd711a478ac89517e6001000000fd41010047304402202eaca7cb06fe73b6dfa79efa82d59b47e9c399a023ffee4a004eaae04d481331022042e32448cf8db2abd0713dcbc0ab6bfd5ad320478dd1cbd77dba9a5f9540154a01483045022100f67df084933ee2cd3fa440fb4e7d8411f3d9f771e353dbaf28c8027bcdee33b1022002adef25c71c925088ddbfd58287edd258add61b7c8ff931b07327cdf775e325014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffffdcde2c52f3402b7aeb6d750cfacdc6a0c3c918ab0d3145e54b8e1bf21d4cd66500000000fd420100483045022100fdbcfcdea80f92713b5741970cfa8d62e46cf2304d2b44148112e5768f3bf96802200d68f81bd4b3189407b2a554263c34b3d50ec16152bd4518b2248937ed4001e701483045022100e121506523dc48db1cdd1ece2f47e33d088031c46ae4843364a1b7b28a705d3a02204fac2aef36b37508fdf8d591f9c516d476fc0cf74b1cb91de525402ea896d4ee014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffff02f0490200000000001976a91428ca5267ddb6438533a5b913249c0316ecf9b3f188acf0490200000000001976a914cf21085d0680987de4718c63e1d27689e7fe82f588ac00000000

Beide Transaktionen sind ungültig, da sie die Script-Bedingungen nicht erfüllen (keine enthält drei notwendige Signaturen). Versucht man sie im Netzwerk zu verteilen, werden sie von den Knoten abgelehnt. Der Schiedsrichter signiert deshalb die Transaktion des Gewinners:

Code: (Signierte Transaktion durch den Schiedsrichter)
02000000030ec14330bc57eba64f138b6afde7939e369fd7b699658dd711a478ac89517e6001000000fd890100483045022100f1f75d833f9cc91d45376685f5756c0d319b6362243c385dd6e0769f2cea4cb50220418491fa1bf90d02abca0447681b26bac185d4a2a64d8a2f6f7a16fe39dcf93001473044022065a494a0f2915ca84bdbfce4a3dda32478b947e5e2d40b1fe7ec91f72bcf82dd02203d11cc71693b393d2f95e76da61671f8dad03180b5c8b750e7dfc96a2657af8d01473044022065a494a0f2915ca84bdbfce4a3dda32478b947e5e2d40b1fe7ec91f72bcf82dd02203d11cc71693b393d2f95e76da61671f8dad03180b5c8b750e7dfc96a2657af8d014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aefffffffffd756b6b95ef0d2332bd3479e61545aa4b67fd8872370cb08dc596ba640ff8ca00000000fd880100473044022062abe0047b20726ced98050187ed37d195586da74c4f5a4e7f70aa456cc65e98022065d40db17deef1fd9e7a6fb6a3b766507e8a373cc7fc3b203550cc15f773b8d90147304402202c18c10c8816e9d1974049cf07a4ced41828bbf692411d6f0e9eb96b1af5a69d0220597d7577f867065f58157b195aed8987bc102d313a0be273166ea2a7e00f258c0147304402202c18c10c8816e9d1974049cf07a4ced41828bbf692411d6f0e9eb96b1af5a69d0220597d7577f867065f58157b195aed8987bc102d313a0be273166ea2a7e00f258c014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffffdcde2c52f3402b7aeb6d750cfacdc6a0c3c918ab0d3145e54b8e1bf21d4cd66500000000fd890100483045022100d51a2dbd996e69b452ee8fc3b987aec952c9d9bca6d6bd7ab4eef3083cd651dc0220209db65fec66ec7b74b66a7871b7f6b815524b8349f2efee90d622d1cfc558d70147304402204f7771c6dbde9b1197f68ca14f0bb9abafd214ce27be5ec69064a462ebe55261022061ae00f95787528936d4b3a91333b6a3bd59838e36512e95b2309674614d7ad70147304402204f7771c6dbde9b1197f68ca14f0bb9abafd214ce27be5ec69064a462ebe55261022061ae00f95787528936d4b3a91333b6a3bd59838e36512e95b2309674614d7ad7014cad532102b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca21031ea604b64c7e36131966c9b6e959a12a2a85799a4cff37601ceda61f267e3b142102a3d7a35c6bc98f48ba8037ce22129efb9c497ca70c5362ece181d9dfb31819d9210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e210369f10478917b0f3ba61fa35c6b3246cb9890ce82d35d2cd2fe78516f904e9f7e55aeffffffff01383204000000000017a914cf9b35930cb2d32980e1c293bf2a9e0e588113878700000000

Schritt 6: Broadcast der Transaktion an den Gewinner
Abschließend wird die Transaktion im Netzwerk verteilt:

  77004c571569f355474988c0bee82a178459c1b8b4d42d6d504e331358b97e80

Nützliche Links

tl;dr
1) Bedingungen vereinbaren. 2) Schiedsrichter gewinnen. 3) Keys bereitstellen. 4) Einsätze einzahlen. 5) Gewinner festlegen. 6) Kohle kassieren.

twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 09, 2018, 10:18:50 PM
 #2

- reserviert -

Sukrim
Legendary
*
Offline Offline

Activity: 2618
Merit: 1007


View Profile
February 10, 2018, 12:20:01 AM
 #3

- reserviert -  Huh

https://www.coinlend.org <-- automated lending at various exchanges.
https://www.bitfinex.com <-- Trade BTC for other currencies and vice versa.
twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 10, 2018, 02:26:57 PM
 #4

So, der rein technische Teil ist jetzt erstmal fertig. Ich werde noch ein paar Links und Erläuterungen aufnehmen und die letzten Punkte nach etwas weiterer Recherche ergänzen.

Interessant wird es nun, wenn man sich über die konkrete Ausgestaltung der Signierungsanforderungen (n von m) ein paar Gedanken macht. Gehen wir vom obigen Fall einer Wette von drei Personen aus, von denen zwei abschließend signieren müssen. Unterstellen wir dabei ehrenhafte Teilnehmer, die feststellen, dass Teilnehmer A gewonnen hat. A erstellt also eine Transaktion und signiert diese. B oder C signieren ebenfalls. Damit ist die Wette abgeschlossen. Verbünden sich aber B und C gegen A, dann erstellt einfach B eine andere Transaktion, die von C signiert wird. A hat damit zwar die Wette gewonnen, B und C aber das Geld.

Verhindern könnte man das durch einen Schiedsrichter S. Man erstellt dann keine 2-von-3-Multi-Signature-Adresse, sondern eine 3-von-4-Adresse. B und C haben somit keine Möglichkeit, A über den Tisch zu ziehen (sofern sich nicht der Schiedsrichter ebenfalls auf ihre Seite schlägt). B und C können aber gemeinsam, auch gegen den Schiedsrichter, verhindern, dass A seine Kohle bekommt. Beide zeichnen einfach die Transaktion nicht, die A und S signiert haben.

Gibt es dazu Überlegungen?

Coiner.de
Hero Member
*****
Offline Offline

Activity: 781
Merit: 533



View Profile
February 10, 2018, 06:19:04 PM
 #5

Das wurde in einem von deinen Links abgehandelt: Man macht 3von5 und der Schiedsrichter bekommt 2 Stimmen.
twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 10, 2018, 06:27:04 PM
Last edit: February 10, 2018, 09:11:57 PM by twbt
 #6

Das wurde in einem von deinen Links abgehandelt: Man macht 3von5 und der Schiedsrichter bekommt 2 Stimmen.
Klar - so naheliegend. Besten Dank für den Hinweis! - Ich hatte die ganze Zeit dazu recherchiert, ob man irgendwie die Private-Keys gewichten kann. Viel zu umständlich gedacht: der Schiedsrichter rückt einfach zwei Publik-Keys raus, damit hat er dann die beiden notwendigen Stimmen.

EDIT: Rechtliche Fragen zum Thema "Wetten" werde ich erstmal nicht behandeln. Das hängt letztlich zu stark von den konkreten Wettbedingungen ab und dem Wohnsitz der Teilnehmer. Deshalb gestrichen.

elrippos friend
Full Member
***
Offline Offline

Activity: 1179
Merit: 210


only hodl what you understand and love!


View Profile
February 11, 2018, 08:19:30 AM
 #7

Hallöchen,

coole Sache, daß du dir die Mühe machst eine einheitliche Agenda aufzustellen. Na das mit den Multisig funktioniert ja, das wissen wir ja  Grin

twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 11, 2018, 06:58:40 PM
Last edit: February 12, 2018, 12:35:19 AM by twbt
 #8

Na das mit den Multisig funktioniert ja, das wissen wir ja  Grin

Hehe, ja. Smiley - @all: Hat jemand von Euch mal Electrum für Multisig verwendet? Man kann beim Anlegen eines Multi-Sig-Wallets auch eine Option ("Use public or private keys") auswählen, aber anschließend kommt irgendwas bzgl. "xpub" (Master Public Key) und "xprv" (Master Private Key), das sich wohl eher auf komplette Wallets bezieht. Erschließt sich mir noch nicht wirklich.

EDIT: Ein weiteres "Angriffsszenario" unkooperativer Wettpartner gegen das Setup ohne Schiedsrichter: Sie stellen ihre Public-Keys bereit, zahlen dann aber nicht auf die Wettadresse ein. Damit scammen sie denjenigen, der - z.B. als Ausrichter der Wette - als erster eingezahlt hat. Er bekommt seine Kohle ohne Schiedsrichter schlicht nicht mehr raus. Unterm Strich spricht also vieles dafür, eine Wette nicht ohne Schiedsrichter auszurichten.

Spray.
Sr. Member
****
Offline Offline

Activity: 594
Merit: 273


View Profile
February 12, 2018, 01:53:39 AM
 #9

@all: Hat jemand von Euch mal Electrum für Multisig verwendet? Man kann beim Anlegen eines Multi-Sig-Wallets auch eine Option ("Use public or private keys") auswählen, aber anschließend kommt irgendwas bzgl. "xpub" (Master Public Key) und "xprv" (Master Private Key), das sich wohl eher auf komplette Wallets bezieht. Erschließt sich mir noch nicht wirklich.

Ja, bereits paar mal erfolgreich durchlaufen.
Wenn man dort den eigenen xpub und die der anderen eingibt hast du einen watching-only Zugriff auf die MultiSig Adresse.
Das hat im Grunde die gleiche Funktionalitäten wie die Auswahlmöglichkeit bei einer Standardwallet. xpub -> watching only, xprv -> signierungsfähig
Was meinst du mit "komplette" Wallets?
Einen Master Private Key habe ich für Multisig in Electrum allerdings noch nie benötigt, da immer über den Seed gegangen.

Das wurde in einem von deinen Links abgehandelt: Man macht 3von5 und der Schiedsrichter bekommt 2 Stimmen.
Ein Use Case für die Sinnhaftigkeit von "Use public or private keys" wäre, dass der Schiedsrichter nach Eingabe der 3 xpubs der Teilnehmer seine 2 eigenen xprvs dort eintragen kann und dann mit beiden Schlüsseln gleichzeitig signieren kann. (noch nie ausprobiert, also keine Gewähr)


EDIT: Ein weiteres "Angriffsszenario" unkooperativer Wettpartner gegen das Setup ohne Schiedsrichter: Sie stellen ihre Public-Keys bereit, zahlen dann aber nicht auf die Wettadresse ein. Damit scammen sie denjenigen, der - z.B. als Ausrichter der Wette - als erster eingezahlt hat. Er bekommt seine Kohle ohne Schiedsrichter schlicht nicht mehr raus. Unterm Strich spricht also vieles dafür, eine Wette nicht ohne Schiedsrichter auszurichten.

Das stimmt - allein aus diesem Grund braucht es imo einen Schiedsrichter/Treuhänder.
twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 12, 2018, 11:22:43 AM
 #10

Danke für die Rückmeldung!

Ja, bereits paar mal erfolgreich durchlaufen.
Wenn man dort den eigenen xpub und die der anderen eingibt hast du einen watching-only Zugriff auf die MultiSig Adresse.
Das hat im Grunde die gleiche Funktionalitäten wie die Auswahlmöglichkeit bei einer Standardwallet. xpub -> watching only, xprv -> signierungsfähig

Ich hab' das mit den oben genannten Adressen versucht. Also: 1. Neues Wallet erstellen. 2. Multi-signature wallet auswählen. 2 von 3 auswählen. 3. Use public or private keys auswählen. 4. Jetzt kommt der Dialog Add Cosigner 1. Wenn ich hier den Pubkey 02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca der ersten Adresse eingebe, komme ich schlicht nicht weiter. Der Button Next bleibt ausgegraut.

Was meinst du mit "komplette" Wallets?
Einen Master Private Key habe ich für Multisig in Electrum allerdings noch nie benötigt, da immer über den Seed gegangen.

Auf mich machte das den Eindruck, dass ich nur komplette MultiSig-Wallets einrichten kann - wie im BitcoinBlog beschrieben (und auch in der Electrum-Doku). Vlt. hat Electrum aber z.Z. schlicht einen Bug beim o.g. Vorgehen? Oder - am wahrscheinlichsten - ich mache da noch irgendwas falsch.

Ein Use Case für die Sinnhaftigkeit von "Use public or private keys" wäre, dass der Schiedsrichter nach Eingabe der 3 xpubs der Teilnehmer seine 2 eigenen xprvs dort eintragen kann und dann mit beiden Schlüsseln gleichzeitig signieren kann. (noch nie ausprobiert, also keine Gewähr)

Genau das wollte ich durchspielen. Also zunächst mal mit den drei Adresse oben (PubKey von 1 und 2, PrivKey von 3) und dann erweitert mit einem Schiedsrichter (mit zwei PrivKeys).

Das stimmt - allein aus diesem Grund braucht es imo einen Schiedsrichter/Treuhänder.

Ich sehe eigentlich auch keine andere Lösung. Elaborierter ginge das nur mit komplexeren Smart Contracts, die z.B. die Anzahl der notwendigen Signierungen vom Eingang der entsprechenden Inputs von den entsprechenden Adressen abhängig machten. Dann wären wir aber wohl bei Ethereum.

Spray.
Sr. Member
****
Offline Offline

Activity: 594
Merit: 273


View Profile
February 12, 2018, 11:51:17 AM
 #11

Danke für die Rückmeldung!
Ich hab' das mit den oben genannten Adressen versucht. Also: 1. Neues Wallet erstellen. 2. Multi-signature wallet auswählen. 2 von 3 auswählen. 3. Use public or private keys auswählen. 4. Jetzt kommt der Dialog Add Cosigner 1. Wenn ich hier den Pubkey 02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca der ersten Adresse eingebe, komme ich schlicht nicht weiter. Der Button Next bleibt ausgegraut.


Dies ist ja auch kein xpub Key. Sorry, Noobfrage meinerseits: Was ist das für ein pubkey? In welchem Schritt erhälst du soetwas?
Also bei mir steht unter Add Cosigner nur Please enter the master publix key (xpub) of your cosigner. Enter their master private key (xprv) if you want to be able to sign for them.

Mit der Eingabe eines solchen Keys xpub661MyMwAqRbcFk1QSEuuPBtWMLKD3n1tpnDYqi1KXdQNFeJCrRnnL8ErJwnqswtFMjxgozjEMru ednxpXDsqMCQgVq98N8JsifNUANuoppD klappt's dann auch.



twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 12, 2018, 12:30:53 PM
 #12

Dies ist ja auch kein xpub Key. Sorry, Noobfrage meinerseits: Was ist das für ein pubkey? In welchem Schritt erhälst du soetwas?

Das ist Public-Key 1 oben aus Schritt 1 (über die Core-API):

Code:
validateaddress 15p1QoP2VwHUU2PaFtgEAGuU7Y3p9P59Zd

ergibt:

Code:
{
  ...
  "pubkey": "02b81e1f104cfe73bdaeff62181c691cc34ea4360053891ddc42d3b8992c8fc1ca",
  ...
}

Also bei mir steht unter Add Cosigner nur Please enter the master publix key (xpub) of your cosigner. Enter their master private key (xprv) if you want to be able to sign for them.

Ich stolpere die ganze Zeit über das "master" in der Electrum-Beschreibung - dummerweise verwende ich Electrum eigentlich nie und hab' schlicht noch nicht verstanden, was Electrum hier haben will. Offensichtlich gibt es auch noch andere Leute, die an dieser Stelle (Nutzung Core/coinb.in auf der einen Seite, Electrum auf der anderen) Probleme haben: https://www.reddit.com/r/Electrum/comments/7twh5i/adding_multisig_from_electrum_wallet_to_site_xpub/

twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 12, 2018, 02:21:10 PM
 #13

Man kann beim Anlegen eines Multi-Sig-Wallets auch eine Option ("Use public or private keys") auswählen, aber anschließend kommt irgendwas bzgl. "xpub" (Master Public Key) und "xprv" (Master Private Key), das sich wohl eher auf komplette Wallets bezieht.

Okay, ich denke, ich hab's verstanden. Meine obige Vermutung ist wohl richtig - Electrum implementiert MultiSig auf Wallet-Ebene - unter Verwendung der xpub- und xpriv-Keys nach BIP32: https://en.bitcoin.it/wiki/Deterministic_wallet_tools Die Bezeichnungen, die Electrum verwendet, laden nur zum Missverständnis ein. - Nutzt man also Electrum, hat man ein gemeinsames Bündel von Adressen, die sich aus den BIP32-Keys ableiten. Für eine Wette ist das eigentlich quatsch, aber auch nicht weiter schädlich. Man sollte das "Bündel" dann eben auch nur einmal für die Wette verwenden.

c_lab
Legendary
*
Offline Offline

Activity: 1213
Merit: 1052


View Profile
February 15, 2018, 03:15:00 PM
Last edit: February 15, 2018, 03:26:14 PM by c_lab
 #14

Vielen Dank für die Mühe. Unabhängig davon, daß es einen großen Haken bei den Wettbedingungen gibt, tue ich mich mit dem Multisig schwer.
Core kommt für mich nicht in Frage, ist mir echt zu aufwendig. Hätte gerne Electrum genutzt, aber wenn ich das richtig verstehe, müsste dort die Anzahl der Teilnehmer schon vor Wettbeginn feststehen... Ob ich mich zu den genannten Alternativen bis zum Stichtag so einlesen könnte um mir 100% sicher zu sein was ich da tue, wüßte ich leider auch nicht.  Roll Eyes

@twbt: Du hattest den steuerlichen Aspekt zwar wieder rausgenommen, ich habe trotzdem dazu mal bei meiner Kanzlei angefragt, Antwort zur Lage in D steht noch aus.
twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 15, 2018, 06:11:46 PM
 #15

Unabhängig davon, daß es einen großen Haken bei den Wettbedingungen gibt

Ja, die Wettbedingungen sind wohl häufig der zentrale Knackpunkt. Umso wichtiger, dass man einen vertrauenswürdigen Schiedsrichter wählt, der im Streitfall dann zu einer sinnvollen Auslegung kommt.

tue ich mich mit dem Multisig schwer.
Core kommt für mich nicht in Frage, ist mir echt zu aufwendig.

Core brauchst Du ja nur, um PubKey und PrivKey zu ermitteln und die o.g. Operationen durchzuführen. Du musst also nicht die gesamte Blockchain syncen. Alternativ geht auch das o.g. Online-Wallet (man kann das JS auch ohne Netzverbindung ausführen).

Hätte gerne Electrum genutzt, aber wenn ich das richtig verstehe, müsste dort die Anzahl der Teilnehmer schon vor Wettbeginn feststehen...

Das wäre bei jeder MultiSig-Wette der Fall. Man kann die Adresse erst berechnen, wenn alle Teilnehmer ihre PubKeys bekannt gemacht haben.

Ob ich mich zu den genannten Alternativen bis zum Stichtag so einlesen könnte um mir 100% sicher zu sein was ich da tue, wüßte ich leider auch nicht.  Roll Eyes

Eigentlich ist's ja keine Raketenwissenschaft. Aber, Du hast recht: um das nachzuvollziehen, sollte man sich schon etwas einlesen. Bringt aber mE auch was.

Du hattest den steuerlichen Aspekt zwar wieder rausgenommen, ich habe trotzdem dazu mal bei meiner Kanzlei angefragt, Antwort zur Lage in D steht noch aus.

Ja, ist eine wichtige Frage. Ich meine, 600watt hatte dazu auch bei seiner Wette mit Elrippo nachgeforscht. - Ich wollte die rechtlichen Fragen hier aber bewusst raushalten, da es mir primär um die Technik geht.

c_lab
Legendary
*
Offline Offline

Activity: 1213
Merit: 1052


View Profile
February 15, 2018, 08:45:11 PM
 #16

Unabhängig davon, daß es einen großen Haken bei den Wettbedingungen gibt

Ja, die Wettbedingungen sind wohl häufig der zentrale Knackpunkt. Umso wichtiger, dass man einen vertrauenswürdigen Schiedsrichter wählt, der im Streitfall dann zu einer sinnvollen Auslegung kommt.

Es ist zwar offtopic darauf hier zu antworten aber im Wett-Thread dazu zu schreiben erscheint auch idiotisch.
Für mich ist es keine Auslegungssache. Nach den aufgestellten Bedingungen hätte elrippo die Wette gewonnen, wenn ein Lakai oder er selbst den Mini-35k Trade tätigt. Das hätte ich auch als Schiedsrichter so entschieden bzw. beim Multisig sogar gegen mein Gewinninteresse gestimmt. Wenn jemand sein Häkchen unter die AGB setzt ohne sie genau lesen zu wollen oder zu verstehen, ist er einfach selber schuld. Seien wir ehrlich, ohne den Hinweis von Sukrim wäre uns der Fauxpas wohl nicht aufgefallen und ich hätte meine erste, du deine zweite Wett-Niete gezogen. Ich habe keine Ahnung ob elrippo das bewusst so forciert, oder seine Chance selber garnicht mitbekommen hat.


tue ich mich mit dem Multisig schwer.
Core kommt für mich nicht in Frage, ist mir echt zu aufwendig.

Core brauchst Du ja nur, um PubKey und PrivKey zu ermitteln und die o.g. Operationen durchzuführen. Du musst also nicht die gesamte Blockchain syncen. Alternativ geht auch das o.g. Online-Wallet (man kann das JS auch ohne Netzverbindung ausführen).

Man kann JS auch offline ausführen, das hindert aber niemanden daran, einem gefakte Daten unterzuschieben. Ob das Angriffsszenario beim erwähnten Wallet greifen könnte, weiß ich nicht.


Hätte gerne Electrum genutzt, aber wenn ich das richtig verstehe, müsste dort die Anzahl der Teilnehmer schon vor Wettbeginn feststehen...

Das wäre bei jeder MultiSig-Wette der Fall. Man kann die Adresse erst berechnen, wenn alle Teilnehmer ihre PubKeys bekannt gemacht haben.
Gut, dann funktioniert das Ganze nicht solange jeder X-beliebige bis zum 18. an die Multisig-Adresse einzahlen kann.


Ob ich mich zu den genannten Alternativen bis zum Stichtag so einlesen könnte um mir 100% sicher zu sein was ich da tue, wüßte ich leider auch nicht.  Roll Eyes

Eigentlich ist's ja keine Raketenwissenschaft. Aber, Du hast recht: um das nachzuvollziehen, sollte man sich schon etwas einlesen. Bringt aber mE auch was.

Mache ich gerne, nur nicht unter (Wett-)Druck. Konnte die Geschichte (dank dir und des Threads) mit klar definierten Teilnehmern unter Electrum schon durchspielen. Feine Sache.  Smiley
twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 15, 2018, 09:29:51 PM
Last edit: February 15, 2018, 09:58:33 PM by twbt
 #17

Es ist zwar offtopic darauf hier zu antworten aber im Wett-Thread dazu zu schreiben erscheint auch idiotisch.
Für mich ist es keine Auslegungssache. Nach den aufgestellten Bedingungen hätte elrippo die Wette gewonnen, wenn ein Lakai oder er selbst den Mini-35k Trade tätigt. Das hätte ich auch als Schiedsrichter so entschieden bzw. beim Multisig sogar gegen mein Gewinninteresse gestimmt. Wenn jemand sein Häkchen unter die AGB setzt ohne sie genau lesen zu wollen oder zu verstehen, ist er einfach selber schuld. Seien wir ehrlich, ohne den Hinweis von Sukrim wäre uns der Fauxpas wohl nicht aufgefallen und ich hätte meine erste, du deine zweite Wett-Niete gezogen. Ich habe keine Ahnung ob elrippo das bewusst so forciert, oder seine Chance selber garnicht mitbekommen hat.

Ja, das stimmt, das wäre letztlich keine Auslegungssache. - Lassen wir das Off-topic mal beiseite: Geht das überhaupt? Auf Bitstamp? Die Tradingengine würde doch ein Limit-Kaufgebot für 35k/BTC gegen das niedrigste Verkaufsgebot ausführen - und nicht für 35k/BTC. Oder?

Man kann JS auch offline ausführen, das hindert aber niemanden daran, einem gefakte Daten unterzuschieben. Ob das Angriffsszenario beim erwähnten Wallet greifen könnte, weiß ich nicht.

Was genau meinst Du mit "gefakte Daten unterzuschieben"? Und welches Angriffsszenario wäre das?

Gut, dann funktioniert das Ganze nicht solange jeder X-beliebige bis zum 18. an die Multisig-Adresse einzahlen kann.

Man muss einen Stichtag festlegen, bis zu dem alle Teilnehmer ihre PubKeys bereitgestellt haben müssen. Dann wird die MultiSig-Adresse auf dieser Basis berechnet und die Teilnehmer zahlen ein. Damit ist die Wette geschlossen - es können keine weiteren Teilnehmer mehr dazustoßen.

Mache ich gerne, nur nicht unter (Wett-)Druck. Konnte die Geschichte (dank dir und des Threads) mit klar definierten Teilnehmern unter Electrum schon durchspielen. Feine Sache.  Smiley

Ah, prima.

EDIT: Ich hab' das oben bzgl. Nutzung von Electrum nochmal präzisiert. Der Unterschied ist, dass man bei Nutzung von Electrum MultiSig-Wallets erstellt, nicht eine einzelne MultiSig-Adresse. Alle Teilnehmer müssten also ebenfalls eine BIP32-kompatible Wallet-Implementierung nutzen, die auch MutliSig unterstützt.

Spray.
Sr. Member
****
Offline Offline

Activity: 594
Merit: 273


View Profile
February 15, 2018, 09:47:14 PM
 #18

Die Tradingengine würde doch ein Limit-Kaufgebot für 35k/BTC gegen das niedrigste Verkaufsgebot ausführen - und nicht für 35k/BTC. Oder?

Ja, korrekt. Bei Limit Buy Orders über dem niedriegsten Verkaufspreis wird die Order automatisch mit den günstigsten Sell Orders verrechnet.
Es kann also niemand so einfach hingehen und  bei einem Kurs von 35k€ Bitcoins im Wert von 1€ kaufen.
c_lab
Legendary
*
Offline Offline

Activity: 1213
Merit: 1052


View Profile
February 15, 2018, 09:55:13 PM
Last edit: February 15, 2018, 10:06:36 PM by c_lab
 #19

Es ist zwar offtopic darauf hier zu antworten aber im Wett-Thread dazu zu schreiben erscheint auch idiotisch.
Für mich ist es keine Auslegungssache. Nach den aufgestellten Bedingungen hätte elrippo die Wette gewonnen, wenn ein Lakai oder er selbst den Mini-35k Trade tätigt. Das hätte ich auch als Schiedsrichter so entschieden bzw. beim Multisig sogar gegen mein Gewinninteresse gestimmt. Wenn jemand sein Häkchen unter die AGB setzt ohne sie genau lesen zu wollen oder zu verstehen, ist er einfach selber schuld. Seien wir ehrlich, ohne den Hinweis von Sukrim wäre uns der Fauxpas wohl nicht aufgefallen und ich hätte meine erste, du deine zweite Wett-Niete gezogen. Ich habe keine Ahnung ob elrippo das bewusst so forciert, oder seine Chance selber garnicht mitbekommen hat.

Ja, das stimmt, das wäre letztlich keine Auslegungssache. - Lassen wir das Off-topic mal beiseite: Geht das überhaupt? Auf Bitstamp? Die Tradingengine würde doch ein Limit-Kaufgebot für 35k/BTC gegen das niedrigste Verkaufsgebot ausführen - und nicht für 35k/BTC. Oder?

Guter Einwand. Ich weiß nicht wie Stamp das handhabt, habe dort keinen Account. Bei z.B. bitcoin.de würde es funktionieren.

Man kann JS auch offline ausführen, das hindert aber niemanden daran, einem gefakte Daten unterzuschieben. Ob das Angriffsszenario beim erwähnten Wallet greifen könnte, weiß ich nicht.

Was genau meinst Du mit "gefakte Daten unterzuschieben"? Und welches Angriffsszenario wäre das?

Indem man z.B. wie bei Iota geschehen, den Leuten auf einer Website verspricht einen Seed offline zu generieren, dieser aber schon vorgefertigt ist.

Gut, dann funktioniert das Ganze nicht solange jeder X-beliebige bis zum 18. an die Multisig-Adresse einzahlen kann.

Man muss einen Stichtag festlegen, bis zu dem alle Teilnehmer ihre PubKeys bereitgestellt haben müssen. Dann wird die MultiSig-Adresse auf dieser Basis berechnet und die Teilnehmer zahlen ein. Damit ist die Wette geschlossen - es können keine weiteren Teilnehmer mehr dazustoßen.

Genau das wurde bis heute bei der Wette nicht klar kommuniziert.

edit: sorry @spray, war zu spät.  Wink
twbt (OP)
Legendary
*
Offline Offline

Activity: 994
Merit: 1098


An AA rated Bandoneonista


View Profile
February 15, 2018, 10:09:39 PM
 #20

Ja, korrekt. Bei Limit Buy Orders über dem niedriegsten Verkaufspreis wird die Order automatisch mit den günstigsten Sell Orders verrechnet.
Es kann also niemand so einfach hingehen und  bei einem Kurs von 35k€ Bitcoins im Wert von 1€ kaufen.

Ich hab's mir gerade nochmal angeschaut auf Bitstamp. Ich sehe da auch keine andere Möglichkeit, eine solche Order auszuführen.

Guter Einwand. Ich weiß nicht wie Stamp das handhabt, habe dort keinen Account. Bei z.B. bitcoin.de würde es funktionieren.

Ja, auf bitcoin.de geht das natürlich problemlos. Darum wären Wetten auf Kurse dort tatsächlich: ziemlich schwachsinnig.

Indem man z.B. wie bei Iota geschehen, den Leuten auf einer Website verspricht einen Seed offline zu generieren, dieser aber schon vorgefertigt ist.

Yep. Ich hab' mir das JS von der Seite noch nicht angesehen, aber alle Schritte sowohl mit dem JS durchgeführt wie mit Core. Dadurch habe ich letztlich validiert, dass dort keine vorgefertigten Ergebnisse produziert werden. Dennoch würde ich grundsätzlich ebenfalls von Online-Wallets abraten. Wer Core nicht nutzen mag, ist mit den Pybitcointools (die übrigens von Vitalik Buterin stammen) bestens bedient. Man muss dafür eigentlich auch keine große Programmiererfahrung haben - der verlinkte Artikel beschreibt recht nachvollziehbar, wie die einzelnen Schritte von der Library implementiert werden.

Genau das wurde bei der Wette nicht klar kommuniziert.

elrippo will ja auch eher Escrow nutzen, nicht MultiSig. Bei Escrow kann man natürlich anders verfahren. Ich halte nur nicht viel von Escrow, wenn es um Wetten mit längerer Laufzeit geht.

Pages: [1] 2 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!