Werden Versuche, von einem UTXO mit Zeitsperre auszugeben, abgelehnt?

Hintergrund

Ich habe ein wenig über zeitgebundene Bitcoin-Transaktionen im Zusammenhang mit dem Lightning Network gelesen. Eine Sache, die nie erklärt wurde, ist, was passiert, wenn man versucht, die Ausgabe eines zeitgesperrten UTXO vorzeitig auszugeben.

Beispiel

Alice sendet 1 BTC an Bob an Adresse B über Transaktion T, Ausgang 0. Die Transaktion ist jedoch zeitgesperrt, bis die Blockhöhe, derzeit bei H, H+100 erreicht. Um also T:0 auszugeben, braucht Bob zwei Dinge:

  1. Der private Schlüssel, der Adresse B entspricht
  2. Ausreichende Zeit, damit die Blockhöhe H+100 erreicht.

Bob ist ungeduldig und versucht T:0 auszugeben, wenn die Blockhöhe H+30 ist. Er sendet die Transaktion.

Frage

Was passiert mit Bobs Transaktion? Ignorieren es die Miner und lehnen es die Validatoren ab, da H+100 noch nicht stattgefunden hat? Ich hatte immer angenommen, dass das passiert; Die Transaktion wird einfach verworfen.

Aber bei der Erforschung des Lightning Network, in dem Transaktionen mit Zeitsperre eine Schlüsselrolle spielen, ist es nicht ungewöhnlich, dass ein Kanalkollege versucht, seinen Partner zu betrügen, indem er eine TX mit Zeitsperre aus einem früheren Zustand sendet. Es liegt tatsächlich an der unschuldigen Partei, diese Transaktion in der Blockchain zu sehen und irgendwie einige der Daten, die in dieser Transaktion offenbart werden, als Eingabe für ihre eigene Straftransaktion zu verwenden. Außerdem muss diese Straftransaktion ausgeführt werden, bevor die zeitgesperrte Cheat-Transaktion durchläuft. Und das verstehe ich nicht. Wie sieht die unschuldige Partei diesen betrügerischen Transaktionsversuch überhaupt, wenn er bereits von den Bergleuten und Prüfern abgelehnt wurde?

Oder ist meine Annahme, dass die Miner Transaktionen ablehnen, die von einer noch nicht getroffenen zeitgesperrten Eingabe abhängen, falsch?

Antworten (1)

Ich werde nur auf den ersten Teil Ihrer Frage eingehen, da ich denke, dass die Wurzel Ihrer Verwirrung dort angegangen werden kann.

Time Locking in Bitcoin bezieht sich auf zwei verwandte und interagierende, aber grundlegend unterschiedliche Konzepte:

  • Transaktionen können eine Sperrzeit haben. Dies ist ein Feld pro Transaktion ( nLockTime), das ungefähr den frühesten Zeitpunkt oder die früheste Höhe bestimmt, zu der diese Transaktion in die Kette aufgenommen werden kann. Eine Transaktion mit einer Sperrzeit in der Zukunft ist nicht ungültig; es ist lediglich nicht akzeptabel, in die Kette aufgenommen zu werden, bis diese Zeit verstrichen ist. Die meisten Bitcoin-Knoten leiten heute keine Transaktionen weiter, es sei denn, sie sind für das Mining in den nächsten Blöcken geeignet.
  • Skripte können mithilfe des Opcodes OP_CHECKLOCKTIMEVERIFY eine Sperrzeit erzwingen . Dieser Opcode erfordert, dass die Ausgabentransaktion dieses Skripts ein nLockTimeFeld hat, das nicht unter einem angegebenen Wert liegt. Es interagiert nicht direkt mit der Zeit oder der Höhe . Alles, was es tut, ist, dass sich die Ausgabetransaktion auf die Zukunft beschränkt, und eine Transaktion ohne eine solche nLockTimeist bedingungslos ungültig und kann niemals abgebaut werden. Die Folge ist natürlich, dass diese Ausgabe nicht ausgegeben werden kann, bis diese Zeit verstrichen ist, aber die Relation wird zweigeteilt.

Diese Trennung der beiden hat eine Reihe von Vorteilen. Das bedeutet, dass Skripte nur einmal ausgeführt werden müssen; Wir müssen dann nicht jedes Mal neu ausführen, wenn sich die Zeit/Höhe ändert, um neu zu bewerten, ob sie noch gültig sind. Es bedeutet auch, dass Transaktionen sich im Laufe der Zeit nicht selbst ungültig machen können – sobald sie gültig sind (und akzeptabel sind, um abgebaut zu werden), kann eine Transaktion nicht inakzeptabel werden, es sei denn, sie wird doppelt ausgegeben.

Die Antwort auf Ihre Frage hängt also davon ab, wie die Transaktion gegen das Zeitschloss verstößt:

  • Wenn die Transaktion ein zu niedriges nLockTimeFeld hat, ist die Transaktion einfach unbedingt ungültig.
  • Wenn die Transaktion ein korrektes nLockTimeFeld hat, aber ihre Zeit noch nicht gekommen ist, ist die Transaktion nicht für Mining oder Relay geeignet, aber wenn es soweit ist, kann jeder sie senden und minen lassen.
Hervorragende Informationen. Danke für die Antwort!