Um timelock impede que as moedas se movam até um momento ou uma altura de bloco. O Bitcoin tem quatro ferramentas, em dois níveis.
Nível de transação, absoluto: nLockTime
Cada transação tem um nLockTime de 4 bytes. Valores abaixo de 500.000.000 são alturas de bloco. Valores mais altos são marcas de tempo Unix. A transação não pode ser minerada antes. Só conta se pelo menos uma entrada tiver um nSequence diferente de 0xffffffff. Desde o BIP113 (2016), os bloqueios temporais comparam-se com o median time past dos últimos 11 blocos, não com a marca de tempo própria do bloco, para que mineradores não possam manipulá-lo.
Limitação: quem tiver a chave privada pode simplesmente criar outra transação sem o bloqueio.
Nível de script, absoluto: OP_CHECKLOCKTIMEVERIFY (BIP65)
CLTV, ativado em dezembro de 2015, redefiniu OP_NOP2. Num script, <expiry> OP_CHECKLOCKTIMEVERIFY OP_DROP faz falhar o script a menos que o nLockTime da transação de gasto seja pelo menos o vencimento, e do mesmo tipo. A própria moeda fica bloqueada.
Nível de transação, relativo: nSequence (BIP68)
nSequence em cada entrada pode significar «não até N blocos ou N×512 segundos depois de a saída gasta ter sido confirmada». O bit 31 desativa-o, o bit 22 escolhe tempo em vez de blocos, e os 16 bits baixos guardam o valor. Isso só se aplica a transações com versão 2 ou superior.
Nível de script, relativo: OP_CHECKSEQUENCEVERIFY (BIP112)
CSV redefiniu OP_NOP3, e ativou-se junto com BIP68 e BIP113 em julho de 2016. 144 OP_CHECKSEQUENCEVERIFY significa que a saída só pode ser gasta pelo menos 144 blocos (cerca de um dia) depois de confirmada.
Onde se usam
- Lightning: CSV atrasa as saídas próprias do emissor, dando à outra parte tempo para punir um estado antigo. CLTV fixa prazos de HTLC.
- Herança e recuperação: «a minha chave agora, ou a chave do meu herdeiro após um ano».
- Cofres: atrasos antes de levantamentos, com uma chave de emergência.
- Anti fee-sniping: carteiras como Bitcoin Core põem nLockTime na altura atual para dissuadir mineradores de reescrever blocos recentes.
Cuidado: bloqueios temporais relativos estão limitados a 65.535 blocos ou unidades, cerca de 15 meses em blocos.