O Problema Maior: O Trilema da Blockchain
Uma blockchain perfeita possui três elementos: Segurança, descentralização e escalabilidade. O trilema da blockchain refere-se ao problema de que, ao construir blockchains, só é possível alcançar dois dos três benefícios mencionados acima. Se tentarmos melhorar o terceiro aspecto, os outros dois são afetados negativamente. Para entender isso com um exemplo, se melhorarmos a segurança de uma blockchain tornando muito difícil para os mineradores minerar os blocos, isso levaria a muito menos transações na blockchain (reduzindo assim a escalabilidade) e também tornaria mais difícil para as pessoas se tornarem mineradoras e juntarem-se à rede devido ao aumento dos recursos necessários para a mineração (reduzindo assim a descentralização). Este problema é crucial, pois uma solução eficaz pode levar a uma maior adoção da tecnologia blockchain em vários setores.
Problema em Questão: Escalabilidade da Blockchain
A escalabilidade refere-se à eficácia com que uma blockchain pode manter seu processamento e saída (por exemplo, segurança da rede, velocidade da transação, taxas de transação, congestionamento da rede etc.) e também evita certos resultados não intencionais (por exemplo, impacto ambiental negativo devido ao processamento intensivo de energia no mecanismo de consenso de Prova de Trabalho (PoW)) à medida que a rede blockchain cresce e se expande.
À medida que uma blockchain escala, recursos escassos podem se tornar muito caros, resultando em apenas pessoas mais ricas sendo capazes de participar, reduzindo assim a descentralização e, por sua vez, reduzindo a segurança da rede, tornando-a mais vulnerável a ataques.
Isso é uma questão importante a ser resolvida porque criptomoedas como Bitcoin e Ethereum atraíram muito interesse nos últimos anos (por exemplo, o número de transações na Ethereum aumentou de apenas 3.000 em outubro de 2015 para mais de um milhão em algum momento em janeiro de 2018), o que aumentará o tempo e os recursos necessários para processar as transações, repelindo assim a adoção em massa desta tecnologia.
O que é Sharding?
Sharding, também conhecido como fragmentação em português, é uma técnica de particionamento de banco de dados usada na tecnologia blockchain com o propósito de melhorar a escalabilidade, pois isso permite processar mais transações por segundo.
Essa técnica funciona no princípio de “Dividir para conquistar”, em que a rede blockchain é dividida em partes menores chamadas de “fragmentos” (shards). Cada fragmento é independente dos outros e só se preocupa em processar os dados relacionados a ele, o que reduz consideravelmente a latência (o tempo necessário para gerar o próximo bloco de transações na cadeia) da rede.
Na perspectiva de bancos de dados, a fragmentação também é referida como particionamento horizontal, onde uma tabela de banco de dados é dividida em várias tabelas menores (chamadas fragmentos), onde cada tabela é um armazenamento de dados separado e contém o mesmo número de colunas, mas um número menor de linhas. Já no particionamento vertical, a tabela é dividida em tabelas menores de forma que cada tabela contém diferentes tipos de dados e todas as tabelas têm o mesmo número de linhas, mas diferente número de colunas.
A Fragmentação como solução para o problema de escalabilidade da blockchain
No sistema blockchain atual, cada nó deve participar no processamento de todas as transações na rede. Enquanto esse sistema garante o aspecto de segurança da blockchain, pois os dados são armazenados em todos os nós, ele faz com que o processamento das transações diminua consideravelmente.
A fragmentação pode ajudar neste caso, pois divide a carga de transações de uma blockchain, de modo que cada nó não precisa processar toda a carga de trabalho da blockchain, mas apenas as transações relacionadas ao respectivo fragmento.
Para entender o ponto acima, vamos considerar uma analogia de tentar ir de uma cidade (digamos cidade A) para outra cidade (digamos cidade B). Em um dia normal, leva-se apenas 10 minutos de carro para viajar entre as duas cidades, tornando eficiente a conexão por uma única estrada. Contudo, devido a grandes desenvolvimentos recentes na cidade B, há um número massivo de pessoas querendo viajar entre as cidades A e B. Com o excesso de congestionamento, a mesma viagem agora leva 1 hora. Uma solução eficiente para este problema é conectar as duas cidades por múltiplas estradas paralelas (modelo de execução paralela) em vez de apenas conectá-las por meio de uma única estrada (modelo de execução linear).
Semelhante à analogia acima, ao implementarmos a fragmentação na blockchain, múltiplos fragmentos podem trabalhar paralelamente uns aos outros para processar transações independentes, melhorando significativamente a velocidade das transações e aliviando o congestionamento da rede à medida que o número de usuários na rede aumenta rapidamente.
Implementações atuais de fragmentação no espaço blockchain
Atualmente, existem várias redes blockchain que estão implementando ou planejando implementar a fragmentação em sua rede (como Ethereum 2.0, NEAR protocol, Polkadot Parachain, etc.). Aqui, para entender a implementação prática da fragmentação em blockchains, analisaremos como a Ethereum 2.0 implementou a mesma.
Na Ethereum 2.0, a rede principal (mainnet) da Ethereum será dividida em 1+63 partes (1 beacon chain principal + 63 cadeias de fragmentos). Subconjuntos de transações serão processados por diferentes fragmentos que trabalharão em paralelo e essas cadeias podem se comunicar entre si para alcançar consenso e, portanto, validar blocos na blockchain. Cada fragmento consistirá em um comitê de 128 validadores que serão escolhidos aleatoriamente (para reduzir o risco de um ataque de 51%) do pool de validadores que depositaram a quantidade necessária de ETH para serem validadores elegíveis, e esses comitês serão responsáveis por validar as transações em sua respectiva cadeia de fragmento. Para que um agrupamento de transações (collation) seja adicionado à cadeia principal, ele deve receber validação de pelo menos dois terços dos validadores notarizados no fragmento. Cada cadeia de fragmento envia um registro de transações para a cadeia principal (beacon chain) em intervalos regulares através do contrato que gerencia os validadores, o Validator Manager Contract (VMC).
Para entender isso melhor, vamos pegar um exemplo. Imagine que a Ethereum tem 6400 validadores e 64 cadeias de fragmentos, como discutido anteriormente. Todos os validadores elegíveis que depositaram ETH no VMC são atribuídos aos fragmentos 1-64.
Em qualquer fragmento dado (digamos fragmento 1), um validador é escolhido para agrupar novas transações em um agrupamento de transações (collation) conduzidas em uma cadeia de fragmentos, semelhante a um bloco em PoW, e esse validador é chamado de proponente. Outros validadores (notarizados) baixam o agrupamento e verificam a validade das transações. Os nós validadores na cadeia principal simplesmente verificam as atestações/assinaturas de cada agrupamento de transações para determinar sua validade. Se pelo menos dois terços dos validadores notarizados atestarem o agrupamento de transações, ele é enviado à cadeia principal via VMC.
Prós e Contras da fragmentação em blockchain
Prós
As vantagens da fragmentação são que ela funciona muito bem em redes que implementam o mecanismo de consenso de Prova de Participação (PoS) e também reduz o processamento e o fardo da memória nos nós, permitindo assim que mais pessoas participem do processo de consenso. Além disso, ao dividir a carga de trabalho e processar transações em paralelo, melhora-se significativamente a escalabilidade de uma rede blockchain.
Contras
As desvantagens da fragmentação são que ela diminui ligeiramente a descentralização ao reduzir o número de validadores para uma determinada transação. Ela também não funciona bem com redes que implementam o mecanismo de consenso de Prova de Trabalho e, embora reduza a carga nos nós individuais, torna a rede mais complexa, o que pode, consequentemente, levar ao surgimento de vulnerabilidades. Também pode tornar a rede mais suscetível a ataques de 51% se não for implementada corretamente (isso ocorre porque o número de validadores é reduzido, portanto, um ator mal-intencionado precisaria controlar um menor número de nós para realizar o ataque).
Soluções alternativas para o problema de escalabilidade
A solução alternativa mais difundida à fragmentação para resolver o problema de escalabilidade é a blockchain de camada 2 (layer 2, ou L2). Uma L2 é uma solução de escalabilidade que se situa acima de uma blockchain de camada 1 (Layer 1, ou L1), como Bitcoin ou Ethereum. Estas também são referidas como soluções de escalabilidade fora da cadeia porque o processo de execução da transação acontece fora da blockchain L1, e essas transações das redes L2 são agrupadas em intervalos regulares e transmitidas de volta à rede base L1, onde são validadas. A principal desvantagem dessa solução de escalabilidade é que ela compromete muito a descentralização e a segurança. Em comparação, a fragmentação é mais complexa e mais difícil de implementar, mas é uma solução mais permanente para os problemas de escalabilidade das blockchains.
Pensamentos Finais
Para concluir, a fragmentação é uma solução muito boa e de longo prazo para os problemas de escalabilidade atualmente presentes no sistema blockchain e também ajuda a abordar a questão central na comunidade blockchain: o trilema da escalabilidade das blockchains, ao encontrar cuidadosamente uma maneira de melhorar a escalabilidade sem comprometer muito os aspectos de segurança e descentralização das redes blockchain. Se implementado corretamente, isso poderia levar a uma enorme melhoria na rede blockchain e promover uma adoção muito maior dessa tecnologia.
Referências
- https://www.web3.university/article/ethereum-sharding-an-introduction-to-blockchain-sharding
- https://www.halborn.com/blog/post/what-is-sharding
- https://101blockchains.com/what-is-blockchain-sharding/
- https://web3-encyclopedia.gitbook.io/web3-encyclopedia/blockchain-fundamentals/sharding
- https://youtu.be/DRWkrqM-ZAw
- https://youtu.be/SZpjvWMfgDA
Artigo original publicado por BlocSoc IITR. Traduzido por Paulinho Giovannini.
Oldest comments (0)