Was passiert, wenn relative und absolute Sperrzeiten in derselben Transaktion verwendet werden?

Der BIP 68 definiert das Eingangsfolgenummernfeld als Bitvektor neu, der eine relative Verriegelungszeit codiert.

Eine Transaktion kann mit einer absoluten Sperrzeit belastet werden, indem das Feld nLockTime auf einen Wert ungleich Null gesetzt wird und indem sichergestellt wird, dass mindestens eine Eingabesequenz nicht maximal ist (nicht 0xffffffff).

Was passiert, wenn eine One-Input-Transaktion nLockTime > 0 setzt und eine relative Sperrzeit unter BIP 68 einführt? Beispielsweise könnte nLockTime in 12.000 Blöcken ablaufen und die relative Sperrzeit der Eingabe könnte in 11.000 Blöcken ablaufen. Umgekehrt kann die relative Sperrzeit nach der absoluten Sperrzeit ablaufen.

Welcher Verriegelungsmechanismus gewinnt in diesen Fällen? Werden beide Sperren geprüft oder nur eine? Wenn letzteres, welches?

Der Abschnitt "Kompatibilität" von BIP 68 weist darauf hin, dass beide Sperren überprüft werden, aber nach meiner Lektüre wird dies nicht explizit angegeben:

Die einzige Verwendung von Sequenznummern durch die Referenz-Client-Software von Bitcoin Core besteht darin, die Überprüfung der nLockTime-Einschränkungen in einer Transaktion zu deaktivieren. Die Semantik dieser Anwendung wird von diesem BIP bewahrt.

Antworten (1)

Wenn eine bestimmte Sperrzeit im nLockTimeFeld in einer Transaktion angegeben ist. Dies bedeutet, dass diese Transaktion nicht gesendet/von Bergleuten akzeptiert werden kann, bis entweder das blockheightoder unixtimeverstrichen ist.

Wenn andererseits a OP_CSVverwendet wird, bedeutet dies, dass eine Transaktion, die sich auf diese Eingabe bezieht, nicht ausgegeben werden kann, bis some blockheightoder unixtimeverstrichen ist.

Wenn wir beide zusammenführen und zusammen verwenden, erstellen wir im Grunde genommen eine Transaktion, die nicht an das Bitcoin-Netzwerk gesendet werden kann, bis einige Zeit nLockTimeverstrichen ist, und sie kann auch nicht ausgegeben werden, bis einige blockheightZeit verstrichen ist. OP_CSVzielt speziell auf die Ausgabefähigkeit einer Transaktion ab, während eine zeitgesperrte Transaktion einfach verhindert, dass eine Transaktion an das Bitcoin-Netzwerk gesendet wird, bis ihre Sperrzeit abgelaufen ist.

Es werden also beide Zeitschlösser ausgewertet, oder? Mit anderen Worten: Keiner wird den anderen außer Kraft setzen. Wenn ja, können Sie auf eine Quelle verweisen (außer dem Absatz in BIP 68, den ich zitiert habe)?
Es kommt auf das nsequenceFeld an. Wenn das Disable-Flag gesetzt ist, wird es nicht ausgewertet (da es keine übereinstimmende Bedeutung gibt). Andernfalls wird es ausgewertet. Sie können dies im Quellcode von Bitcoin Core, script/interpretter.cpp, Zeile 334 und weiter, einsehen. Das Verhalten von OP_CSV und Timelocks ist unterschiedlich, sie überschreiben sich nie gegenseitig, da sie semantisch unterschiedliche Dinge bedeuten.