Cuidado, Mineradores de Bitcoin: Blocos Inválidos Não Precisam Aplicar
Primeira publicação em HackerNoon
O Bitcoin é uma fortaleza impenetrável de validação.
Assim como meu artigo sobre a Lei de Moore, esse é um trecho de um artigo muito maior. É bom o suficiente para servir como uma peça independente porque o equívoco que isso pretende acabar é um equívoco comumente levantado que se torna irritantemente repetitivo.
Entendendo a rede Bitcoin sem matemática.
O Bitcoin é mais do que apenas uma cadeia de blocos. Quero ajudar você a entender como a rede blockchain do Bitcoin é projetada porque isso ajudará você a preencher algumas lacunas à medida que você começa a adquirir mais conhecimento neste campo. Eu digo rede blockchain porque o Bitcoin também tem uma rede de canais de pagamento (lightning) sobre ele que não afeta a estrutura da rede blockchain. Não vou discutir a rede lightning do Bitcoin neste artigo, pois não é tão relevante para os pontos que farei.
Abaixo está um exemplo aproximado da rede Bitcoin reduzida para 1000 nós de validação completa (na verdade, há 115.000 atualmente). Cada nó aqui tem 8 conexões com outros nós, porque esta é a quantidade padrão de conexões que o cliente faz sem nenhuma alteração feita nele. Meu nó está aqui em algum lugar, e se você estiver executando um, ele também está lá. Os nós da Coinbase estão lá, os nós da Bitmain estão lá, e se Satoshi ainda estiver por aí, o nó de Satoshi também está lá.
Observe que este é apenas um diagrama, e que a topologia de rede real pode (e provavelmente varia) disto. Alguns nós têm mais do que a quantidade padrão de conexões, enquanto outros podem optar por se conectar a um número limitado ou ficar atrás de apenas um outro nó. Não há como saber como ela realmente se parece porque ela foi projetada com a privacidade em mente (embora algumas empresas de monitoramento certamente tentem obter aproximações muito próximas) e os nós podem rotineiramente mudar quem são seus pares.
Comecei com esse diagrama porque quero que você entenda que não há diferenças nesses nós porque todos eles são validadores completos. Isso significa que todos eles verificam toda a cadeia para garantir que cada transação e bloco sigam as regras. Isso será importante conforme eu explicar mais.
Os de dentro não são diferentes dos de fora, todos têm a mesma quantidade de conexões. Quando você inicia um novo nó, ele encontra pares e se torna mais um na colmeia. A maior distância neste gráfico de qualquer um desses nós para outro é 6. Na vida real, há alguns desvios nessa distância porque encontrar novos pares não é um processo perfeitamente automatizado que distribui todos uniformemente, mas geralmente, adicionar mais nós à rede não muda isso. Existem 6 graus de Kevin Bacon, e em 6 saltos minha transação está nas mãos de (quase) todos os nós, se for válida.
Vou selecionar “meu” nó deste grupo e arrastá-lo para fora, para que eu possa demonstrar o que acontece quando eu crio uma transação e anuncio para a rede. Abaixo, você verá meu nó bem à direita, e então verá os outros 8 nós (meus pares) aos quais o meu está conectado.
Quando eu crio uma transação e “envio para o mundo”, ela na verdade vai apenas para esses 8 pares. Como o Bitcoin é projetado do zero para tornar cada nó um nó totalmente validador, quando esses 8 nós recebem minha transação, eles verificam se ela é válida antes de enviá-la para seus 8 pares. Se minha transação for inválida, ela nunca quebrará a “superfície” da rede. Meus pares nunca enviarão essas transações ruins para seus pares. Na verdade, eles nem sabem que eu criei essa transação. Não há como eles saberem, e eles tratam todos os dados como iguais, mas se eu continuasse enviando transações inválidas para qualquer um dos meus 8 pares, eles acabariam me bloqueando. Isso é feito por eles automaticamente para evitar que eu envie spam da minha conexão com eles. Não importa quem você é, ou quão grande é sua empresa, sua transação não será propagada se for inválida.
Agora, digamos que você não esteja executando um nó completo, mas esteja usando um cliente SPV. Existem vários clientes SPV para o desktop e para seu celular. Alguns deles são Electrum, Armory, Bread e Samourai Wallet. Clientes SPV são vinculados a um nó específico. Alguns podem ser configurados para alterar aquele ao qual se conectam ao longo do tempo, mas eles ainda são vinculados. É assim que o tethering se parece:
Quero que você observe que este é apenas um diagrama, e é fácil demonstrar tethering usando um nó que aparenta estar na borda, mas não há uma borda real, e tethering é tethering onde quer que esse nó esteja dentro deste diagrama. Eu destaquei isso em amarelo. Os nós aos quais estão sendo amarrados são verdes, e os pontos azuis são clientes SPV. Todas as informações que vão ou vêm do cliente SPV passam pelo nó ao qual estão amarrados. Eles dependem desse nó. Eles não fazem parte da rede. Eles não são nós.
É aqui que fica divertido, e onde outras pessoas tentam deturpar como a rede realmente funciona: E se eu quisesse começar a minerar?
Minerar um bloco é o ato de criar um bloco. Assim como uma transação que você deseja enviar, você deve criar o bloco e anunciá-lo à rede. Qualquer nó pode anunciar um novo bloco, não há nada de especial nesse processo, você só precisa de um novo bloco. A mineração tem se tornado cada vez mais difícil, mas se você quiser, pode comprar hardware especializado e conectá-lo ao seu nó pessoal.
Lembra daquela parte sobre transações inválidas? O mesmo vale para blocos, mas você precisa entender algo muito específico sobre como os blocos são criados.
Primeiro assista a este vídeo. Pulei para a parte importante sobre hashing, usando nonces (valor aleatório) e anexando a cadeia com esse novo cabeçalho de bloco:
Por favor, assista a coisa toda se tiver tempo. É pessoalmente meu vídeo favorito explicando como a mineração funciona.
Quando você chega à parte seguinte do vídeo onde os rótulos “Prev hash” são aplicados, esses são os cabeçalhos de bloco:
O que não é mencionado neste vídeo é que você pode criar cabeçalhos de blocos válidos mesmo se todas as transações dentro do bloco forem inválidas. Ainda requer a mesma quantidade de tempo para minerar blocos com transações inválidas como para minerar um bloco com transações válidas. O incentivo para gastar todo esse tempo e energia criando tal bloco seria forçar uma transação que o recompensa com Bitcoin que não é seu. É por isso que é importante que todos os nós verifiquem não apenas os cabeçalhos de bloco, mas as transações também. É isso que impede os mineradores de gastar esse tempo. Como todos os nós verificam, nenhum minerador pode enganar o sistema. Se todos os nós não verificassem, você teria que confiar naqueles que verificam. Isso separaria os nós em “tipos”, e o único tipo que importaria seriam aqueles que verificam.
E se você se juntar a um pool de mineração? Você pode fazer isso porque a mineração é muito difícil para você fazer sozinho, ou se você for uma entidade um pouco maior, pode preferir uma renda estável em vez de uma esporádica. Muitos mineradores fazem isso, e eles conectam seu hardware especializado diretamente a um pool de mineração usando um protocolo totalmente diferente chamado protocolo de mineração Stratum. Assim como criar uma transação com seu celular sem nó, você não precisa executar um nó para conectar seu hardware a um pool de mineração. Você pode minerar sem executar um nó, e muitos mineradores fazem exatamente isso. Aqui está o que parece abaixo em azul. Eu usei o Slush Pool para este exemplo:
Lembre-se, eu arrastei esses nós executados em pool para fora do diagrama para fins de demonstração. Assim como qualquer outro nó, esses nós executados em pool precisam de pares. Eles precisam de pares para receber transações e blocos, e precisam de pares para anunciar os blocos que eles criam. Permita-me reiterar novamente: Todos os nós validam todos os blocos e todas as transações.
Se qualquer um desses pools anunciar um bloco inválido, seus pares saberão porque eles validam completamente, e eles não o enviarão para outros nós. Assim como as transações, blocos inválidos não entram na rede.
Aqui está outra maneira de ver isso sem retirar esses nós do diagrama. Abaixo está um minerador privado que não quer ser conhecido, ele tem 8 pares aleatórios, e nenhum desses pares sabe que é um minerador. Novamente, isso é intencionalmente projetado dessa forma por razões de privacidade. Não há como nenhum nó na rede saber que o bloco que recebeu foi criado por seu par, ou retransmitido por seu par. Tudo o que eles sabem é se é válido ou não, e se for, eles enviam, se não for, eles não enviam.
Espero que você esteja entendendo, e não acredito que usei nenhuma matemática ou equação sofisticada para chegar aqui. Gostaria de prosseguir porque sinto que esta é uma cobertura completa, mas há uma coisa final que gostaria de abordar porque é este aspecto final que é usado para confundir outros que não entendem completamente tudo o que acabei de explicar. É usado de forma tão desenfreada que preciso abordá-lo.
Meu comentário original estava falando sobre clientes leves, também chamados de clientes SPV, e como eles não fazem parte da rede. Eu demonstrei isso acima com os pontos azuis amarrados. Sua resposta tenta implicar que os nós que mineram são os únicos nós cuja rejeição importa. Lembre-se: os nós não têm como saber quais outros nós mineraram um bloco versus quem retransmitiu um bloco, isso foi projetado intencionalmente.
Agora, um diagrama final para que eu possa tentar explicar a lógica que é usada quando as pessoas dizem “apenas os nós de mineração importam”. Alguns mineradores se conectam diretamente a outros mineradores para que, de sua lista de pares com a rede, alguns deles também sejam outros mineradores. Nem todos os mineradores fazem isso. Alguns desses mineradores que se conectam diretamente também usam redes de retransmissão opcionais como a rede FIBRE sendo projetada pelo desenvolvedor do Bitcoin Core Matt Corallo, mas mesmo essa rede secundária não é exclusiva para mineradores, qualquer um pode participar, incluindo você ou eu, e ela está lá apenas para ajudar a bloquear a retransmissão pela rede. De qualquer forma, as pessoas tentam argumentar que essa interconectividade de “nós que mineram” (seja usando algo como FIBRE ou não) implica que eles são os únicos que importam, e isso é absurdo:
Neste exemplo, deixei os pares do nó dentro do diagrama. Você já deve ter entendido. Eles rejeitam blocos inválidos. Esse grupo de nós dentro dos círculos verdes definitivamente não é o único conjunto de nós que importa nessa rede.
Traduzido por Luis Schwab
Leia em English