Locktime

Pós-datando uma transação de bitcoin

Diagrama mostrando como o campo locktime pode ser usado para impedir que uma transação seja minerada até uma altura de bloco ou tempo específico no futuro.

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.

Imagem de um cheque pós-datado, representando uma transação com um locktime de uma altura de bloco específica.

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:

Faixas de valores do locktime
LocktimeDescrição
<=499999999A transação não pode ser minerada até depois de uma altura específica.
>=500000000A 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

Diagrama mostrando o campo locktime sendo usado para definir uma altura de bloco específica.

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

Diagrama mostrando o campo locktime sendo usado para definir um tempo de bloco específico.

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:

Unix Time

Converta o número de segundos desde 01/01/1970, 00:00:00 para uma data.

0d

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:

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:

Transação Bruta

O campo locktime são sempre os últimos 4 bytes de uma transação:

020000000001019a40d4b676ad05adea5a0aa1d093a5c16f298c4b7e31d70fd157e262e86d08900100000000feffffff0228e227000000000017a914ae72b0ccd1a65ec89a7be021e47eccc60a440bb3874dcbf91600000000160014553be08a6faa63e4038b4627996af76637522c500247304402200d9f0f85b355a29f4c14b3ee16257d92fc67429b47a15c1658d8b6737425a1c7022000d0c64c2004b0c1c47968b94c9d24820d1df20c13d37a66d20f62b8feca67b00121021853828191c3e1a4fa29c685e5e1da4710dd1dc35c9b85d6bab23c0e00109f45500e0c00

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).

Ícone Ferramenta Little Endian

Little Endian

Converta um número entre as ordens de bytes big-endian e little-endian.

0d
0x
0 bytes
0x
0 bytes
Tamanho do Campo

Recursos