Veja também: alvo
O que é “dificuldade”?
A dificuldade é uma medida de quão difícil é encontrar um hash abaixo de um determinado alvo.
A rede Bitcoin tem uma dificuldade de bloqueio global. Os blocos válidos devem ter um hash abaixo deste alvo. Os pools de mineração também têm uma dificuldade de compartilhamento específica do pool, definindo um limite inferior para compartilhamentos.
Com que frequência a dificuldade de rede muda?
A cada Blocos de 2016.
Qual é a fórmula para a dificuldade?
dificuldade = dificuldade_1_alvo / objetivo_atual
(o alvo é um número de 256 bits)
dificuldade_1_target pode ser diferente para várias maneiras de medir a dificuldade. Tradicionalmente, ele representa um hash em que os 32 bits iniciais são zero e o resto é um (isso é conhecido como “dificuldade de pool” ou “pdiff”). O protocolo Bitcoin representa alvos como um tipo de ponto flutuante personalizado com precisão limitada; como resultado, os clientes Bitcoin muitas vezes aproximam a dificuldade com base nisso (isso é conhecido como “bdiff”).
Como a dificuldade é armazenada em blocos?
Cada bloco armazena uma representação compactada ( chamado de “bits”) para seu destino hexadecimal real. O destino pode ser derivado dele por meio de uma fórmula predefinida. Por exemplo, se o destino compactado no bloco for 0x1b0404cb (armazenado na ordem little-endian: cb 04 04 1b
), o destino hexadecimal é
0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000
Observe que este formato compactado contém um bit de sinal no 24º bit e, por exemplo, a negação do alvo acima seria 0x1b8404cb no formato compactado. Como os alvos nunca são negativos na prática, entretanto, isso significa que o maior valor legal para os 24 bits inferiores é 0x7fffff. Além disso, 0x008000 é o menor valor válido para os 24 bits inferiores, pois os alvos são sempre armazenados com o menor expoente possível.
Como a dificuldade é calculada? Qual é a diferença entre bdiff e pdiff?
O alvo mais alto possível (dificuldade 1) é definido como 0x1d00ffff, o que nos dá um alvo hexadecimal de
0x00ffff * 2**(8*(0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
Deve-se notar que a mineração em pool geralmente usa alvos não truncados, o que coloca “dificuldade de pool 1” em
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Portanto, a dificuldade em 0x1b0404cb é, portanto:
0x00000000FFFF0000000000000000000000000000000000000000000000000000 /0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.420938523983 (bdiff)
E:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.669773817162 (pdiff)
Aqui está uma maneira rápida de calcular a dificuldade do bitcoin. Ele usa uma série de Taylor modificada para o logaritmo (você pode ver os tutoriais em flipcode e wikipedia) e depende de logs para transformar o cálculo de dificuldade:
Para ver a matemática para ir da dificuldade normal cálculos (que requerem grandes ints maiores do que o espaço em qualquer inteiro normal) para o cálculo acima, aqui está um pouco de python:
Qual é a dificuldade atual?
Dificuldade atual, como saída de getDifficulty do Bitcoin.
Gráficos
Qual é a máxima uma dificuldade?
Não há meta mínima. A dificuldade máxima é aproximadamente: maximum_target / 1 (já que 0 resultaria em infinito), que é um número ridiculamente grande (cerca de 2 ^ 224).
A dificuldade máxima real é quando current_target = 0, mas nós não seria capaz de calcular a dificuldade se isso acontecesse. (felizmente, nunca vai acontecer, então estamos bem.)
A dificuldade da rede pode diminuir?
Sim, pode. Veja a discussão no alvo.
Qual é a dificuldade mínima?
A dificuldade mínima, quando o alvo está no valor máximo permitido, é 1.
Qual taxa de hash da rede resulta em uma determinada dificuldade?
A dificuldade é ajustada a cada bloco de 2016 com base no tempo que levou para encontrar os blocos anteriores de 2016. À taxa desejada de um bloco a cada 10 minutos, os blocos de 2016 levariam exatamente duas semanas para encontrar. Se os blocos de 2016 anteriores levou mais de duas semanas para encontrar, a dificuldade é reduzida. Se eles levaram menos de duas semanas, a dificuldade aumenta. A mudança na dificuldade é proporcional ao tempo de mais ou menos duas semanas que os blocos de 2016 anteriores levaram para encontrar .
Para encontrar um bloco, o hash deve ser menor que o destino. O hash é efetivamente um número aleatório entre 0 e 2 ** 256-1. O deslocamento para a dificuldade 1 é
0xffff * 2**208
e para a dificuldade D é
(0xffff * 2**208)/D
O número esperado de hashes que precisamos calcular para encontrar um bloco com dificuldade D é, portanto,
D * 2**256 / (0xffff * 2**208)
ou apenas
D * 2**48 / 0xffff
A dificuldade é definida de forma que os blocos de 2016 anteriores teriam sido encontrado na taxa de um a cada 10 minutos, então estávamos calculando hashes (D * 2 ** 48 / 0xffff) em 600 segundos. Isso significa que a taxa de hash da rede foi
D * 2**48 / 0xffff / 600
em relação aos blocos de 2016 anteriores. Pode ser ainda mais simplificado para
D * 2**32 / 600
sem muita perda de precisão.
Na dificuldade 1, isso é cerca de 7 Mhashes por segundo.
No momento da redação, a dificuldade é 22012.4941572, o que significa que no conjunto anterior de blocos de 2016 encontrados, a taxa média de hash da rede foi
22012.4941572 * 2**32 / 600 = around 157 Ghashes per second.
Em quanto tempo devo esperar gerar um bloco?
(A questão eterna.)
O tempo médio para encontrar um bloco pode ser aproximado calculando:
time = difficulty * 2**32 / hashrate
onde a dificuldade é a dificuldade atual, hashrate é o número de hashes que seu minerador calcula por segundo e o tempo é a média em segundos entre os blocos que você encontra.
Por exemplo, usando Python, calculamos o tempo médio para gere um bloco usando uma plataforma de mineração de 1 Ghash / s quando a dificuldade for 20.000:
$ python -c "print 20000 * 2**32 / 10**9 / 60 / 60.0"23.85
e descubra que leva menos de 24 horas em média.
- Qualquer moagem do hash tem a mesma chance de “ganhar” que qualquer outro. O jogo dos números é quantas tentativas seu hardware pode fazer por segundo.
- Você precisa saber a dificuldade (acima) e sua taxa de khash / s (relatada pelo cliente).
- Mineração A comparação de hardware tem algumas estatísticas que podem ajudá-lo a prever o que você pode obter.
- Visite uma calculadora ou faça você mesmo as contas,
- http://www.alloscomp.com/bitcoin/calculator.php
- http://www.vnbitcoin.org/bitcoincalculator.php
- https://bitknock.com/calculator
- Lembre-se de que é apenas uma probabilidade! Não há garantias de que você ganhará a cada N dias.
Links relacionados
- Histórico de dificuldade de Bitcoin
- O que é dificuldade de mineração de Bitcoin?
- Veja também: alvo