---
title: "Ethereum sharding: uma introdução ao sharding de blockchain"
description: "O que é Sharding de Blockchain e Qual a Relação com Ethereum?"
---

## **O que é sharding em blockchain?**

O Ethereum Sharding foi substituído pelo [danksharding — que oferece suporte ao escalonamento em layer 2, em vez de escalar diretamente a mainnet](https://etherscan.io/chartsync/chainarchive).

**Aviso**: O artigo a seguir apresenta uma visão geral dos planos abandonados de fazer sharding na mainnet do Ethereum. Alguns dados podem estar desatualizados. Consulte o artigo sobre danksharding vinculado acima para obter as informações mais atualizadas sobre o roadmap de escalabilidade do Ethereum.

Por anos, a questão da escalabilidade de blockchain tem sido debatida nas comunidades de desenvolvedores. Redes de blockchain públicas, como o Ethereum, exigem que vários nós validem transações, o que limita sua capacidade de escalar.

O Ethereum, por exemplo, consegue processar cerca de 10-13 transações por segundo. Isso é insignificante comparado a sistemas centralizados como a VISA, capaz de processar até 24.000 TPS.

Para que blockchains — e as aplicações descentralizadas que rodam sobre elas — alcancem adoção em massa, é necessária escalabilidade em nível populacional.

Além das blockchains de layer 2, o sharding é uma solução proposta para escalar o Ethereum e suportar mais usuários. A ideia do sharding é dividir a blockchain principal em segmentos separados, de forma que os nós precisem verificar apenas um subconjunto das transações.

Com os nós validando transações em paralelo, o throughput da rede pode aumentar, e os [apps](https://www.alchemy.com/dapps/top/defi-dapps) podem escalar para atender às necessidades de um número crescente de usuários.

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Payment System / Cryptocurrency", dataType: "object" },
      { key: "2", width: 200, title: "Transactions per Second", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Visa</p>", tooltip: "", icon: "" },
        "2": { title: "<p>24,000</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Ripple</p>", tooltip: "", icon: "" },
        "2": { title: "<p>1,500</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>PayPal</p>", tooltip: "", icon: "" },
        "2": { title: "<p>193</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Bitcoin Cash</p>", tooltip: "", icon: "" },
        "2": { title: "<p>60</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>Litecoin</p>", tooltip: "", icon: "" },
        "2": { title: "<p>56</p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>Dash</p>", tooltip: "", icon: "" },
        "2": { title: "<p>48</p>", tooltip: "", icon: "" },
        id: 5,
      },
      {
        "1": { title: "<p>Ethereum</p>", tooltip: "", icon: "" },
        "2": { title: "<p>20</p>", tooltip: "", icon: "" },
        id: 6,
      },
      {
        "1": { title: "<p>Bitcoin</p>", tooltip: "", icon: "" },
        "2": { title: "<p>7</p>", tooltip: "", icon: "" },
        id: 7,
      },
    ],
  }}
/>

## **O que é sharding em bancos de dados?**

Uma técnica comum em gerenciamento de bancos de dados centralizados, o sharding de banco de dados é o processo de dividir um banco de dados grande em partes menores \("shards"\) para melhorar a eficiência e a escalabilidade de aplicações, distribuindo um banco de dados por várias máquinas em paralelo.

À medida que o número de usuários ou operações executadas em um software aumenta, também aumentam os dados armazenados no banco de dados desse software. Um banco de dados sobrecarregado afeta o desempenho do app e prejudica a experiência do usuário. Por isso, o sharding é necessário para aliviar bancos de dados e melhorar os tempos de carregamento.

### **Exemplo de sharding em banco de dados**

Imagine um banco de dados que contém registros pessoais de 100.000 habitantes de uma cidade.

Encontrar informações sobre um indivíduo exigiria computar cerca de 100.000 transações — uma tarefa custosa e demorada.

Mas o que acontece se dividirmos esse grande banco de dados em bancos de dados menores?

Por exemplo, ao agrupar todos os habitantes da cidade com sobrenomes que começam com letras específicas em um servidor exclusivo, encontrar informações exige menos recursos computacionais, as tarefas levam menos tempo para serem concluídas e o banco de dados fica mais fácil de gerenciar.

Aqui está uma ilustração com outro exemplo de sharding de banco de dados:

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Product", dataType: "object" },
      { key: "2", width: 200, title: "Price", dataType: "object" },
      { key: "3", width: 200, title: "Price Range", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>WIDGET</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$118</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$100+</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>GIZMO</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$88</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$50-$99.99</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>TRINKET</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$37</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$0-$49.99</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>THINGAMAJIG</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$18</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$0-$49.99</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>DOODAD</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$60</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$50-$99.99</p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>TCHOTCHKE</p>", tooltip: "", icon: "" },
        "2": { title: "<p>$999</p>", tooltip: "", icon: "" },
        "3": { title: "<p>$100+</p>", tooltip: "", icon: "" },
        id: 5,
      },
    ],
  }}
/>

### O que é um shard?

"Shard" significa "uma pequena parte do todo." No gerenciamento de bancos de dados, um shard é um subconjunto de um banco de dados grande hospedado em um servidor separado. Embora cada shard contenha partes dos dados, todos juntos formam um único conjunto de dados lógico.

Usando nosso exemplo anterior, poderíamos ter um shard, "Shard 1," para habitantes da cidade com sobrenomes que começam com 'A', "Shard 2," para os que começam com 'B', e assim por diante.

Se você combinar esses shards lógicos, obtém um único conjunto de dados com os registros de todos os habitantes da cidade.

## **Sharding em redes blockchain**

O sharding em redes blockchain segue o mesmo processo que em bancos de dados centralizados: uma rede blockchain pode ser "shardada" ou dividida em segmentos distintos, em que cada shard armazena uma parte dos dados da blockchain e processa um conjunto único de transações.

Com o sharding, redes blockchain podem melhorar a latência e a escalabilidade da rede.

### **Que problema o sharding em redes blockchain busca resolver?**

Como todos os nós precisam chegar a um consenso \(ou seja, concordar\) sobre a validade das transações, redes blockchain só conseguem processar um pequeno número de transações ao mesmo tempo.

Normalmente, cada nó armazena todo o histórico da blockchain e processa cada transação. É isso que torna redes blockchain como o Ethereum e o Bitcoin "descentralizadas."

Com cada full node mantendo uma cópia do histórico completo da rede, fica mais difícil para agentes maliciosos sequestrar a rede e potencialmente reverter ou reescrever transações.

Porém, garantir a descentralização e a segurança da blockchain tem um custo em escalabilidade.

Blockchains shardadas permitem que os nós dispensem o download do histórico completo da blockchain ou a validação de todas as transações que passam pela rede, o que aumenta a eficiência da rede e permite que blockchains escalem para suportar maior demanda de usuários.

<ImageBlock
  src="https://media.alchemy.com/1703255000-ethereum-sharding-diagram.jpeg"
  alt="diagrama de sharding do Ethereum"
  width={792}
  height={379}
  caption="Fonte: Genesis Block"
/>

### **O que é uma shard chain?**

No contexto de redes blockchain, uma shard chain conteria uma parte dos dados e lidaria com uma parte das responsabilidades de processamento de transações.

Shard chains são como uma coleção de mini-blockchains que operam de forma independente e, para preservar a segurança, cada shard chain envia um registro de transações à chain principal \(Beacon Chain\) em intervalos regulares por meio do Validator Manager Contract \(VMC\).

Como cada shard chain terá um histórico de transações único e um conjunto de nós para validar novas transações, várias shard chains podem rodar simultaneamente para reforçar a latência e o throughput da rede por meio de processamento paralelo.

<ImageBlock
  src="https://media.alchemy.com/1703771502-shard-chains.jpeg"
  alt="Diagrama de shard chains enviando registros de transações para a Beacon Chain do Ethereum"
  width={1542}
  height={687}
  caption="Cadeias shard"
/>

## **O que é sharding no Ethereum?**

O Ethereum planeja adotar o sharding como solução de escalabilidade após seus[ upgrades para Ethereum PoS](https://www.alchemy.com/overviews/ethereum-2-0-your-guide-for-2022), uma série de upgrades projetados para melhorar a funcionalidade do Ethereum 1.0.

### **Por que o sharding é necessário?**

Há dois problemas principais que tornam o sharding necessário no Ethereum: a capacidade de suportar um aumento exponencial de usuários e a necessidade de permanecer descentralizado em escala.

#### **1. Suportar um número crescente de usuários**

A estrutura atual do Ethereum o torna incapaz de lidar com aumentos exponenciais de uso.

Atualmente, todos os nós do Ethereum armazenam o estado completo da[ Ethereum Virtual Machine \(EVM\)](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm), incluindo código de smart contracts e saldos de contas.

Além disso, as transações são executadas de forma linear e exigem confirmação de toda a rede.

Transacionar de forma linear e exigir que os nós gerenciem grandes conjuntos de dados torna a rede mais lenta.

#### **2. Manter a descentralização em escala**

Exigir que os nós mantenham uma cópia completa da blockchain também gera problemas de centralização. Atualmente, o ledger do Ethereum [ocupa mais de 10 terabytes de espaço de armazenamento](https://etherscan.io/chartsync/chainarchive), 10 vezes mais do que um computador comum consegue armazenar.

À medida que a blockchain do Ethereum continua crescendo, rodar um nó Ethereum pode se tornar difícil, deixando apenas alguns nós responsáveis por proteger a rede. Isso reintroduz os problemas de centralização e ponto único de falha que o Ethereum foi projetado para resolver, reduzindo seu valor.

#### **O sharding pode resolver os dois problemas.**

O sharding promove melhor escalabilidade, já que os nós podem validar transações diferentes simultaneamente, e dividir os dados transacionais em partes menores facilita rodar um full node, o que diminui o risco de centralização.

## **Terminologia do sharding no Ethereum**

Antes de explicar como o sharding funciona, seguem algumas definições importantes:

#### **State**

State refere-se às informações sobre um sistema em um determinado momento. No Ethereum, o state é uma descrição da rede em um momento específico — código de contrato, contas, saldos de endereços, etc. Cada nova transação altera o state do Ethereum.

#### **Merkle tree**

Uma Merkle tree ou root é um mecanismo criptográfico que armazena grandes quantidades de informação por meio de hashes. Merkle trees/roots são essenciais para a segurança do Ethereum, pois permitem que os nós verifiquem rapidamente se um dado faz parte da estrutura maior.

#### **Collation**

Uma collation é um grupo de transações realizadas em uma shard chain, semelhante a um block em proof-of-work \(PoW\). Collations são enviadas à chain principal e encadeadas para formar a blockchain.

#### **Collation header**

O collation header é semelhante a um block header no consenso proof-of-work. Um collation header contém metadados sobre as informações dentro da collation, como:

- O único shard ao qual a collation pertence
- O hash raiz da collation pai
- A Merkle root de todas as transações em uma collation
- O pre-state root e o post-state root
- Assinaturas dos notaries

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Property", dataType: "object" },
      { key: "2", width: 200, title: "Value", dataType: "object" },
      { key: "3", width: 200, title: "Signature 1", dataType: "object" },
      { key: "4", width: 200, title: "Signature 2", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p><strong>Shard ID:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>43</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #1284&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #2543&gt;</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p><strong>Pre state:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>a138b3ff</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #7821&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #6118&gt;</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p><strong>Post state:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>835680cc</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #9053&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #4337&gt;</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p><strong>Receipt root:</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>fa3819d4</p>", tooltip: "", icon: "" },
        "3": { title: "<p>&lt;sig #1662&gt;</p>", tooltip: "", icon: "" },
        "4": { title: "<p>&lt;sig #4785&gt;</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>Tx a142</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx a558</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx eca6</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>Tx a35f</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx e25a</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx 34ac</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 5,
      },
      {
        "1": { title: "<p>Tx 2308</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx 6987</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx f260</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 6,
      },
      {
        "1": { title: "<p>Tx 9f14</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Tx ec30</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Tx 5fc3</p>", tooltip: "", icon: "" },
        "4": { title: "<p></p>", tooltip: "", icon: "" },
        id: 7,
      },
    ],
  }}
/>

#### **Notaries**

Notaries são validadores designados aleatoriamente a uma shard chain para votar em collations propostas. Esses votos são chamados de "attestations" e comprovam a validade da collation. Cada collation precisa de pelo menos ⅔ dos collators assinando antes de ser adicionada à consensus chain.

#### **Proposers**

Um proposer é um collator \(ou validator\) selecionado para criar uma collation e propô-la para validação. O proposer tem as mesmas funções de um miner em blockchains PoW.

#### **Committees**

Um committee é um conjunto de validators ou notaries que atestam a validade de shard blocks. Esses committees são embaralhados aleatoriamente em intervalos, de modo que os validators não conseguem prever em qual(is) committee(s) estarão.

## **Como funciona o sharding no Ethereum?**

Diante de atrasos contínuos no roadmap, a comunidade Ethereum abandonou os planos de sharding em favor de um roadmap centrado em layer 2. Isso permitiu que os core developers lançassem o upgrade de consenso conhecido como The Merge, que mudou o consenso da rede para Proof-of-Stake.

O upgrade de sharding do Ethereum planejava dividir a blockchain do Ethereum em 64 shard chains. Cada shard chain teria um state independente, o que significa que os nós armazenariam um subconjunto de saldos de contas, código de smart contracts, e processariam uma parte do total de transações.

#### **Como o sharding do Ethereum PoS poderia ter funcionado na prática?**

Imagine que o Ethereum tenha 10.000 validators e 100 shard chains.

Por meio de um protocolo pseudoaleatório, validators elegíveis, que depositaram ETH no Validator Manager Contract \(VMC\), são designados aos shards 1-100.

No Shard 1, um validator \(proposer\) é selecionado para agrupar novas transações em uma collation.

Outros validators \(notaries\) baixam a collation e verificam a validade das transações.

Se dois terços dos notaries atestarem a collation, ela é enviada à chain principal via VMC.

É importante observar que a collation inteira não é adicionada à Beacon Chain — seria difícil e demorado verificar collations de todos os shards.

Em vez disso, os[ validator nodes](https://www.alchemy.com/docs) na chain principal simplesmente verificam as attestations \(assinaturas\) de cada collation para determinar sua validade.

<ImageBlock
  src="https://media.alchemy.com/1703771811-how-ethereum-pos-sharding-works.png"
  alt="Diagrama do sharding PoS do Ethereum: validadores atestam collations de shard enviadas à cadeia principal"
  width={860}
  height={683}
  caption="Como funciona o sharding PoS do Ethereum"
/>

Graças aos collation headers, qualquer pessoa pode verificar a atividade em cada shard.

Collation headers funcionam como "cross-links" e descrições do state e das transações em diferentes shards. Assim, a comunicação cross-shard torna possível ter uma visão de alto nível da rede Ethereum sem fazer parte de todos os shards.

## **Possíveis desvantagens do sharding**

Embora o sharding do Ethereum prometesse muitos benefícios, ele introduziu um novo conjunto de problemas:

- Com menos nós rodando cada shard, atividades maliciosas, como ataques de 51%, se tornam mais fáceis.
- Com código mais complexo, aumenta o risco de[ vulnerabilidades de segurança em smart contracts](https://alchemy.com/overviews/smart-contract-security-best-practices).
- Membros de committees podem conspirar para enviar transações maliciosas à chain principal.

<ImageBlock
  src="https://media.alchemy.com/1703771962-smart-contract-vulnerabilities-via-sharding.jpeg"
  alt="Vulnerabilidades de segurança em smart contracts via sharding"
  width={741}
  height={343}
  caption="Vulnerabilidades de segurança em smart contracts via sharding"
/>

## **Sharding no Ethereum: cronograma e implementação em fases**

Discussões sobre sharding vêm ocorrendo na comunidade Ethereum desde pelo menos 2013, mas os desenvolvedores adiaram sua implementação — por um bom motivo. O sharding é altamente complexo e introduz novos riscos, portanto é necessário um teste rigoroso para resolver quaisquer problemas.

Segundo o Ethereum.org, o sharding será implementado no Ethereum após a conclusão de "The Merge". Para contextualizar, o Merge refere-se ao evento em que a mainnet PoW do Ethereum se integra à Beacon Chain \(PoS\).

[A Beacon](https://www.alchemy.com/dapps/the-beacon) Chain é uma implementação do sistema proof-of-stake Casper e produz a aleatoriedade necessária para criar um sistema de sharding funcional. Essa chain entrou em operação em 1º de dezembro de 2020.

Na próxima seção, apresentamos uma breve visão geral da implementação do sharding no Ethereum:

## **\[Abandonado\] Sharding no Ethereum: cronograma e implementação em fases**

Discussões sobre sharding vêm ocorrendo na comunidade Ethereum desde 2013, mas os desenvolvedores do Ethereum adiaram sua implementação porque é altamente complexo e introduz novos riscos, o que exige testes rigorosos para um lançamento bem-sucedido.

Aqui está uma breve visão geral do cronograma de sharding do Ethereum:

### **Qual é o cronograma de sharding do ETH 2.0?**

Segundo o Ethereum.org, o sharding será implementado no Ethereum depois que "The Merge" — ou seja, a integração da mainnet PoW do Ethereum com a Beacon Chain — tiver ocorrido.

#### **Fase 1 do sharding**

É provável que essa fase comece por volta de 2023, segundo o [cronograma de upgrades planejado do Ethereum](https://ethereum.org/en/upgrades/shard-chains/). No entanto, ainda não há datas específicas definidas para o cronograma de sharding.

Aqui está uma visão geral de como a primeira fase do sharding do Ethereum pode se parecer:

- Validator Manager Contract \(VMC\) hospedado na Beacon Chain, responsável por coordenar o processo de sharding
- Validators do ETH2 em potencial precisam travar 32 ETH no smart contract antes de serem adicionados ao pool de validators elegíveis
- O VMC designa validators a shards em intervalos para validar e processar collations de transações na consensus chain
- Os shards funcionam apenas como "depósitos de dados" para aumentar a capacidade de processamento de dados da rede Ethereum.

#### Fase 2 do sharding

A segunda fase do upgrade de sharding do ETH PoS é menos definida, já que os desenvolvedores ainda debatem alguns aspectos. No entanto, podemos esperar que a fase 2 do sharding do Ethereum se pareça com isto na prática:

- Os shards deixam de ser camadas de dados e passam a ser camadas de execução de código — cada shard tem um "state" independente \(ou seja, um conjunto único de smart contracts, saldos de contas e endereços.\)
- Cada shard funciona como a [Ethereum Mainnet](https://www.alchemy.com/rpc/ethereum), com suporte completo a smart contracts e dApps
- A comunicação cross-shard permite que usuários em diferentes shard chains troquem valor.
- Apps rodando em diferentes shard chains podem "conversar" e interagir entre si usando comunicação cross-shard, melhorando a funcionalidade de escalabilidade do Ethereum.

## **Sharding no Ethereum — considerações finais**

Com várias shard chains rodando simultaneamente, os nós podem aumentar sua capacidade de processamento de transações e processar quantidades maiores de dados on-chain.

Continuando o exemplo anterior, se 100 shard chains processarem 100 transações por segundo, o Ethereum 2.0 conseguiria alcançar 10.000 TPS.

A única informação dos shards publicada na chain de camada base são os collation headers — provas criptográficas de validade — o que facilita a confirmação de transações pelos validator nodes e o commit na consensus layer chain.

O resultado é uma [finality](https://medium.com/@icebearhww/ethereum-sharding-and-finality-65248951f649) de transações mais rápida e maior latência de rede.

Embora as estimativas variem, espera-se que a introdução do sharding escale o Ethereum para lidar com centenas de milhares de transações por segundo.

Com taxas de TPS mais altas, o Ethereum pode oferecer a escalabilidade que os apps precisam para lidar com picos de uso e bilhões de usuários.
