# Sidechain

Sidechain é uma blockchain que valida dados de outras blockchains. Essa tecnologia foi desenvolvida como uma alternativa para promover integração entre blockchains e adicionar funcionalidades, sem a necessidade de se modificar os scripts das blockchains. Desde a introdução do Bitcoin por Satoshi Nakamoto em 2008, diversas cadeias de blocos alternativas, denominadas altchains, foram criadas, cada uma dessas com sua própria tecnologia e sua própria criptomoeda, as Altcoins. A existência de diversas blockchains isoladas gerou uma fragmentação dos mercados e do desenvolvimento. Sidechains surgiram como uma alternativa para solucionar esses problemas, permitindo que ativos possam ser movidos entre as cadeias.
O conceito de sidechains foi sugerido primeiramente num episódio de um podcast sobre Bitcoin. Posteriormente, esse conceito foi formalizado num whitepaper na forma de Pegged Sidechains, por um grupo de desenvolvedores do Blockstream em outubro de 2014.

## Conceito

A ideia de Sidechain foi proposta com o objetivo de solucionar desafios relacionados a escalabilidade do Bitcoin. O Bitcoin possui um objetivo simples: é uma cadeia de blocos suportando a transferência de ativos nativos que podem ser convertidos em outros itens, porém sua popularização implicou em alguns problemas:
* Existe um impasse entre escalabilidade e descentralização relacionado ao tamanho dos blocos conforme mais transações precisam ser processadas pelos mineradores. Similarmente existem impasses com relação a segurança e custo, ligados a ideia de manter em registro todas as transações. Esses impasses não podem ser solucionados a nível de transação (propondo uma solução caso-a-caso), pois o Bitcoin funciona de maneira uniforme para todos os nós.
* Existem impasses ligados a funcionalidades que poderiam ser adicionadas, mas poderiam impactar a a eficiência.
* Existem outros ativos, além das criptomoedas que podem ser transferidos por blockchains, como notas promissórias.
* Há um risco de falha no Bitcoin relacionado ao seu algoritmo, pois diversos componentes criptográficos estão apoiados sobre o mesmo algoritmo, e um erro afetaria todos eles.
* Novas tecnologias desenvolvidas podem trazer novas funcionalidades que não forma pensadas quando o Bitcoin foi desenvolvido, como melhorias de privacidade e resistência a censura.
* O bitcoin possui uma abordagem para alterações em seu algoritmo lenta e cautelosa, com a necessidade de consenso. Isso pode limitar as capacidades de grupos menores de adicionar ferramentas que poderiam lhe ser úteis.
Altchains foram propostas para solucionar esses problemas, porém a criação de blockchains alternativas criam um problema de isolamento e fragmentação. As sidechains propostas pelo Blockstream promovem integração entre essas cadeias alternativas. Dessa maneira é possível enviar ativos de uma cadeia para um endereço específico de forma que esses ativos passam a ficar fora do controle de qualquer usuário e só podem ser desbloqueadas se for provado que não estão sendo utilizadas em outro lugar. Depois que esse processo é concluído, é possível "mover" os ativos para outra cadeia que concorde em atuar como sidechain da cadeia original através de uma mensagem que prova que eles estão imobilizados. Uma vez confirmada a mensagem, a segunda cadeia cria uma quantidade de tokens equivalentes aos ativos enviados. Dessa forma não há ativos criados ou destruídos na cadeia original, eles permanecem imobilizados. Em caso da ligação entre as cadeias ser simétrica, é possível "mover" os ativos de volta para a cadeia principal, efetivamente desbloqueando os ativos imobilizados.
As sidechains propostas pelo Blockstream são denominadas Pegged Sidechains, cujas propriedades desejadas são:
* Ativos que são movidos entre sidechains devem ser capazes de ser recuperados por quem quer que seja o proprietário, e ninguém mais (incluindo proprietários anteriores).
* Ativos devem poder ser movidos sem risco à contraparte, isto é, não deve ser possível que um usuário desonesto impeça essa transferência.
* Transferências devem ser atômicas, i.e. acontecer por completo ou não acontecer. Não deve haver falhas que resultem em perda ou criação fraudulenta de ativos.
* Um bug numa sidechain permitindo a criação ou roubo de ativos naquela cadeia não deve resultar na criação ou roubo de ativos em qualquer outra sidechain, como uma espécie de firewall.
* Reorganização da blockchain deve ser feita de maneira clara, mesmo durante transferências; qualquer disrupção deve ser localizada na sidechain em que ocorre. De forma geral, idealmente as sidechains devem ser totalmente independentes, com usuários fornecendo quaisquer dados de outras cadeias. O validador de uma sidechain só deve ser necessário para localizar outra cadeia se isso é uma regra consensual na própria cadeia.
* Usuários não devem necessitar localizar sidechains as quais não estão utilizando ativamente.

## Informações técnicas
### Concepção lógica

Segundo os desenvolvedores do Blockstream, um dos princípios de sidechains é a propriedade de não ser preciso confiar em terceiros para executar operações corretamente, pois assim é possível minimizar a necessidade de confiança no modelo do Bitcoin. Com isso espera-se evitar utilizar usuários fixos para validar os ativos imobilizados, o que geraria um ponto único de falha. Fato que implicaria que os usuários responsáveis por validar as transações das sidechains jamais pudessem ser comprometidos ou deixassem a rede.
O processo de validação descentralizada das movimentações dos ativos entre as cadeias constitui uma federação, que, no caso do Bitcoin, não possui um script expressivo o suficiente para codificar as regras necessárias. O processo de pegging para o Bitcoin visa encontrar uma forma de expandir as funcionalidades do script padrão sem a necessidade de modificações no protocolo, como um soft-fork.

### Peg de duas vias simétrico

Pegged Sidechain é uma sidechain cujos ativos podem ser importados de outras cadeias e retornados a elas. Esse processo de ida-e-volta de ativos a uma taxa de transferência fixa ou determinística é chamado two-way peg, uma conexão de duas vias. A conexão ou peg simétrico ocorre da seguinte forma: para transferir moedas de uma cadeia para a sidechain, as moedas são enviadas para uma saída na cadeia inicial que só pode ser desbloqueada através de uma prova de trabalho na sidechain. Para sincronizar as duas cadeias é necessário aguardar dois intervalos de espera:
* Durante o intervalo de confirmação as moedas devem ficar bloqueadas na cadeia de origem enquanto o usuário fornece uma prova de trabalho. Esse intervalo funciona para que seja difícil sofrer um ataque DDOS na etapa seguinte. Geralmente esse período é de um dia ou dois, sacrificando velocidade em troca de segurança.
* Durante o intervalo de disputa moedas recém-transferidas não podem ser gastas na sidechain. O propósito desse intervalo é evitar o problema de duplo gasto, de forma que se uma nova prova de trabalho com mais confirmações for publicada na cadeia, então a transação é invalidada retroativamente.
Uma pegged sidechain pode conter ativos de diferentes cadeias, portanto esses diferentes ativos não são intercambiáveis (exceto em casos de troca explícita) de forma a evitar que usuários maliciosos possam trocar ativos de pouco valor por outros. O processo é dito simétrico, pois quando um usuário pretende enviar as moedas de volta para a blockchain original ele deve repetir o mesmo procedimento. Para realizar a transferência de ativos de uma sidechain de volta para a blockchain original, é necessário uma prova de que esses ativos estavam imobilizados. Essas provas contém um registro de que uma saída foi criada na sidechain e uma prova de trabalho sobre essa saída.

### Peg de duas vias assimétrico

Diferentemente da conexão simétrica, pegging assimétrico utiliza protocolos diferentes para as transações em cada sentido. Na conexão assimetrica os usuários da sidechain são validadores da cadeia inicial e as transferências entre a cadeia inicial e a sidechain não necessitam de provas de trabalho, pois todos os validadores conhecem o estado da cadeia inicial. Por outro lado, a transferência de volta para a cadeia de origem utiliza o método de prova de trabalho similar ao método simétrico.
O pegging assimétrico provê maior segurança contra o ataque de 51% ao custo de que os validadores precisam conhecer o estado da cadeia inicial, o que aumenta sua complexidade.

## Desvantagens

De acordo com os desenvolvedores do Blockstream, sidechains geram soluções para vários problemas ligados a criptomoedas e criam oportunidades para inovação. Todavia, existem desvantagens relacionadas ao uso dessa ferramenta, descritas abaixo:
* Complexidade: A adição de sidechains provoca um aumento na complexidade de blockchains em diferentes níveis. A nível de rede, para permitir transferências entre blockchains independentes é preciso haver suporte a scripts de transação e software capazes de detectar comportamentos indesejados e gerar provas para invalidar os scripts. A nível de ativos, devido a presença de ativos diferentes circulando na mesma cadeia (incluindo ativos criados posterior à sidechain), é necessário etiquetar esses ativos para garantir que suas transferências sejam feitas corretamente. Além disso, as carteiras virtuais tem de lidar com múltiplas cadeias e a transferências de ativos entre elas, ou simplesmente omitir essas funcionalidades.
* Transações fraudulentas: Semelhante ao problema de gasto duplo, é possível transferir moedas entre sidechains antes que confirmações suficientes sejam realizadas. O tratamento desse problema pode ser feito de maneira análoga ao Bitcoin, esperando-se por um número maior de confirmações.
* Riscos: Sidechains apresentam riscos de centralização, pois não é possível minerar diretamente na sidechain. Dessa forma, para validar as transações é necessário que os mineradores do Bitcoin modifiquem seus blocos para permitir validar transações em múltiplas cadeias ao mesmo tempo. Isso pode se tornar um problema para mineradores de pequeno porte, portanto aumentando a centralização. Outro risco está relacionado a bifurcação, que no Bitcoin é quando uma adição é feita ao protocolo, validado pela maioria dos usuários. A tecnologia das sidechains é mais vulnerável a esse tipo de modificações do que o Bitcoin e mesmo que as sidechains fossem modificadas para terem a mesma segurança do Bitcoin, isso geraria uma perda do isolamento das bifurcações, o que é indesejado.

## Potenciais Aplicações
### Experimentos com altchains

A primeira aplicação para sidechain é simplesmente criar uma altchain com moedas derivadas do Bitcoin. Ao utilizar uma sidechain que carrega bitcoins, e não uma moeda nova, é possível evitar problemas relacionados a distribuição inicial e vulnerabilidade do mercado, assim como barreiras para adoção de novos usuários.
Tecnicamente, sidechains são cadeias completamente independentes e, por esse motivo, são capazes de modificar características do Bitcoin como a estrutura do bloco ou a corrente de transações. Dessa forma, sidechains podem adicionar ou modificar recursos que o Bitcoin não oferece diretamente. Os desenvolvedores citam algumas alterações:
* Corrigir maleabilidade de transações, que é uma vulnerabilidade que permite a usuários modificar os dados das transações de forma a quebrar transações futuras que dependem dela. Esse tipo de problema só pode ser corrigido parcialmente pelo Bitcoin.
* Aumentar a privacidade do usuário utilizando ferramentas como o protocolo de assinaturas em anel de Monero. Esse modelo reduz o risco de transações serem censuradas, protegendo a fungibilidade da moeda. Através de sidechains, recursos poderosos, como o protocolo de Monero podem ser integrados ao Bitcoin, eliminando o isolamento das cadeias.
* Extensão para scripts, como Colored Coins, para o Bitcoin já foram propostas, porém como a base de usuários interessados era pequena, não houve adoção. Sidechains poderiam adicionar esse recurso sem impactar os usuários não interessados.

### Ativos emitidos

Sidechains podem ser modeladas sem moedas nativas. Nesse tipo de implementação todas as moedas estão inicialmente paralisadas, até que sejam ativadas por uma transação de outra sidechain. Alternativamente,sidechains podem também produzir seus próprios símbolos (ou ativos emitidos). Esses simbolos podem ser transferidos para outras sidechains e trocados por outros ativos e moedas, sem necessitar de uma autoridade central. Correntes de ativos emitidos possuem várias aplicações, incluindo instrumentos de financiamento tradicional como ações, obrigações, vouchers e notas promissórias. Isso permite a protocolos externos delegar propriedade e rastreamento de transferências a sidechain na qual as ações de proprietário foram emitidas. Essa tecnologia permite a criação de transações úteis, capazes de, entre outros benefícios, ajudar a reduzir a volatilidade do próprio Bitcoin.