Speichern von Skripten (Smart Contracts) außerhalb der Blockchain

Ich folge "Mastering Bitcoin" von Andreas Antonopoulos, um die Bitcoin-Implementierung zu verstehen.

Im Kapitel über Transaktionen zeigt er einige Vorteile von P2SH-Transaktionen auf:

  1. Komplexe Skripte werden durch kürzere Fingerabdrücke in der Transaktionsausgabe ersetzt, wodurch die Transaktion kleiner wird.
  2. Skripte können als Adresse codiert werden, sodass der Absender und die Brieftasche des Absenders kein komplexes Engineering benötigen, um P2SH zu implementieren.
  3. P2SH verlagert die Last der Erstellung des Skripts auf den Empfänger, nicht auf den Absender.
  4. P2SH verlagert die Last in der Datenspeicherung für das lange Skript von der Ausgabe (die sich im UTXO-Set befindet) auf die Eingabe (in der Blockchain gespeichert).
  5. P2SH verschiebt die Last in der Datenspeicherung für das lange Skript von der gegenwärtigen Zeit (Bezahlung) auf eine zukünftige Zeit (wenn es ausgegeben wird).
  6. P2SH verlagert die Transaktionsgebühr für ein langes Skript vom Absender auf den Empfänger, der das lange Einlösungsskript einfügen muss, um es auszugeben.

Zu Punkt 4 sieht es für mich immer noch suboptimal aus.

Stellen Sie sich vor, ich habe eine Firma, bei der ich, um die Zahlung von Kunden ausgeben zu können, auch die Unterschriften von mindestens 1 von 2 anderen Partnern einholen muss. Mein Skript würde so aussehen:

2 <My PubKey> <Partner 1's PubKey> <Partner 2's PubKey> 3 OP_CHECKMULTISIG

Für jede eingehende Zahlung, die ich ausgeben möchte, scriptSigmüsste meine also mit dem obigen Skript plus 2 Signaturen aufgebläht werden <sig1> <sig2>.

Stellen Sie sich vor, ich hätte Tausende dieser Transaktionen, dies würde die Blockchain aufblähen und wahrscheinlich die Verarbeitungsfähigkeiten des Netzwerks verringern.

Ich habe mich gefragt: Gibt es eine Möglichkeit, diese Skripte als "Konten" in "Skript-Wallets" zu verwalten und nicht in der Blockchain zu speichern?

Wenn eine Validierung erforderlich ist, kann ich dieses Skript einfach aus der "Brieftasche" abrufen und die Transaktion überprüfen.

Wie wäre es möglich?

Antworten (1)

Erstens, ja, Sie haben Recht, dass Sie jedes Mal, wenn Sie von derselben p2sh-Adresse ausgeben, das Skript angeben, das zu dieser Adresse gehasht wird. Und ja, wenn Sie mehrmals von derselben Adresse ausgeben, haben Sie Recht, dies wäre höchst ineffizient, da Sie das Skript jedes Mal preisgeben müssten und das Skript sehr lang sein könnte.

Bei Bitcoin gilt es jedoch nicht als sicher, Adressen wiederzuverwenden. Jede p2sh-Adresse sollte einmal verwendet werden, nicht viele Male wie in Ihrem obigen Szenario. In diesem Fall ist es überhaupt nicht ineffizient oder suboptimal. Abgesehen davon nehme ich an, dass etwas wie Segwit verwendet werden könnte, um Skripte außerhalb des Bandes zu speichern, aber das wäre eine bedeutende und komplizierte Änderung ohne großen Gewinn.

Aber wenn mein Entsperrskript immer dasselbe ist, was bedeutet, dass sein Hash immer derselbe ist, wie ist es dann möglich, Adressen in diesem Fall nicht wiederzuverwenden?
Meinen Sie damit, dass jeder der Partner des Deals für jede Transaktion einen anderen PubKey generieren sollte?
Wenn Sie schließlich von der Adresse ausgeben, sollten Sie alle Utxos gleichzeitig an diese Adresse ausgeben und diese Adresse nicht verwenden, um erneut Geld zu erhalten. Eine neue p2sh-Adresse mit verschiedenen Pubkeys sollte erstellt werden.
Das ist was ich dachte. Vielen Dank =]