Empty Blocks - Blocos Vazios no Bitcoin

Jihan wu
Imagem retirada em 14/03/2022 de: https://twitter.com/jihanwu/status/704476839566135298

Jihan Wu é cofundador da empresa Bitmain [01], criada em 2013, que produz as famosas máquinas de mineração Antminers (baseadas no chip ASIC - Application Specific Integrated Circuit, desenvolvidos especificamente para trabalhar com os algoritmos SHA-256), o tuíte acima em tradução livre diz mais ou menos o seguinte: “desculpe, continuaremos minerando blocos vazios. Esta é uma liberdade dada pelo protocolo do Bitcoin”. A manifestação de Jihan Wu tem explicação em outro detalhe do universo da mineração de criptomoedas. Dois pools de mineração nasceram da Bitmain sendo que uma delas, a AntPool é uma dos maiores e a outra é a BTC,com que foi vendida em 2021 para BIT Mining, uma mineradora com sede nos Estados Unidos [02]. Com o aumento da mineração em território americano o modelo de mineração via pool pode vir a ser substituído pela mineração feita por empresas num futuro próximo.

Desde que nasceu lá em janeiro de 2009 o Bitcoin convive com este estranho e/ou curioso fenômeno da mineração de blocos vazios. Desde aquela época alguns especialistas tentam desestimular a mineração de blocos vazios. Considerando que existem pools que nunca mineraram blocos vazios e com base no que declarou Jihan Wu, a mineração de blocos vazios também passa pela vontade do minerador. Aparentemente, se não quiser, o minerador não minera bloco vazio. Na teoria a mineração de blocos vazios não faz sentido, pode fazer se o interesse for apenas para embolsar a recompensa, mas na prática pode ter algumas explicações.

A hipótese do mempool estar vazio como justificativa para a mineração de um bloco vazio poderia ter alguma veracidade lá nos primeiros meses do começo da história do Bitcoin. De acordo com o usuário Kano do fórum Bitcointalk que afirma ser dono de um pool de mineração é possível contar nos dedos de uma mão os momentos em que o mempool estave completamente vazio nos últimos 6 anos (a postagem é de 2020). Ele vai além, diz que seu pool já minerou 2.429 e apenas um bloco vazio foi inadvertidamente minerado pelo seu pool [03].

Alguns Dados (Controversos) Sobre a Quantidade de Blocos Vazios

Num artigo assinado por Celia Wan que foi publicado em 15/06/2020 no site theblockcrypto,com [04] temos uma estatística referente ao começo de 2020. Apesar da frase específica sobre a quantidade de blocos vazios não fazer referência direta ao Bitcoin o título indica que a autora está falando de Bitcoin: “Bitcoin miners are mining fewer empty blocks in 2020, and it may not all be due to chance” em tradução livre o título diz: “Mineradores de Bitcoin estão minerando menos blocos vazios em 2020 e pode ser que não seja por acaso”. Transcrevemos o parágrafo com os dados: “According toThe Block’s research a total of 71 empty blocks, or blocks that do not contain any transactions, were mined in the first five months of 2020, accounting for 0.3% of the total blocks produced. This is less than half of the 0.79% figure from the same period last year”, em tradução livre: “De acordo com pesquisa do The Block Research nos cinco primeiros meses de 2020 foram minerados um total de 71 blocos vazios que não continham nenhuma transação representando 0,3% do total de blocos minerados. Isso representa menos da metade do percentual de 0,79% do mesmo período do ano anterior”. (obs.: considera-se vazio ou sem nenhuma transação apesar da quantidade de transações destes blocos chamados de vazios mostrarem 1 transação porque trata-se da transação coinbase que gera novos bitcoins pagos como recompensa para o minerador responsável pelo novo bloco). Três coisas para se notar por aqui: a) a queda de um ano para outro dentro do mesmo período avaliado; b) o baixo percentual de blocos vazios num período de quase meio ano (5 meses); e c) Alguns pools que mais contribuíram para a mineração de blocos vazios são aqueles que também aparecem na lista das mineradoras que tem mais hashes direcionados para a mineração de bitcoin: F2Pool, BTC,com, ViaBTC, AntPool e SlushPool.

Dois meses depois, no dia 18/08/2020 foi publicado um artigo no site braiins,com o seguinte título: “Why Pools Mine Empty Blocks and How Stratum V2 Fixes This”, em tradução livre: “Porque Pools Mineram Blocos Vazios e como Stratum V2 Resolve Isso” [05]. A Brainns é uma empresa de software especializada em mineração de criptomoedas e tem entre seus clientes a SlushPool. Transcrevemos um trecho do começo do artigo: “More than 15% of the blocks in the Bitcoin blockchain do not contain any transactions, except of course the coinbase transaction rewarding the miner with newly issued coins”, em tradução livre: “Mais de 15% dos blocos no Blockchain do Bitcoin não contêm nenhuma transação além da transação coinbase referente a recompensa paga ao minerador com criação de novas moedas”. Fazendo uma conta aproximada e considerando que o bloco 642.000 foi minerado no dia 03/08/2020, alguns dias antes do artigo ser publicado, no dia 18/08/2020, teríamos algo em torno de 96 mil blocos vazios.

Num artigo publicado em 29/05/2021 no blog Cypherpunk Cogitations com o título original “Empty Blocks, Full Mempool” [06] assinado por Jameson Lopp ele afirma o seguinte: “All in all I found 1,567 empty blocks mined between full blocks in the entire history of the blockchain”, em tradução livre: “Ao todo eu encontrei 1.567 blocos vazios em todo o histórico de blocos do blockchain”. O levantamento dele foi feito com uso de um script que ele mesmo escreveu. No final do mês de maio de 2021 a numeração de blocos estava na casa dos 685.000. Neste caso os 1.567 blocos não chegam nem perto de 1% que daria algo em torno de 6.8 mil blocos.
No principal fórum dedicado a discussões sobre Bitcoin, o Bitcointalk que foi criado pelo próprio Satoshi Nakamoto, num tópico com o título bitcoin empty blocks o usuário Picard78 diz que encontrou 11 blocos vazios entre os 966 blocos minerados no período de uma semana, partindo do bloco 644.232 (minerado em 18/08/2020) ao 645.198 (minerado em 24/08/2020). Isso dá pouco mais de 1.1% [07].


Um gráfico publicado no mesmo artigo do blog Cypherpunk Cogitations [6] que abrange um período grande de maio de 2015 a maio de 2021 indica uma tendência de queda. Nesse período houve um mês atípico que foi abril de 2017 onde houve um volume bem acima do normal. (obs.: Uma das possíveis explicações para o número anormal de blocos vazios minerados em 2017 remete ao fork que deu origem ao bitcoin cash. Na época Jihan Wu foi um grande defensor do aumento do tamanho do bloco e suas mineradoras AntPool e BTC,com estariam minerando blocos vazios de propósito para aumentar a fila do mempool e para mostrar que o tempo gasto para minerar um bloco vazio e outro cheio era mais ou menos próximo).


Imagem retirada em 16/03/2022 de: Empty Blocks, Full Mempool

Numa postagem feita no fórum Bitcointalk em 03/05/2020 com o título “Bitcoin’s Empty Blocks Analaysis” [08] o usuário mikeywith postou alguns gráficos, entre eles temos um que totaliza a quantidade de blocos vazios apurados ano a ano, de 2015 a 2019: 2015 = 1701, 2016 = 977, 2017 = 528, 2018 = 438 e 2019 = 314. Nesta apuração, mesmo que a quantidade de blocos vazios detectados seja muito maior, também temos uma tendência de queda. Entre os maiores mineradores de blocos vazios encontramos os pools de mineração (AntPool, F2Pool e BTC,com) de acordo com gráficos publicados na mesma postagem pelo usuário mikeywith.

O foco aqui é falar sobre blocos vazios do Bitcoin, mas como trombamos com esta informação vamos registrar por aqui um percentual de blocos vazios no Ethereum, citado num artigo publicado pela Viabtc [09] que por sinal é um pool de mineração, transcrevemos um trecho do texto original: ”According to the above data, the empty rate of most ETH mining pools is less than 5%, and only NanoPool and an individual address exceed the normal level”, em tradução livre: ”De acordo com os dados acima o índice de blocos vazios minerados por pools no ETH é menor do que 5% com exceção apenas do NanoPool e de alguns mineradores isolados”.

O assunto blocos vazios volta e meia aparece no noticiário dos sites especializados ou nos fóruns que debatem temas relacionados a criptomoedas e Blockchains.

No fórum bitcoin.stackexchange [10], por exemplo, este tema já apareceu em 2011 e de lá para cá, de tempos em tempos, costuma aparecer alguém por lá perguntado sobre este assunto.


Imagens retiradas de consultas feitas no Google em 14/03/2022.

Mesmo nos dias atuais não precisamos fazer muito esforço para encontrar um bloco vazio, ou contendo apenas uma transação, a coinbase que gera os bitcoins da recompensa pela mineração do bloco. No dia 06/03/2022, por exemplo, encontramos um bloco vazio, ou melhor, contendo apenas a transação coinbase.

Bloco vazio 726182
Imagem retirada em 08/03/2022 do site: Blockchain.com Explorer | BTC | ETH | BCH

O bloco 726182 foi minerado por uma cooperativa (polonesa) de mineradores, a SlushPool [11]. De acordo com dados do site blockchain,com consultado nesta data é um dos 5 maiores pools de mineração de bitcoins. O SlushPool foi criado em 2010 por Marek “Slush” Palatinus que não faz parte desta cooperativa desde 2013.

Abrindo um parêntese antes de continuar existe uma curiosidade ligada ao apelido Slush. O conceito de pool de mineração foi apresentado publicamente em 27/11/2010 pelo usuário Slush no fórum bitcointalk. De acordo com o site da SlushPool eles já mineraram mais de 1.284.465 bitcoins desde 2010. Em 2013 Marek “Slush” Palatinus partiu para novos empreendimentos. Slush é cofundador da Trezor, que é considerado uma das carteiras offline mais seguras que existem.

Continua…

1 curtida

Evolução Inicial do Processo de Mineração de Bitcoins

No início, quando o Bitcoin ainda estava no começo e o sistema tinha suas falhas alguns se aproveitaram de algumas brechas para minerar blocos vazios, possivelmente apenas em busca da recompensa que no início era de 50 bitcoins. Com o passar do tempo e na medida em que as fragilidades eram detectadas, discutidas e sanadas tais problemas foram diminuindo. Outro fator que a passagem do tempo trouxe para os mineradores foi o aumento da dificuldade. Isso dificultou a vida dos mineradores individuais operando equipamentos simples tendo que concorrer com mineradores operando máquinas caseiras construídas especificamente para esta tarefa com uso de várias placas de vídeo (máquinas conhecidas como rigs). Nessa época, novembro de 2010, o usuário Slush (Marek Palatinus de origem Polonesa) apresentou no fórum bitcointalk o conceito de pool de mineração. Essa ideia consiste basicamente na união dos esforços (poder de processamento) de vários mineradores e suas respectivas máquinas na mineração de um único bloco. Existem várias formas de remuneração dos mineradores que aderem a um pool [12] que geralmente não consiste na simples divisão dos bitcoins recebidos como recompensa como pode parecer a princípio.

No final de 2013 Jihan Wu e Micree Zhan fundaram a Bitmain e lançaram um equipamento específico para minerar Bitcoin que foi batizado de Antminer S1. Até então a forma mais poderosa de mineração era baseada nos rigs que basicamente consistia no uso de várias placas de vídeos rodando scripts/algoritmos específicos. O uso de rigs também é conhecido como mineração GPU [13].

A versão mais recente da série Antminer é a S19 Pro+ Hyd. que pode ser comprada diretamente no site da Bitmain por apenas USD 15.048 ou cerca de 77 mil Reais sem contar a espera na fila, a grande possibilidade de não sobrar nenhuma para você já que a maioria é vendida antecipadamente e arcando com os impostos de importação.

Antminer S19
Depois que o primeiro equipamento Antminer com chip específico (ASIC) foi lançado a mineração de bitcoins consolidou-se como um processo industrial, de larga escala e alto custo energético concentrando a maior parte do poder de processamento das transações nas mãos dos pools de mineração. De acordo com artigo publicado em 12/01/2022 99,99% da mineração está nas mãos dos pools [14].

Devido ao baixo custo da energia grande parte da mineração de bitcoins estava concentrada na China. A partir de 2020 o governo chinês apertou o cerco contra as mineradoras e contra as criptomoedas. O principal motivo além da intenção de alavancar a circulação do Yuan digital foi impedir o acesso a criptomoedas que facilita a movimentação de recursos fora do controle governamental.

Mineração China 2020
Imagem retirada em 17/03/2022 de: Bitcoin: o impacto do desligamento das fazendas de mineração na China – Investimentos – Estadão E-Investidor – As principais notícias do mercado financeiro

Funcionamento Básico de um Pool de Mineração

Antes de começar faço uma ressalva importante. Além de não ser programador não sou minerador. Não temos intenção ensinar nem de fazer um manual ou guia passo a passo para alguém começar a minerar Bitcoins. Este subitem nasceu com base em diversas fontes e postagens encontradas em fóruns com foco neste tema. Trata-se de uma pesquisa modesta que mal chega a arranhar a complexidade do tema. É possível que várias pontas soltas (conceituais) acabem dificultando o entendimento do processo de mineração via pool. Mesmo assim tentaremos explicar superficialmente como funciona um pool de mineração (sem entrar em detalhes específicos como scripts/algoritmos porque não é a nossa praia) trazendo alguns detalhes que geralmente não se lê por aí quando o assunto mineração é abordado. Como já citei diversas vezes, se for para fazer mais do mesmo preferimos gastar o nosso tempo para outras finalidades. Uma visão superficial do processo de mineração pode até sinalizar que o processo é difícil e concorrido, mas talvez não seja suficiente para mostrar o este processo é bruto, disputado na casa dos milissegundos.

Quando você monta um pool que é uma espécie de “cooperativa” de mineradores as máquinas ficam espalhadas em diversos locais e até mesmo em países diferentes. Por mais que a tecnologia de comunicação e os softwares/firmwares tenham se aperfeiçoado ainda assim não é tarefa fácil comandar diversos equipamentos (em diferentes estágios de uso, tais como: novos ou seminovos) espalhadas em diversos lugares. Essa rede é estressada a cada novo bloco que é minerado ou a cada 10 minutos em média.

Um pool funciona basicamente numa arquitetura do tipo servidor x cliente (servidor central x mineradores distribuídos, que ironicamente é uma arquitetura oposta ao conceito descentralizado ou distribuído da rede P2P do Bitcoin) rodando programas especificamente desenvolvidos para sustentar a operação do pool. Este tipo de programa [15] controlado pelo administrador central do pool é o responsável pela coleta das transações do mempool para incluí-las num bloco a ser minerado.

Stratum
Imagem retirada em 17/03/2022 de: Stratum V2 | The next generation protocol for pooled mining

É o administrador do pool que fica monitorando constantemente a rede para detectar se foi liberado um novo bloco. Quando isso acontece ele precisa pegar o hash deste último bloco que é necessário para a criação do próximo bloco. O administrador também se encarrega de propagar um bloco minerado por um dos mineradores do pool entre várias outras tarefas que executa. (obs.: A cooperativa SlushPool [11] que minera exclusivamente bitcoin tem cerca de 18 mil usuários ativos [16 - 17], a maioria é constituída por pequenos mineradores individuais).

A corrida para a mineração de um bloco começa imediatamente após um bloco ser minerado e disponibilizado na rede. Neste instante todos os demais mineradores que perderam a corrida têm que “pegar” o novo bloco minerado e fazer a validação deste bloco. O tempo (que é medido em segundos ou milissegundos é citado de forma divergente por especialistas) estimado para fazer esta validação depende de alguns fatores como por exemplo: versão do software, idade do equipamento, largura de banda, latência da rede, tamanho do cache, velocidade da CPU etc.

Se o minerador é do tipo “caxias” ele (o programa que ele usa/roda) vai validar o bloco inteiro. O jeito certo de validar um bloco é fazê-lo por inteiro (processo conhecido como full validating) e isso inclui o bloco e as transações que ele contém. Teoricamente esta validação integral de um bloco é uma atribuição dos mineradores, como parte do processo de mineração. No caso dos pools apenas o administrador do pool é obrigado a rodar um nó de validação total (miner’s full node) porque é ele que inclui as transações, que ele “escolhe” no mempool, num bloco e distribui para os mineradores do seu pool iniciarem o processo de mineração (busca do nonce).

Como nem todo mundo é “santinho” neste universo das criptomoedas alguns perceberam que para começar a minerar um novo bloco eles não teriam a necessidade de validar as transações sendo necessário apenas pegar dados do cabeçalho e mais especificamente o hash do último bloco para tentar minerar o próximo bloco. Este processo que “ignora” a validação das transações é conhecido como SPV Mining [18].

Quando um novo bloco é detectado o administrador de um pool imediatamente distribui um bloco vazio para seus associados (aparentemente para ganhar tempo), antes mesmo de pegar o hash e validar as transações (sendo que alguns não validam as transações, apenas pegam o hash que é necessário para criar o novo bloco e vincular na cadeia de blocos). Recebendo o bloco vazio apenas com a transação coinbase os mineradores já começam a procurar o nonce deste bloco vazio. Em questão de 1 ou 2 segundos o administrador do pool pega o hash, escolhe as transações no mempool que ainda não foram processadas e faz uma espécie de update no bloco vazio que ele tinha enviado antes incluindo as transações e distribui o bloco com as transações inclusas aos mineradores do pool. A troca do bloco vazio pelo bloco com transações não invalida o processo de busca do nonce e os mineradores ganham preciosos milissegundos no processo. A justificativa dos pools que adotam esta estratégia de enviar um bloco vazio antes de enviar um bloco com transações é que o bloco cheio demora mais tempo para ser distribuído aos mineradores [05].

Continua…

1 curtida


Why Pools Mine Empty Blocks and How Stratum V2 Fixes This | Braiins

Neste processo que ocorre logo nos primeiros milissegundos da mineração a sorte pode ajudar e um nonce ser encontrado antes do recebimento do update com as transações. Este pode ser um dos motivos pelos quais nascem blocos vazios em questão de segundos após um bloco ter sido minerado.

A imagem abaixo com o carimbo de data/hora dos blocos 644.927 e 644.928 pode ser um exemplo. O timestamp do bloco 644.927 registra que ele foi minerado no dia 23/08/2020 as 00:12:15s e o bloco seguinte 644.928 foi minerado as 00:12:29s (horários em GMT-3) indicando que eles foram minerados com 14 segundos de diferença. O bloco 644.928 é um bloco vazio porque contém apenas uma transação coinbase. O bloco 644.928 (vazio) foi minerado pelo pool conhecido como Poolin.


Imagem retirada em 16/03/2022 de: https://blockstream.info/

Casos iguais ao demonstrado acima já foram debatidos em diversas postagens nos fóruns da comunidade (Bitcointalk, bitcoin.stackexchange etc.) e abordados em diversos artigos desde 2010.

O tempo estimado para um minerador detectar um novo bloco na rede, baixar este bloco para pegar o hash e validar as transações demora de 15s a 20s dependendo da quantidade de transações incluídas no bloco (que pode variar de centenas a milhares) de acordo com Andreas Antonopoulos.

Existe outra estimativa de tempo que foi estimada por um usuário que usa o apelido de Kano no fórum Bitcointalk onde ele afirma que é minerador de Bitcoin. Para o mesmo processo acima ele estima que o tempo para fazer uma validação total de um bloco demora entre 100ms e 120ms. Eu desconfio que neste caso o minerador pega apenas o que interessa, ou seja, o hash do bloco para poder minerar o próximo bloco sem fazer a validação das transações inclusas no bloco.


Imagem retirada de: Bitcoin Empty Blocks

Para se ter uma ideia da brutalidade deste processo em termos temporais montamos a escala abaixo. Um minuto tem 60 segundos e 10 segundos tem 10.000 milissegundos.


Nesta verdadeira corrida disputada na casa dos milissegundos pela mineração do próximo bloco uma coisa é absolutamente certa. Quem minera um bloco sai em vantagem diante dos outros mineradores porque ele já sabe quais transações estão incluídas no último bloco minerado e sabe quais poderão ser escolhidas do mempool sem risco do seu próximo bloco ser recusado por causa do gasto duplo.

Esta desvantagem dos outros mineradores também pode ser um dos motivos pelos quais os demais mineradores usam o processo de gerar um bloco vazio antes mesmo de gerar um bloco com transações fazendo com que os mineradores do pool comecem a procurar o nonce o mais rápido possível (ganhando alguns milissegundos).

Nesta dinâmica dos pools, os blocos vazios são criados o tempo todo (um atrás do outro a cada 10 minutos em média como parte da rotina operacional) e alguns acabam nascendo apenas com a transação coinbase enquanto a maioria deles nasce com várias transações incluídas deixando de ser um bloco vazio. Seja porque algum sortudo encontrou o nonce em poucos segundos ou até mesmo de propósito para gerar os bitcoins da recompensa e para não deixar que um minerador minere vários blocos em sequência já que ele leva vantagem em relação aos demais.

Considerações Finais

Fato é que os blocos vazios existem, são validados e ficam fazendo parte da cadeia de blocos para o resto do tempo de vida do Blockchain. Uns dizem que a criação de blocos vazios ajuda a esticar mais a corrente aumentando a segurança e tornando um pouco mais difícil a vida dos eventuais atacantes.

Existem os que criticam e os que aceitam a existência dos blocos vazios. Se efetivamente houvesse vontade e interesse me parece que a mineração de blocos vazios poderia ser evitada, talvez incluindo algum parâmetro no checklist de validação de blocos.

Um dos riscos existentes na possibilidade de mineração de blocos vazios e a consequente inclusão na cadeia de blocos é a realização de um ataque baseado na mineração continuada de blocos vazios por parte de um atacante bem poderoso, como por exemplo um país que poderia tomar o controle de todas as mineradoras existentes no seu território à força para direcioná-lo no sentido de minerar apenas blocos vazios atrapalhando e atrasando o processamento das transações até inviabilizar o sistema. Considerando que atualmente o Bitcoin gera mais de 260 mil transações por dia em pouco tempo teríamos o caos instalado no sistema pela demora no processamento das transações. Esta é uma possibilidade bem remota, mas que já foi discutida dentro da comunidade, principalmente quando grande parte dos mineradores estava localizada num determinado país da Ásia.

Para concluir, se por algum acaso você descobriu por aí que é possível minerar blocos vazios e andou tendo algumas ideias, não se iluda. A dificuldade para minerar um bloco vazio (procurar o nonce) é praticamente a mesma que é necessária para minerar um bloco com transações. Existem alguns mineradores solitários tentando minerar bitcoins e alguns poucos já conseguiram esta façanha. Um dos últimos foi o bloco 718124 minerado no dia 11/01/2022 e não foi um bloco vazio, além da recompensa o minerador solitário abocanhou cerca de 0,10 BTC referente a taxas. Nos últimos anos não chegou a 5 por ano o número de mineradores individuais que alcançaram essa façanha, em termos percentuais a chance é bem pequena.

Minerador ,Sortudo
Imagem retirada em 17/03/2022 de: https://twitter.com/ckpooldev/status/1481085652863447047

Fontes Adicionais para Consulta

[01] - https://www.bitmain.com/

[02] - Bitmain desmembrou Antpool para se concentrar no design de hardware de mineração de bitcoin - BitcoinEthereumNews.com

[03] - Why not to mine on pools mining empty blocks, and why do pools mine empty blocks

[04] - https://www.theblockcrypto.com/post/67928/bitcoin-miners-are-mining-fewer-empty-blocks-in-2020-and-it-may-not-all-because-of-chance

[05] – Why Pools Mine Empty Blocks and How Stratum V2 Fixes This | Braiins

[06] - Empty Blocks, Full Mempool

[07] - Bitcoin Empty Blocks

[08] - Bitcoin's Empty Blocks Analaysis.

[09] - ViaBTC|What is the Story Behind All the Empty Blocks? | by ViaBTC | Medium

[10] - what's inside empty blocks? what purpose does it serve? - Bitcoin Stack Exchange

[11] – slushpool.com

[12] - Pool de mineração – Wikipédia, a enciclopédia livre

[13] - O que é uma plataforma de mineração?

[14] - Minerador de bitcoin sortudo valida bloco sozinho e recebe R$ 1,5 milhão

[15] - Stratum V2 | The next generation protocol for pooled mining

[16] - slushpool.com

[17] - https://cointelegraph.com.br/news/the-world-s-first-and-oldest-bitcoin-mining-pool-has-mined-nearly-1-3-million-btc-since-inception

[18] - Empty Block Data by Mining Pool | BitMEX Blog

1 curtida