Olá a todos, primeiramente parabéns pela iniciativa do fórum.
Tenho algumas dúvidas que parecem ser simples, afinal retratam aspectos estruturais da tecnologia, porém estou a alguns dias em torno dessas questões sem solução
Imagine que eu queira “ler” um valor contido na Blockchain (saldo, por exemplo), porém sou um nodo a parte da rede, somente a consumo como um banco de dados distribuído.
Pelo que entendi ao consultar um valor da Blockchain primeiramente preciso descobrir qual é a versão válida, isto é, qual o fork que necessita de uma capacidade computacional maior para ser construído (nMinimumChainWork).
A primeira questão é como isso é feito, entendo que se trata de uma rede P2P e que eu devo consultar a rede em broadcast e que a cada nova resposta que recebo verifico se a Blockchain que recebi é maior do que a que eu já possuo, porém em que momento posso dar esse processo como “acabado” de tal forma que eu possa confiar na Blockchain recebida e “consumir” a informação de interesse ?
Como eu garanto a integridade da Blockchain que eu recebi, imaginemos que a Blockchain verdadeira possua 275 blocos, mas meu interesse está na informação do bloco 5.
Qual a garantia que tenho sobre a informação que leio do bloco 5 ser válida, isto é, imagine que o atacante ao adulterar o bloco 5 tenha recalculado a Hash desse bloco e dos próximos 10, isto é, a “chain” foi quebrada do bloco 15 para o 16. Caso eu proceda com a validação “A HASH do bloco 5 deve estar contida no bloco 6 …” a validação de integridade será realizada com sucesso.
Eu devo conferir a integridade de toda a Blockchain ? E se esta tiver 1 trilhão de blocos ?
Obrigado pela resposta Cecilio. Eu havia verificado esta resposta, mas creio que sejam questões distintas.
A minha dúvida se refere a necessidade de verificação de consistência de TODOS OS BLOCOS da Blockchain para garantia de integridade da cadeia. Abaixo contribuo os avanços que tive nesse assunto, através da leitura do livro:
Mastering Bitcoin: Unlocking Digital Cryptocurrencies
Basicamente não existe mágica, isto é, os nodos full de fato efetuam uma validação completa de toda a cadeia de blocos durante a etapa de aquisição da Blockchain o que pode levar até dois dias o.o
Após pareado a validação se dá somente sobre novos blocos. O problema é que esse nodo “confia” em outros nodos com relação aos dados recebidos, mas nada garante que a Blockchain recebida é a VERDADEIRA.
A proteção reside no fato de que o nodo recem criado não conseguirá propor para a rede uma transação que não esteja vinculada a uma Blockchain verdadeira, os outros nodos irão rejeitá-la. A única forma dele comprometer a rede é criar uma Blockchain consistente que seja maior que a blockchain verdaderia. Mas isso é inviável em função do POW. Até aí BLZ, tudo perfeito.
A minha dúvida atual é a seguinte o POW funciona pois existem transações ocorrendo a todo momento, isto é, os nodos da Blockchain verdadeira sempre tem blocos para minerar o que impede de o atacante criar uma quantidade maior de blocos em offline (ele compete contra a capacidade computacional de toda a rede). Mas e se a rede estiver ociosa por mais de uma hora (6 blocos de 10 min cada), ou seja, se não houverem blocos para serem minerados o que impede do atacante minerar sua própria Blockchain em offline ?
Eu tenho esse livro do Antonopoulos em PDF traduzido para português, tem muita coisa lá para quem é do ramo, mas confesso que não li porque não sou do ramo, mas dei uma olhada agora e não encontrei muita coisa pesquisando pela palavra “nodes”. Caso você ainda não tenha visto, existe um material com pouco mais de 100 páginas que você encontra fácil no google com o título “bitcoin para programadores” e apesar de ter sido escrito em 2018 aborda vários aspectos mais técnicos sobre redes P2P e Blockchain. Talvez ajude, caso ainda não tenha visto este material.
Segue um link onde é possível baixar em pdf: https://itsrio.org/wp-content/uploads/2018/06/bitcoin-para-programadores.pdf
Nada impede um atacante de minerar uma corrente offline. Isso é que se chama de selfish mining ou shadow mining. É geralmente o que se faz em ataques de 51%. O atacante minera uma corrente paralela offline e manda uma transação na corrente principal (para uma exchange por exemplo). Uma vez que sua transação seja creditada na exchange e ele tenha sacado o dinheiro com outra moeda, ele divulga sua corrente paralela que não inclui aquela transação propositalmente. Como esta corrente é maior, a anterior é descartada e o deposito original some da rede.
O fato é que para decidir fazer um ataque deste tipo o atacante tem que ter certeza que probabilisticamente tem chance de fazer sua corrente offline maior que a original em algum momento, senão ele só gastou energia em troca de nada. Por isso é importante que a mineração seja descentralizada. Quanto maior for esta competição por acertar o bloco, menor a chance de alguém arriscar um ataque, pois ele se torna financeiramente inviável.
Sempre existem blocos para serem minerados. O processo de mineração independe de existirem transações. Um minerador pode decidir criar um bloco vazio para somente ganhar a recompensa do bloco. No bitcoin é incomum pois sempre tem transações esperando no mempool, mas em outras redes que tem menos uso é bem comum.
Excelente material Cecílio, este eu ainda não havia verificado. Muito obrigado pela referência.
Obrigado pelo esclarecimento Tiago, realmente as defesas contra selfish mining e shadow mining eu havia entendido tranquilamente. Mas o fato de que a movimentação da rede é uma constante, isto é, sempre existem blocos para serem minerados eu não estava conseguindo garantir. Porém como muito bem comentaste, o próprio nodo pode minar um bloco vazio visando o incentivo monetário e a meu ver isso resolve o problema.
Enfim, só a título de curiosidade mesmo, se por ventura a rede se mantivesse ociosa, estaríamos sujeitos a fraude certo ? Considerando uma rede sem incentivos evidentemente.
Exatamente. Ela ficaria sujeita a fraude em caso de uma parada total e se somente um minerador centralizasse a mineração. A rede é segura enquanto o hash rate for alto. Se tem hash rate, é sinal que tem mineração e que ainda existem incentivos para mantê-la ativa.