Altura (Height)

A posição de um bloco na blockchain

Diagrama mostrando a altura de um bloco na blockchain como sua distância do bloco gênese.

A altura de um bloco indica a sua posição na blockchain.

Ela é calculada com base na distância do bloco em relação ao bloco gênese.

A contagem começa do zero. Então o primeiro bloco da blockchain (o bloco gênese) é o bloco 0.

Uso

Como a altura é usada no Bitcoin?

dois grandes ajustes que acontecem no Bitcoin em intervalos de altura específicos.

1. Ajuste do Alvo

2.016 blocos

Diagrama mostrando o ajuste do alvo acontecendo a cada 2016º bloco.

O alvo se ajusta a cada 2.016 blocos (aproximadamente a cada 2 semanas).

Isso ajuda a manter um intervalo de 10 minutos entre os blocos conforme os mineradores entram e saem da rede ao longo do tempo.

Por exemplo, o primeiro ajuste do alvo aconteceu na altura de bloco 2.016, o segundo na altura 4.032, o terceiro na 6.048, e assim por diante.

2. Halving do Subsídio do Bloco

210.000 blocos

Diagrama mostrando o halving do subsídio do bloco a cada 210.000º bloco.

O subsídio do bloco é reduzido pela metade a cada 210.000 blocos (aproximadamente a cada 4 anos).

Esse halving do subsídio é o que cria o fornecimento fixo de bitcoin, pois eventualmente o subsídio chegará a zero e nenhum novo bitcoin será emitido.

Por exemplo, o subsídio começou em 50 BTC. Na altura 210.000 caiu para 25 BTC, na altura 420.000 caiu para 12,5 BTC, e assim por diante. Na altura 6.930.000 (e após 33 halvings no total), o subsídio chegará a zero.

Outros usos

A altura também é usada em alguns outros lugares no Bitcoin, principalmente relacionados à elegibilidade de transações para serem mineradas:

Locktime

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 pode ser usado para impedir que uma transação seja minerada até depois de uma altura específica.

Por exemplo, se você define um locktime de 500.000 em uma transação, essa transação só pode ser minerada em um bloco com altura 500.001 ou acima.

Locktime Relativo

Diagrama mostrando o campo sequence sendo usado para definir um locktime relativo na transação.

O locktime relativo pode ser usado para impedir que uma transação seja minerada até que a saída que ela gasta tenha atingido certa profundidade na blockchain.

Por exemplo, se você define um locktime relativo de 100 blocos em uma entrada de transação que gasta a saída de uma transação no bloco 500.000, essa transação só pode ser minerada em um bloco com altura 500.101 ou acima.

Transação Coinbase

Diagrama mostrando a altura do bloco atual sendo incluída dentro da transação coinbase desse bloco.

A partir do bloco 227.836, todas as transações coinbase precisam conter a altura do bloco em que serão mineradas.

Isso força cada transação coinbase a ter um TXID único, pois antes disso era possível que transações coinbase de blocos diferentes tivessem o mesmo TXID.

Referenciando blocos

A altura é um identificador único de um bloco?

A altura não é garantidamente um identificador único de um bloco.

Durante a mineração, é possível que dois blocos sejam minerados ao mesmo tempo. Portanto, pode haver dois blocos diferentes competindo pela mesma altura na blockchain:

Diagrama mostrando dois blocos competindo pela mesma altura no topo da blockchain.
Isto é uma parte normal de como o bitcoin funciona.

Consequentemente, dependendo de qual bloco for construído em cima primeiro, há uma chance de um bloco que ocupa uma altura perto do topo da cadeia mudar:

Diagrama mostrando um bloco diferente ocupando uma altura específica na blockchain após uma reorganização da cadeia.
Isto é conhecido como uma reorganização da cadeia.

Então, embora a altura seja, em geral, uma forma útil de referenciar um bloco na blockchain, nem sempre se pode confiar nela para referenciar um bloco específico, especialmente se esse bloco estiver perto do topo da blockchain.

  • O hash do bloco é a forma mais confiável de referenciar um bloco. Um hash sempre referencia um bloco específico, enquanto a altura é mais um descritor do que um identificador único.
  • A altura fica mais confiável quanto mais fundo o bloco desce na blockchain. Se um bloco chega a 3+ blocos de profundidade, é altamente improvável que seja trocado por uma reorganização da cadeia.

Comandos

bitcoin-cli getblockcount

Este comando retorna a altura atual da blockchain.

$ bitcoin-cli getblockcount
953548

A altura da blockchain é atualmente 953.548. Mas, como a contagem começa do zero, tecnicamente há 953.549 blocos na blockchain no total. Não é um fato muito útil, mas resolvi mencionar mesmo assim.

bitcoin-cli getblockhash [altura]

Este comando retorna o hash do bloco para uma altura específica na blockchain.

$ bitcoin-cli getblockhash 953548
0000000000000000000109034ee4e258865d51a6a37f9de255a9534f04dab40b

Como mencionado, a altura não é uma forma confiável de referenciar blocos perto do topo da blockchain. Por exemplo, se você usar bitcoin-cli getblockhash 953548 para obter o hash do bloco que está atualmente no topo da cadeia, o resultado pode mudar se ocorrer uma reorganização da cadeia.

Se o seu nó mantém vários blocos na mesma altura, este comando retorna o hash do bloco que faz parte da cadeia mais longa atual. Se houver vários blocos na ponta da sua cadeia, o seu nó considera o primeiro bloco que recebe como parte da cadeia mais longa atual (mas, de novo, isso pode mudar se houver uma reorganização da cadeia).

bitcoin-cli getblockheader [hash]

Este comando fornece informações básicas sobre um bloco, incluindo a sua altura.

$ bitcoin-cli getblockheader 0000000000000000000109034ee4e258865d51a6a37f9de255a9534f04dab40b
{
    "hash": "0000000000000000000109034ee4e258865d51a6a37f9de255a9534f04dab40b",
    "confirmations": 1,
    "height": 953548,
    "version": 536928256,
    "versionHex": "2000e000",
    "merkleroot": "f8f6fc67b3ac08ec513edadbdfc81b1662437899135638877a5f9b24fa5d6e59",
    "time": 1781376863,
    "mediantime": 1781374208,
    "nonce": 1693632769,
    "bits": "1702068f",
    "target": "00000000000000000002068f0000000000000000000000000000000000000000",
    "difficulty": 138955357012247.3,
    "chainwork": "00000000000000000000000000000000000000012f9e8bbb37016b0bd6be2bca",
    "nTx": 5768,
    "previousblockhash": "000000000000000000011767c69efb0aa71cab35e9da3f3cd7d8d631901e4411"
}

Resumo

A altura é usada para referenciar um bloco que ocupa uma posição específica na blockchain.

Porém, é melhor usar o hash do bloco para referenciar um bloco de forma confiável, já que os blocos perto do topo da blockchain podem mudar devido a reorganizações da cadeia.

No entanto, uma vez que um bloco chega a 3 ou mais blocos de profundidade na blockchain, provavelmente não será substituído por outro bloco, e a altura se torna boa o suficiente como identificador único. Mesmo assim, é mais seguro usar o hash do bloco quando possível.