Zunächst einmal verstehe ich, dass die Standardmethode zur Hinterlegung von Bitcoins ein P2SH mit einem 2-von-3-Multisig-Einlösungsskript ist. Ich möchte versuchen, die Hinterlegung auf folgende Weise durchzuführen:
Namen der 3 Beteiligten:
money source
escrow agent
money destination
Es sind 2 Transaktionen beteiligt:
escrow transaction
: Das money source
sendet Geld an ein benutzerdefiniertes Sperrskriptspending transaction
: die escrow agent
bewegt Gelder von der escrow transaction
zu dermoney destination
Mit diesen Eigenschaften hat der escrow agent
die vollständige Kontrolle über die Ausgaben der Gelder, ABER er escrow agent
kann sie nur in den money destination
und nirgendwo anders verschieben. (dh escrow agent
kann das Geld nicht stehlen)
Mir ist klar, dass das benutzerdefinierte Sperrskript von escrow transaction
irgendwie auf die money destination
Adresse von verweisen und einen Mechanismus bereitstellen muss, damit dies funktioniert, wenn das escrow transaction
Sperrskript von entsperrt wird, es überprüft, ob die Transaktion, in der es verwendet wird, tatsächlich ist geht zum money destination
.
Es scheint, dass man nicht direkt auf die Ausgabeadresse von verweisen kann, spending transaction
wenn die spending transaction
verifiziert wird. Die einzige Möglichkeit, die Ausgabeadresse Teil der Überprüfung zu haben, ist indirekt über CHECKSIG (da die zu signierenden Daten die Ausgabeadresse von enthalten spending transaction
). Aber damit dies funktioniert, müssten wir die signieren spending transaction
und diese Signatur einfügen die escrow transaction
, aber das erzeugt eine zirkuläre Abhängigkeit: die escrow transaction
enthält eine Signatur von die spending transaction
den Hash von enthält escrow transaction
(da die escrow transaction
eine Eingabe für die ist spending transaction
). Das wäre also unmöglich. Ich wünschte, es gäbe einen Hashtyp, der es Ihnen erlaubt, nur die Ausgabeseite der Transaktion und überhaupt nicht die Eingaben zu signieren.
Ich bin ziemlich neu bei Bitcoin, also übersehe ich vielleicht etwas. Aber es scheint, dass das Entwerfen einer Hinterlegung mit den Eigenschaften, die ich zu Beginn dieser Frage beschrieben habe, unmöglich wäre, und die einzige Möglichkeit, eine Hinterlegung durchzuführen, ist ein Standard-P2SH 2 von 3 Multisig.
Der Grund, warum ich kein Standard-Multisig machen möchte, ist, dass es auf vertrauenslose Weise funktioniert. der money source
und money destination
müssen ihre Adressen direkt austauschen (dh der escrow agent
kann den anderen 2 Parteien die passenden Adressen nicht geben, weil er die falschen Adressen herausgeben könnte). Auf diese Weise kann der Treuhänder, wenn escrow agent
er das TXN unterschreibt und es der anderen Partei zum Unterschreiben gibt, überprüfen, ob der Treuhandagent es unterschrieben hat, um an die richtige Stelle zu gelangen.
Ich möchte escrow agent
, dass der Ansprechpartner für die anderen 2 Parteien ist, damit sie vor der Zusammenarbeit mit dem keinen Adressaustausch durchführen müssen, dem escrow agent
aber trotzdem nicht vertrauen müssenescrow agent
Teilantwort (keine neue Lösung - ich habe lediglich das Mikrozahlungskanalprotokoll angepasst): Wenn Sie den Austausch öffentlicher Schlüssel zulassen, scheint mir eine Lösung zu sein:
source
finanziert eine Adresse A, die von source
und kontrolliert wirdescrow
source
unterzeichnet Transaktion T teilweise, die A bis ausgibt destination
. Dann sendet sie diese teilweise signierte Transaktion an escrow
.Es liegt nun an escrow
T zu unterzeichnen und auszustrahlen, damit dieser destination
die Mittel erhält. Escrow
kann die Gelder nicht anders ausgeben (z. B. stehlen), als es eine Mitunterzeichnung erfordern source
würde.
(Problem: Escrow
könnte entscheiden, die Gelder nicht zu unterzeichnen und zu "blockieren" (deshalb sind Rückerstattungstransaktionen in Zahlungskanälen enthalten). Gelöst, indem Escrow
eine Transaktion R teilweise unterzeichnet und an die Quelle gesendet wird, um die Gelder von A zurück source
an t0 zu senden. Es Jetzt source
schickt sie sich das Geld von A zurück. Ist das ein Problem? Nicht wirklich, wenn Transaktion R "zeitgesperrt" ist.)
Es scheint schwieriger, eine Lösung ohne den Austausch öffentlicher Schlüssel zu finden ... aber es ist ein bisschen seltsam, den Austausch öffentlicher Schlüssel zu verbieten.
Manfred Macx