Ein Timelock verhindert, dass Coins bewegt werden, bis ein Zeitpunkt oder eine Blockhöhe erreicht ist. Bitcoin hat vier Werkzeuge auf zwei Ebenen.
Transaktionsebene, absolut: nLockTime
Jede Transaktion hat ein 4-Byte-nLockTime. Werte unter 500.000.000 sind Blockhöhen. Höhere Werte sind Unix-Zeitstempel. Die Transaktion darf vorher nicht gemined werden. Es zählt nur, wenn mindestens ein Input ein nSequence ungleich 0xffffffff hat. Seit BIP113 (2016) vergleichen Timelocks die Median Time Past der letzten 11 Blöcke, nicht den eigenen Zeitstempel des Blocks, damit Miner ihn nicht manipulieren können.
Grenze: wer den privaten Schlüssel hat, kann einfach eine andere Transaktion ohne Lock erstellen.
Script-Ebene, absolut: OP_CHECKLOCKTIMEVERIFY (BIP65)
CLTV, aktiviert im Dezember 2015, definierte OP_NOP2 neu. In einem Script lässt <expiry> OP_CHECKLOCKTIMEVERIFY OP_DROP das Script scheitern, sofern das nLockTime der ausgebenden Transaktion nicht mindestens dem Ablauf entspricht und vom selben Typ ist. Der Coin selbst ist gesperrt.
Transaktionsebene, relativ: nSequence (BIP68)
nSequence an jedem Input kann bedeuten „nicht vor N Blöcken oder N×512 Sekunden, nachdem der ausgegebene Output bestätigt wurde“. Bit 31 deaktiviert es, Bit 22 wählt Zeit statt Blöcke, und die unteren 16 Bits halten den Wert. Das gilt nur für Transaktionen mit Version 2 oder höher.
Script-Ebene, relativ: OP_CHECKSEQUENCEVERIFY (BIP112)
CSV definierte OP_NOP3 neu und aktivierte sich zusammen mit BIP68 und BIP113 im Juli 2016. 144 OP_CHECKSEQUENCEVERIFY bedeutet, der Output darf erst mindestens 144 Blöcke (etwa einen Tag) nach Bestätigung ausgegeben werden.
Wo sie genutzt werden
- Lightning: CSV verzögert die eigenen Outputs des Broadcasters und gibt der Gegenseite Zeit, einen alten Zustand zu bestrafen. CLTV setzt HTLC-Fristen.
- Erbschaft und Wiederherstellung: „mein Schlüssel jetzt, oder der Schlüssel meines Erben nach einem Jahr“.
- Vaults: Verzögerungen vor Abhebungen, mit einem Notfallschlüssel.
- Anti-Fee-Sniping: Wallets wie Bitcoin Core setzen nLockTime auf die aktuelle Höhe, um Miner davon abzuhalten, kürzliche Blöcke umzuschreiben.
Achtung: relative Timelocks sind auf 65.535 Blöcke oder Einheiten begrenzt – etwa 15 Monate in Blöcken.