# Elements Project

O Elements Project é um projeto de código aberto que permite que os desenvolvedores criem e testem sidechains com o objetivo estender a funcionalidade do Bitcoin e explorar novas aplicações da Blockchain. Sua principal característica é o uso de pequenas partes chamadas elements para criar cadeias com mais funcionalidades. O projeto foi anunciado em junho de 2015 pela empresa Blockstream.
O projeto já é usado por alguns grupos e empresas para a criação de sidechains, como Liquid, Rootstock e Gem. A empresa japonesa Digital Garage também pretende usá-lo para criar uma plataforma e soluções usando blockchain para o público japonês.

## Criação e Desenvolvimento
### Sidechains

O conceito de sidechains foi proposto em outubro de 2014, através de um white paper, como uma solução para vários problemas da rede do Bitcoin. As sidechains permitiriam a criação de ecossistemas de cadeias com múltiplos blocos em que bens podem ser trocados e transferidos. Os autores do artigo incluem uma ampla equipe de pesquisadores e desenvolvedores de moeda digital, incluindo Adam Back, Pieter Wuille, Matt Corallo, Luke Dashjr, Mark Friedenbach, Andrew Poelstra, Jorge Timón, Andrew Miller e Gregory Maxwell. Vários membros da equipe são co-fundadores da empresa Blockstream, que forneceu suporte para o projeto.

### Sidechain Elements

A primeira proposta incluía a Sidechain Elements, cuja sidechain funcionava com um modelo de segurança federado. Embora ainda fosse baseada em consenso e peer-to-peer, a segurança para o blockchain seria fornecida por um conjunto de funcionários predefinidos em um arranjo chamado Federated Peg (Fed-Peg). Uma série de grupos acadêmicos e contribuidores individuais, incluindo grupos de blockchain em Stanford, MIT e Princeton, concordaram em administrar a Sidechain Elements Fed-Peg. Sidechain Elements incluía código funcionando e um ambiente de testes para trabalhar com sidechains com vários componentes: o software de rede base para construir uma sidechain de teste inicial, oito novas funcionalidades que não existiam na rede do Bitcoin. A primeira proposta da sidechain também não incluia mineração ou prova de trabalho e estava apenas em fase de teste.
Desde o lançamento, o projeto já tinha bastante expectativas de resolver vários problemas e expandir a rede do Bitcoin, melhorias como:
* Melhor Sistema de processamento de transações (SPT): Ajuda a resolver o problema de escalabilidade da rede do Bitcoin.
* Maior divisibilidade: Divisão em partes menores que unidades de satoshi.
* Funcionalidades extras de privacidade: Poder fazer transações de forma anônima.
* Tempo de confirmação mais curtos: A sidechain poderia ter um tempo menor de confirmação de transações.
* Alívio no tamanho da blockchain: Uma única transação na blockchain do bitcoin poderia representar várias nas sidechains.
* Instrumento bancários legados: Bancos poderiam ter controle de uma moeda digital própria com a criação de sua sidechain.

### O novo Elements Project

Motivados pela palestra Scaling Bitcoins (Escalando Bitcoins) em Hong Kong, foi anunciado o lançamento do novo Elements Project. O projeto conta com a comunidade para criar e testar novas extensões no protocolo o Bitcoin. Os principais desenvolvedores anunciaram vários novos elementos e funcionalidades para a nova versão, como Transações Confidenciais por Gregory Maxwell e Testemunha Segregada por Pieter Wuille, que passaram por extensos testes em cadeias laterais existentes. Junto com esta nova versão também foi criada uma nova iniciativa comunitária, a Sidechain Developer Community, com o objetivo de reunir mais desenvolvedores e engajar e unificar a comunidade.

## Elements

Elements são componentes reutilizáveis que estendem o código base do Bitcoin. Eles transformam os recursos da Bitcoin em soluções específicas de domínio. A ideia é que os elements são como blocos de construção para criar sidechains e sidechains são apenas um conjundo de elements. Cada domínio pode então utilizar apenas as partes apropriadas para suas sidechains e são isolados uns dos outros. Todos os componentes estão disponíveis no Elements Core, o repositório com a implementação dos elements.

### The Periodic Table of Elements

Em analogia com os elementos químicos, o conjunto de elements é chamado de The Periodic Table of Elements (A Tabela Periódica dos Elementos) e contém nove elementos:
* Asset Issuance (Ai)
Os usuários podem emitir seus próprios recursos ou moedas através de tokens que representam a propriedade de algum tipo de ativo. Esses tokens podem teoricamente representar qualquer recurso, incluindo cupons, moedas, depósitos, títulos, ações, etc. Esse element pode ser considerado uma tentativa de adicionar suporte à recursos estilo moedas coloridas (colored coins) ao protocolo principal e foi um dos últimos a ser adicionado a tabela.
* Confidential Transactions (Ct)
Uma das funcionalidades mais poderosas e usadas dos Elements. É uma aplicação de criptografia para esconder os valores das transações enquanto ainda permite que elas possam ser validadas pela rede. Esse método vai um passo além do que o Bitcoin faz, que usa identidades pseudonimas mas públicas.
* Segregated Witness (Sw)
Com a Segregated Witness ou Testemunha Segregada, a especificação dos efeitos de uma transação no ledger é separada dos dados necessários para provar sua validade (chamada criptografia de testemunha). Isso elimina completamente todas as formas conhecidas de maleabilidade de transações e permite grandes otimizações em tecnicas de poda da blockchain.
* Relative Time Lock (Rtl)
Com o Tempo de Bloqueio Relativo, a semântica aplicada por consenso do campo do número de sequência é modificada, fazendo com que uma entrada de transação assinada permaneça inválida por um período de tempo definido após a confirmação de sua saída correspondente. Assim é capaz de suportar recursos de substituição de transações por consenso.
* Schnorr Signatures (Ss)
Uma nova maneira de construir assinaturas para transações, melhorando a eficiência de validar uma transação e oferecendo novos modos de assinatura múltipla.
* New Opcodes (Op)
As transações no Bitcoin são apenas um programa escrito em uma linguagem de script. Esses opcodes expandem as possibilidades desse idioma, tornando possíveis novas formas de transações, como loterias, pagamentos a um conjunto escolhido aleatoriamente de destinatários, etc.
* Signature Covers Value (Scv)
Permite que a assinatura em uma transação seja invalidada se as entradas foram consumidas, tornando mais rápido e mais fácil a validação de uma transação, simplesmente verificando a assinatura
* Deterministic Pegs (Dp)
Deterministic Pegs permitem que transações cruzadas sejam construídas de forma descentralizada. Tokens então podem ser movidos de uma blockchain para outra sem problemas. Deterministic pegs são o que permitem que o Elements Alpha retire moedas da testnet sem qualquer modificação na tesnet em si.
* Signed Blocks (Sb)
Os blocos podem ser criptograficamente assinados, permitindo que o criador do bloco verifique sua identidade no futuro.

### Propostas de novos elements

Qualquer pessoa que quer criar novos elements ou funcionalidades pode propor e documentar suas ideias para a lista de emails das sidechains. Se for aceita então ele pode ser incluído na tabela periódica dos elementos e qualquer pessoa pode usar em suas sidechains. Lista de elements propostos:
* Bitmask Sighash Modes (Bsm)
Permite o uso de máscaras arbitrárias de bits de entradas e saídas de transações que podem ser reescritas por mineradores.

## Aplicações
### Elements Alpha

De modo a tornar mais fácil para a comunidade testar os elements mais recentes, eles são implementados em uma sidechain pública chamada Elements Alpha que está vinculada a testnet3 do Bitcoin. Todo o projeto é de código aberto, como o Bitcoin, e desenvolvedores são encorajados a contribuir para melhorar e adicionar elementos. Elements Alpha tem o objetivo ser um ambiente de demonstração e teste de tecnologia, mas as mesmas ferramentas e práticas usadas nela serão integradas às redes de produção.
O Elements Alpha é atualmente baseado em torno de um grupo de servidores centralizados. Nas versões futuras, o plano é atualizar o protocolo para que seja executado de forma descentralizada. Quando os usuários entrarem em um contrato, eles estão enviando bitcoins da testnet para um endereço de multi-assinatura envolvendo os servidores. Esses servidores também duplicam como a rede de mineração para a blockchain, e são os únicos nós que podem minerá-lo. Tudo isso é feito com contratos inteligentes, tornando impossível para os humanos interferirem no armazenamento ou criação de bitcoins.

### Liquid

Liquid é uma sidechain comercial e primeira a ser lançada em estado de produção. Ela combina Confidential Transactions e vários outros Elements para prover transações de alta velocidade entre trocas de Bitcoins. Pela implementação do modelo de Fortes Federações, Liquid tenta melhorar a privacidade, custo e velocidade de transferências e acordos entre empresas. Prover privacidade comercial é um dos fatores mais importantes para as empresas e faz com que Liquid tenha uma vantagem sobre o modelo aberto da blockchain do Bitcoin.

### Outras sidechains

Além da Elements Alpha, outras sidechains foram criadas com o projeto, como Gem Heath e Rootstock. Gem é uma rede de blockchain para a comunidade global de empresas e indivíduos que participam de cuidado contínuo. A tecnologia de blockchain aborda o trade-off entre cuidado personalizado e custos operacionais, conectando o ecossistema a infra-estrutura universal. Rootstock é uma plataforma de contrato inteligente de código aberto que estende o Bitcoin. A capacidade de contratos inteligentes de rootstock permite inúmeras aplicações, como canais de micropagamento, serviços de garantia, crowdfunding, remessas descentralizadas, proteção de IP, registro de bens, sistemas de votação, microcrédito, rastreabilidade, entre outros.

## Elements e o Segwit

Segregated Witness ou Segwit foi originalmente implementado por Pieter Wuille e vários outros desenvolvedores da Blockstream na sidechain alpha do Elements Project entre abril e junho de 2015. Era uma versão feita do zero e que não tinha o intuito de ser compatível com software anterior do bitcoin, apenas com as sidechains que usassem os novos elements. Essa versão era usada por todas as sidechains baseadas em elements. No final de outubro de 2015, Luke Dashjr descreveu um método que permitiria que segwit fosse implementado como um soft fork e Wuille usou a sua experiência com a versão do Elements para criar uma versão compatível com os programas do Bitcoin. O código tornou-se operacional em dezembro de 2015 em uma rede de teste chamada segnet. Segnet passou por várias iterações onde sofreu muitas melhorias.
Em abril de 2016, Wuille submeteu um pull request para o repositório do Bitcoin Core e então começou a interagir com todos os outros programas que são testados regularmente na testnet e até mesmo programas que ainda não haviam sido atualizados para a segwit. 20 desenvolvedores do Bitcoin Core se encontraram na Suíça e fizeram uma revisão em pessoa para garantir que os testes eram adequados e abrangentes. Em junho, após dois meses a revisão e testes do código, um novo pull request foi criado com todas as melhorias propostas a implementação. A versão 0.13.1 do Bitcoin Core foi lançada em setembro com Segwit e sidechains baseadas em elements começaram a usar a versão do Bitcoin Core.

## Ver Também

* Bitcoin
* Blockchain
* Sidechain
* Lightning Network