Locktime
Pós-datando uma transação de bitcoin
O campo locktime permite impedir que uma transação seja minerada até depois de uma altura de bloco ou tempo específico.
Uma transação com um locktime no futuro também não será aceita nem retransmitida pelos nós, então você precisa armazená-la localmente até que o locktime definido na transação tenha passado.
Em outras palavras, definir um locktime em uma transação é o equivalente a pós-datar um cheque.
Uso
Como o locktime funciona?
O campo locktime tem 4 bytes e pode conter valores entre 0 (0x00000000) e 4294967295 (0xffffffff).
Você define uma altura de bloco ou um tempo específico usando faixas diferentes de valores:
| Locktime | Descrição |
|---|---|
| <=499999999 | A transação não pode ser minerada até depois de uma altura específica. |
| >=500000000 | A transação não pode ser minerada até depois de um tempo específico. |
Isso também é conhecido como "locktime absoluto", pois você define uma altura ou tempo específico no futuro. Também é possível definir um locktime relativo em uma transação, se preferir.
Para o campo locktime ser habilitado, pelo menos um dos valores de sequence das entradas precisa ser 0xfffffffe ou menor. Se todos os valores de sequence das entradas forem o máximo 0xffffffff, a transação é considerada "final" e o recurso de locktime fica desabilitado.
Altura
0 a 499999999
Definindo o locktime entre 0 (0x00000000) e 499999999 (0x1dcd64ff), você especifica que a transação só pode ser minerada na blockchain após uma altura específica.
Essa é uma faixa mais que suficiente, pois não se espera que a blockchain alcance uma altura de 499.999.999 antes de uns 9488 anos.
Tempo
500000000 a 4294967295
Definindo o locktime entre 500000000 (0x1dcd6500) e o valor máximo de 4294967295 (0xffffffff), você especifica que a transação só pode ser minerada na blockchain após um tempo específico.
Esse valor de tempo está em Unix Time:
A restrição de tempo de fato é então baseada no campo de tempo dentro de um cabeçalho de bloco. O tempo definido dentro de um bloco é controlado pelo minerador e, embora geralmente fique bem próximo do tempo atual, às vezes pode estar uma ou duas horas defasado.
Essa faixa de valores permite definir um locktime entre 05 de novembro de 1985, 00:53:20 e 07 de fevereiro de 2106, 06:28:15.
Exemplos
Aqui estão alguns exemplos simples do locktime em ação:
- b0fa60f601d5fe6fb1501aa614503b9af688492f68bcf8268d7cdb30f3534079
- Locktime: 199000
- Primeira transação com um locktime válido definido para uma altura de bloco específica. O locktime foi definido para a altura de bloco 199.000, e a transação foi então minerada no bloco 199.002.
- 648fe76b22bc1768b56facab73af046ea40fa190f2e882a7cc99a5b6fccf05de
- Locktime: 1358106524
- Primeira transação com um locktime válido definido para um tempo Unix específico. O locktime foi definido para 1358106524 (13 de janeiro de 2013, 19:48:44), e a transação foi minerada no bloco 216.410, com um timestamp de 1358111522 (13 de janeiro de 2013, 21:12:02).
E, por garantia, aqui estão alguns exemplos em que o campo locktime foi usado, mas não estava de fato funcionando, porque nenhum dos valores de sequence estava abaixo do valor máximo de 0xffffffff:
- 13e100dd08b6da0a7426ea520b0bb3ae54cef79dd045e2e4f7116023df3a5c95
- Locktime: 198370
- Esta é a primeira transação de todas com uma configuração de locktime para uma altura de bloco específica. Porém, o recurso de locktime não estava habilitado, porque o único valor de sequence estava definido como 0xffffffff. O locktime foi definido para a altura de bloco 198.370, mas ela na verdade foi minerada 11 blocos antes, no bloco 198.359.
- 938b171fdeabc7b99d1720c1df070ba373d892cd5aec3d6dda641ce67ed37ca2
- Locktime: 1409599601
- Esta transação tem um locktime definido para um tempo Unix específico, mas o recurso de locktime novamente não estava habilitado, porque a única entrada tinha um valor de sequence de 0xffffffff. O locktime foi definido para 1409599601 (01 de setembro de 2014, 19:26:41), mas ela na verdade foi minerada antes desse tempo, no bloco 287.080, com um timestamp de 1393005249 (21 de fevereiro de 2014, 17:54:09).
Transação Bruta
O campo locktime são sempre os últimos 4 bytes de uma transação:
020000000001019a40d4b676ad05adea5a0aa1d093a5c16f298c4b7e31d70fd157e262e86d08900100000000feffffff 0228e227000000000017a914ae72b0ccd1a65ec89a7be021e47eccc60a440bb3874dcbf91600000000160014553be08a6faa63e4038b4627996af76637522c500247304402200d9f0f85b355a29f4c14b3ee16257d92fc67429b47a15c1658d8b6737425a1c7022000d0c64c2004b0c1c47968b94c9d24820d1df20c13d37a66d20f62b8feca67b00121021853828191c3e1a4fa29c685e5e1da4710dd1dc35c9b85d6bab23c0e00109f45 500e0c00 Transação: f168381d64b32d7b03b3f0b82cadba72e815351686e3bff2b8b5ab92f65a58bf
O campo locktime em uma transação bruta está em little-endian. Então, no exemplo acima, se invertermos a ordem dos bytes de 500e0c00, obtemos 000c0e50; e, se convertermos isso de hexadecimal para decimal, obtemos 790096.
Ou seja, essa transação definiu o locktime como a altura de bloco 790.096 (e foi minerada no bloco seguinte a essa altura).
Little Endian
Recursos
- Meu entendimento do locktime está correto?
- Como o locktime é imposto no cliente padrão?
- nLockTime
- validation.cpp (procure a função IsFinalTx)