Distribuição de Poisson

O modelo matemático da descoberta de blocos no Bitcoin

A distribuição de Poisson é o modelo matemático que descreve a probabilidade de um determinado número de eventos ocorrer em um intervalo fixo de tempo, quando os eventos acontecem a uma taxa média constante e independentemente uns dos outros. No Bitcoin, ela é a ferramenta essencial para entender quando blocos são minerados, com que frequência forks naturais ocorrem, e quanto tempo se deve esperar por uma confirmação.

Esta página aprofunda a matemática da distribuição de Poisson aplicada ao Bitcoin, desde a derivação a partir da distribuição binomial até o cálculo da probabilidade de forks e tempos de espera.

Conteúdo

Definição

A probabilidade de k eventos em um intervalo

A distribuição de Poisson é definida pela fórmula:

P(k) = e−λ · λk / k!

Onde:

Duas propriedades fundamentais da distribuição de Poisson:

Para a mineração de Bitcoin no intervalo de 10 minutos, λ = 1. Portanto, a média e a variância do número de blocos por janela de 10 minutos são ambas 1 — um desvio padrão de ±1 bloco, o que significa que janelas com 0, 1 ou 2 blocos são igualmente comuns.

Derivação da distribuição binomial

De Bernoulli a Poisson: o limite dos eventos raros

A distribuição de Poisson emerge como um caso limite da distribuição binomial quando o número de tentativas N é muito grande e a probabilidade de sucesso p é muito pequena, mantendo o produto N·p = λ constante.

No Bitcoin, cada tentativa individual de hash é um evento de Bernoulli (sucesso ou fracasso) com probabilidade p extremamente pequena (da ordem de 2−256 vezes o alvo). O número de tentativas por segundo N é enorme (da ordem de 1020). O produto N·p é o número esperado de blocos por segundo — aproximadamente 1/600.

Neste regime (N enorme, p ínfimo), calcular a binomial diretamente é computacionalmente inviável, mas a aproximação de Poisson é essencialmente exata:

# Comparacao: Binomial vs Poisson para encontrar blocos
# N = numero de tentativas de hash por segundo (aproximado)
# p_prob = probabilidade de uma unica tentativa ser bem-sucedida

N = 5e18  # 5 exahashes/s (rede inteira)
p_success = 1 / (2**256) * 0x00000000000000000002068f0000000000000000000000000000000000000000

# Distribuicao Binomial: P(k) = C(N,k) * p^k * (1-p)^(N-k)
# (impraticavel de calcular para N enorme)

# Distribuicao de Poisson (aproximacao):
lambda = N * p_success  # = 1 bloco a cada 10 min (λ ≈ 1)
puts lambda

# Probabilidade de k blocos em 10 min via Poisson:
(0..5).each do |k|
  poisson = Math.exp(-lambda) * (lambda**k) / (1..k).reduce(1, :*)
  puts "P(#{k}) = #{poisson.round(4)}"
end

# Resultado:
# P(0) = 0.3679
# P(1) = 0.3679
# P(2) = 0.1839
# P(3) = 0.0613
# P(4) = 0.0153
# P(5) = 0.0031

A precisão da aproximação é notável: para os parâmetros do Bitcoin, o erro entre a binomial e a Poisson é menor que uma parte em 1010. Na prática, são indistinguíveis.

Aplicação à Mineração

Como a Poisson descreve a descoberta de blocos

A mineração de blocos segue um processo de Poisson: a cada instante, a probabilidade de um novo bloco ser encontrado é constante e independente do passado. Isso gera previsões específicas sobre o comportamento observável da rede.

Em qualquer janela de 10 minutos (λ = 1):

Em uma janela de 1 hora (λ = 6):

A cauda da distribuição é longa: embora a média seja 6 blocos por hora, ocasionalmente a rede produz 10 ou mais blocos em uma hora — sem que nada especial tenha acontecido. É apenas a natureza aleatória do processo.

O parâmetro λ (lambda)

O ajuste da taxa pela dificuldade

O parâmetro λ determina completamente a distribuição de Poisson. No Bitcoin, λ para o período de 10 minutos é mantido em ≈ 1 pelo ajuste de dificuldade a cada 2016 blocos.

Se a taxa de hash da rede dobra, a dificuldade dobra no próximo ajuste, e λ retorna a 1. Sem esse ajuste, λ cresceria (ou diminuiria) com o poder de hash, e os tempos entre blocos se desviariam do alvo de 10 minutos.

A Lei dos Pequenos Números. A distribuição de Poisson é às vezes chamada de "lei dos pequenos números" porque descreve eventos raros em um grande número de tentativas. No Bitcoin, cada tentativa de hash individual é um evento extremamente raro (probabilidade ~10−20), mas o número de tentativas é tão grande que o resultado agregado é estável e previsível.

Distribuição Exponencial e Tempo entre Blocos

O intervalo entre blocos segue uma exponencial

O tempo entre eventos em um processo de Poisson segue a distribuição exponencial:

P(T > t) = e−λt

Esta é uma das distribuições mais importantes para entender o comportamento da rede Bitcoin. Ela responde a perguntas como: qual a probabilidade de esperar mais de 30 minutos por um bloco?

# Probabilidade de esperar mais de t minutos pelo proximo bloco
# Distribuicao exponencial: P(T > t) = e^(-t/10)

def prob_wait_longer_than(t_minutes)
  Math.exp(-t_minutes / 10.0)
end

puts "Esperar >10 min: #{prob_wait_longer_than(10)}"   # 0.3679 (36.8%)
puts "Esperar >30 min: #{prob_wait_longer_than(30)}"   # 0.0498 (5.0%)
puts "Esperar >60 min: #{prob_wait_longer_than(60)}"   # 0.0025 (0.25%)
puts "Esperar >120 min: #{prob_wait_longer_than(120)}"  # 6.1e-06 (0.0006%)

A probabilidade de esperar mais de 10 minutos pelo próximo bloco é de 36,8%. Isso pode parecer contraditório: "se a média é 10 minutos, por que é tão comum esperar mais de 10 minutos?"

A resposta está na assimetria da distribuição exponencial. Diferente da distribuição normal (que é simétrica em torno da média), a exponencial é fortemente assimétrica à direita. A mediana do tempo entre blocos é de aproximadamente 6,93 minutos — metade dos blocos chega em menos de 7 minutos. Mas os valores extremos (30, 40, 60 minutos) puxam a média para 10 minutos.

A propriedade mais contra-intuitiva da distribuição exponencial é a falta de memória:

P(T > t + s | T > s) = P(T > t)

Em português: se você já esperou s minutos sem um bloco, a probabilidade de esperar mais t minutos é a mesma de quando você começou a esperar. O tempo de espera restante não depende de quanto tempo já passou. Se já se passaram 20 minutos, o tempo esperado restante para o próximo bloco continua sendo 10 minutos.

A falta de memória significa que longos períodos sem blocos não são "compensados" por períodos mais rápidos depois. Cada hash é independente — não há um "acúmulo de sorte" a ser compensado. Um período de 40 minutos sem blocos é seguido pelo mesmo processo de Poisson de sempre, com o mesmo λ.

Probabilidade de Forks Naturais

Quando dois blocos são minerados quase ao mesmo tempo

Como a mineração é um processo de Poisson, é inevitável que dois mineradores encontrem blocos válidos em instantes muito próximos. A probabilidade de um fork natural depende do tempo de propagação de blocos na rede:

# Probabilidade de um fork natural
# lambda = taxa de blocos por segundo = 1/600
# t = tempo de propagacao (segundos)

def fork_probability(t, lambda_per_sec=1.0/600)
  # chance de outro bloco ser encontrado
  # enquanto o primeiro ainda esta se propagando
  1 - Math.exp(-lambda_per_sec * t)
end

puts fork_probability(1)   # 0.0017 (0.17%)
puts fork_probability(10)  # 0.0165 (1.65%)
puts fork_probability(30)  # 0.0488 (4.88%)
puts fork_probability(60)  # 0.0952 (9.52%)

# Com blocos maiores (mais transacoes, mais tempo de propagacao):
puts fork_probability(120) # 0.1813 (18.13%)

Para blocos típicos de ~1 MB, o tempo de propagação é de alguns segundos, resultando em uma taxa de forks de cerca de 1-2%. Blocos maiores (que demoram mais para se propagar) aumentam a janela de vulnerabilidade. É por isso que o limite de tamanho de bloco (e, mais recentemente, a segregação de testemunhas via SegWit) ajuda a manter a taxa de forks baixa: blocos menores se propagam mais rápido, reduzindo a probabilidade de dois blocos concorrentes.

A taxa de forks observada na rede Bitcoin é consistente com o modelo de Poisson — mais uma confirmação de que a mineração se comporta como um processo de Poisson real.

Poisson na Análise de Satoshi

A distribuição usada na Seção 11 do whitepaper

Na seção 11 do whitepaper, Satoshi Nakamoto usou a distribuição de Poisson como parte central do cálculo da probabilidade de sucesso de um ataque de 51%. Especificamente, ele modelou o número de blocos que o atacante consegue minerar enquanto a rede honesta minera z blocos como uma variável aleatória de Poisson com taxa:

λ = z · q / p

Onde q é o poder de hash do atacante e p = 1 − q é o poder de hash dos honestos. Quanto maior a vantagem z da cadeia honesta, maior o λ — e menor a probabilidade de o atacante conseguir minerar blocos suficientes para alcançá-la.

A equação completa de Satoshi combina a distribuição de Poisson (número de blocos do atacante) com a ruína do jogador (probabilidade de ele alcançar os honestos dado que minerou k blocos). O resultado é uma função que decai exponencialmente com z, a menos que q se aproxime de 0,5.

A análise detalhada, com a equação completa e exemplos numéricos, está na página de Processos Estocásticos.

A genialidade da abordagem de Satoshi foi reconhecer que a mineração de Bitcoin podia ser modelada por uma das distribuições mais bem estudadas da probabilidade — a Poisson — e usar isso para quantificar a segurança do sistema.

Recursos