Altura (Height)
A posição de um bloco na blockchain
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?
Há dois grandes ajustes que acontecem no Bitcoin em intervalos de altura específicos.
1. Ajuste do Alvo
2.016 blocos
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
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
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
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
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:
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:
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.