2 - Porquê uma média de 10 mins por cada bloco? (sim, o parâmetro do ajuste de dificuldade assim o estipula, mas porquê este valor médio de 10 mins? Porque não 20 mins ou 3h)
Porque quando o tempo é muito alto, as transações demoram para ocorrer. Imagine esperar 3 horas numa transação.
QUando o tempo é muito curto, tipo 10 segundos, a quantidade de
blocos órfãos é muito grande.
Blocos orfãos são um desperdício de energia. Eles ocorrem quando dois blocos são minerados ao mesmo tempo, e os nodes por algum motivo seguem um deles e não o outro. Como vale a chain maior, o outro vira orfão e aquele miner fica no prejuízo.
Mas isso é o ajuste de dificuldade que tenta sempre apontar para esse valor médio de 10 mins. As acções que a rede toma são com o intuito de respeitar esses 10 mins. Ou seja este valor de 10 mins é um valor que faz com que a rede se auto-ajuste! Não sei como explicar o que me vai na cabeça!
Quando a rede "vê" que estão a sair blocos muito depressa (<< 10 mins), a rede ajusta a dificuldade para um valor maior (que na verdade é um target menor). Quando os blocos estão a "sair" muito lentos (>> 10 mins), a rede ajusta o valor da dificuldade para um valor mais pequeno (um target maior).
Mas se essa é realmente a razão, então a pergunta tem que tomar uma forma ligeiramente diferente que é:
Como é que Satoshi chegou à conclusão que o valor para esse tal equilíbrio era de 10 minutos? Até porque se colocarmos causas financeiras em jogo, ainda menos certo é chegar a um valor!
E o artigo da infopedia não me parece muito correcto. Por exemplo eles dizem:
During the standard mining process, miners attempt to generate new blocks by solving the hash—the hexadecimal number that stores the block's information.
A hash do bloco não é um "número hexadecimal que guarda a informação do bloco". É um número hexadecimal que representa a informação do header do bloco. E esse header contém a seguinte informação:
The block header is a 256-bit piece of data that contains the following information:
Version: The current version of the Bitcoin protocol.
PrevBlockHash: The hash of the previous block in the blockchain.
MerkleRoot: The root hash of the Merkle tree of all transactions in the block.
Time: The timestamp of the block.
Bits: A 32-bit number that represents the difficulty of mining the block.
Nonce: A 32-bit number that is used to adjust the hash of the block until it meets the difficulty requirement.
Ainda sobre o target difficulty, há um detalhe que é contra-intuitivo. O target difficulty é apenas um número e os miners quando calculam a hash do header do bloco e ajustam essa hash com o nonce, até obterem um valor menor que este target difficulty. E este target difficulty é um número com uma determinada quantidade de zeros no início do número. E quanto mais zeros tiver este número, menor é este número e mais difícil é aos miners encontrarem uma hash + nonce a baixo deste número.
Suponhamos que o target difficulty é
000009999900000.
Se um miner calcular uma hash + nonce e obtiver um valor de 00001000000000, então este bloco não é válido porque o valor encontrado pelo miner é superior ao target difficulty.
Quando o target difficulty é aumentado, significa baixar aquele número de
000009999900000 para por exemplo
000000999900000. Este número tem mais um zero no início, logo é mais pequeno que o outro que tem mais um zero no início.
Isto só para dizer que aumentar a dificuldade significa diminuir o target difficulty! xD