# Protocolo Stellar

Stellar é um protocolo descentralizado e código-aberto que facilita o envio e recebimento de dinheiro em múltiplas moedas. Financiada pela Stripes, um sistema de pagamento online, ele fundado em Junho de 2014 por Jed McCaleb e Joyce Kim. O protocolo Stellar é apoiado por uma organização sem fins lucrativos, a Stellar Development Foundation. A missão da Fundação é expandir o acesso e alfabetização financeira em todo o mundo.

## Lançamento

O Stellar foi lançado em Junho de 2014 por Jed McCaleb e Joyce Kim prometendo ser a ponte que ligaria os mundos monetários virtuais e tradicionais. McCaleb é um dos pioneiros em bitcoins e fundou também o Mt.Gox e Ripple, e com o lançamento do Stellar em junho ele acabava assim com meses de especulações que giravam em torno do projeto. Até o lançamento, o projeto só era conhecido como o “Projeto Secreto de Bitcoin” com um site de mesmo nome(em inglês), o que aumentou ainda mais o mistério.
Assim como bitcoin e Ripple, Stellar opera com um protocolo de código aberto, o que significa que qualquer um pode trabalhar para melhorar o software. Também como bitcoin e Ripple, o projeto tem sua própria moeda digital interna, chamado stellar. Porém há também algumas diferenças. Uma diferença chave é que 95% da moeda foi dada de graça no início, a maior parte dela de uma emissão inicial de 100 bilhões de moedas criadas pela fundação sem fins lucrativos que executa o projeto, a Stella Development Foundation. Novas moedas serão adicionados mais tarde, sem nenhum custo, com uma taxa de 1% ao ano.
A decisão de doar quase todas as moedas foi dada pela experiência de McCaleb com Ripple. Considerando que novos bitcoins são constantemente trazidos à existência por "mineiros"(os miners, em inglês) que os recebem como recompensa para confirmação de transações através da rede, Ripple Labs criou toda a emissão de 100 bilhões de suas próprias moedas, conhecidos como XRP, de uma só vez, mantendo uma grande parte para a empresa e seus fundadores. Isso foi feito para que uma fundação separada, chamada OpenCoin, pudesse coordenar a liberação de XRP ao longo do tempo para gateways designados. Mas isso, inevitavelmente, criou suspeitas entre alguns entusiastas da criptomoeda, alguns dos quais ridicularizaram a tecnologia como uma farsa “pré-minada”.

## Características do Design
### Redes descentralizadas

A rede descentralizada consiste em pares que podem ser executados independentemente uns dos outros. O poder de transmitir a informação é distribuída entre uma rede de servidores, em vez de ser conduzido a partir de uma fonte primária. Isto significa que a rede Stellar não depende de qualquer entidade única. A ideia é ter o maior número possível de servidores independentes para participarem da rede Stellar, de modo que a rede ainda será executada com êxito, mesmo que alguns servidores falhem.

### Livro-razão

Um livro-razão representa o estado do universo em um determinado ponto no tempo. Como um livro-razão tradicional, o livro-razão Stellar registra uma lista de todos as contas, saldos e transações que pertencem a cada conta individual na rede. Uma cópia completa do livro-razão Stellar mundial está hospedado em cada servidor que executa o software Stellar. Qualquer entidade pode executar um servidor Stellar.
Estes servidores formam uma rede Stellar descentralizada, permitindo que o livro-razão possa ser o mais distribuído possível. A cada rodada do Stellar Consensus Protocol, a rede entra em um acordo em qual conjunto de transações será aplicada ao último livro-razão fechado, assim ao aplicar um novo conjunto um novo "último livro-razão fechado" é criado. Cada livro-razão é criptograficamente ligado a um livro anterior único, criando uma cadeia de razão histórica que chega ao livro-razão gênese, que foi o primeiro a ser criado. Esse processo é conhecido como consenso.

### Consenso

Os servidores Stellar se comunicam e sincronizam com os outros para garantir que as transações sejam válidas e aplicadas com sucesso na contabilidade global. Por exemplo, se você quiser enviar 5 dólares para um amigo na rede, uma lista de servidores confiáveis começarão um processo de chegar a um acordo sobre a validade do seu pagamento para o seu amigo. A maioria desses servidores terão que concordar que você de fato tem mesmo crédito no valor de US$ 5 na rede antes que eles marquem a transação como válida.
Todo esse processo de chegar a um consenso sobre a rede estelar ocorre aproximadamente a cada 2-5 segundos.

### Gateway, confiança e créditos

Gateways são simplesmente entidades que as pessoas confiam para manter seus depósitos e emitir créditos na rede Stellar para esses depósitos. Eles agem como uma ponte entre as diferentes moedas e a rede Stellar. Todas as transações de dinheiro na rede Stellar (exceto a moeda digital nativa da Stellar) ocorrem sob a forma de crédito emitidos por gateways. Gateways fazem duas coisas simples:
1 - Eles tomam o seu depósito e emitem o crédito correspondente no endereço de sua carteira digital que está no livro-razão Stellar.
2 - Você pode fazer uma retirada, trazendo os crédito que emitiu. Você tem que confiar nos gateways para honrar seus depósitos e retiradas de crédito que emitiu.
Gateways existem no mundo pré-Stellar também. Por exemplo, para usar Paypal, você deposita o dinheiro em sua conta bancária. Paypal, em seguida, dá-lhe crédito em sua conta Paypal. Agora você pode enviar esse crédito Paypal para alguém que confia no Paypal (qualquer pessoa com uma conta de Paypal). Alguém que recebeu seu crédito Paypal pode convertê-lo em dinheiro real usando Paypal, retirando-o para o banco.
Gateways executam a mesma função no Stellar. A diferença é que todos os "paypals" e outros gateways operam na mesma rede de modo que podem fazer transações uns com os outros agora - isso faz com que o sistema fique bem mais poderoso. As pessoas agora podem facilmente enviar e trocar todos esses créditos de gateway diferentes uns com os outros.

### Câmbio distribuído

A rede Stellar atua como um ambiente descentralizado de câmbios distribuídos de qualquer tipo de recurso que uma pessoa adicionou na rede. Para alcançar esse ambiente de trocas, o livro-razão do Stellar armazena os saldos disponíveis nas contas dos usuários e também as ofertas que os usuários fizeram para comprar ou vender moedas. As ofertas são compromissos públicos para a troca de um tipo de crédito para outro a uma taxa pré-determinada. Assim, o livro-razão torna-se um mercado global para ofertas.
Quando uma conta faz uma oferta, a oferta é verificado em relação ao bloco de pedidos(orderbook) existente para esse par de ativos. Esses blocos de pedidos existem para cada par de ativos e devem ser checados na hora da troca para saber por quanto os ativos estão sendo vendidos ou comprados. Se a oferta encontrar uma oferta existente, ele é preenchida com o preço da oferta existente. Por exemplo, um usuário faz uma oferta para comprar 10 XLM por 2 BTC. Se uma oferta já existe para vender 10 XLM por 2 BTC, a oferta do usuário irá tomar oferta encontrada - o usuário será 2 BTC mais pobre, mas 10 XLM mais rico.
Se a oferta não encontra uma oferta existente, a oferta é guardada no bloco de pedidos até que o mesmo seja tomado por uma outra oferta, por um pagamento, ou cancelada pela conta que criou a oferta, ou invalidada porque a conta que fez a oferta não já não tem o ativo para venda.

### Transações multi-moedas

Stellar permite que você envie qualquer moeda que você mantenha a qualquer outra pessoa em uma moeda diferente através do sistema de câmbio distribuído. As pessoas podem receber qualquer moeda através de um gateway que eles acrescentaram.
Por exemplo, um usuário quer enviar euros a outro usando seu saldo de USD. Stellar envia automaticamente uma oferta para o câmbio distribuído vendendo USD para EUR. A rede encontra o melhor taxa de câmbio para a transação.
Eis algumas maneiras possíveis em que como a transação pode acontecer:
* Conversão através de uma oferta
Stellar encontra uma oferta sobre o câmbio USD / EUR interna para alguém que quer comprar euros por USD e automaticamente faz a troca entre as duas partes.
* Usando Stellars como moeda intermediária
Stellar olha por ofertas na rede pedindo USD em troca de stellars (a moeda nativa) e simultaneamente procura por uma oferta pedindo stellars em troca de euros. A rede faz essas trocas e envia ao outro usuário o crédito de euros resultante.
* Cadeia de conversões
Se não houver nenhuma relação explícita entre as ofertas de compra e venda, Stellar tenta encontrar ofertas da rede que vão levar uma cadeia de conversões de EUR para USD. Por exemplo, EUR para AUD, AUD para BTC, BTC para STR, STR para USD.

## Protocolo usado
### Antigo protocolo

Ao ser lançada, Stellar foi baseado no protocolo Ripple. Porém, em dezembro de 2014 foram encontradas falhas no sistema de consenso Ripple/Stellar que fizeram com que o rede Stellar tivesse que criar uma ramificação no livro-razão. Isso levou a uma interrupção temporária do seu sistema de transação e um debate mais amplo sobre a integridade do protocolo de consenso Ripple.
De acordo com o relatório inicial da Stellar, nós da rede não conseguiram chegar a um acordo sobre um livro-razão comum, essencialmente criando históricos gêmeos de transações que a equipe de desenvolvimento mais tarde corrigiu ao longo de um período de várias horas. Este processo resultou na perda de fundos de clientes em pelo menos uma casa de câmbio que oferece um mercado para ativos de token Stellars, chamado stellars, e a eliminação de transações que foram incluídos na cadeia que foi eventualmente alterada.
Como resultado do incidente, o Stellar Development Foundation iniciou os esforços para a criação de um protocolo de consenso que substituiria o usado, sendo esse projeto liderado por David Mazières do Grupo de Segurança Computacional da Universidade de Stanford.

### Stellar Consensus Protocol

Em abril de 2015, a Stellar Development Foundation, a organização que supervisiona o desenvolvimento da rede Stellar, lançou o código e o white paper do novo algoritmo. No whitepaper, David Mazières, introduz um novo modelo para consenso, chamado de Acordo Bizantino Federado(do inglês Federated Byzantine Agreement, FBA) e apresenta o Stellar Consensus Protocol, que é construido para o FBA.
Assim como o Acordo Bizantino não-federado(Non-federated Byzantine Agreement), o FBA aborda o problema de atualização replicada de estado, nesse caso em um livro-razão. Ao concordar sobre quais atualizações aplicar, os nós evitam estados contraditórios irreconciliáveis. Cada atualização é identificada como um slot e o protocolo de consenso assegura que todos os nós concordam com o conteúdo do slot. Quando os nós decidem que é seguro aplicar uma atualização, eles exteriorizam a declaração acordada para a sua réplica do livro-razão. O consenso só é alcançado quando todos os nós atualizam seus livros e exteriorizam o mesmo valor.
Porém, há problemas para garantir um consenso quando nós atuam arbitrariamente, comportamento chamado de falha bizantina(Byzantine failure), para tolerar nós que mentem, ou enviam mensagens incorretas e é imposto um grande desafio para se encontrar o consenso quando nós maliciosos juntam-se à rede e acabam tendo maior quantidade que os nós honestos. Para solucionar esses problemas, o Stellar Consensus Protocol foi projetado para que o sistema encontre um acordo sem que haja a necessidade de um consenso unânimo entre todos os nós.
Em um sistema distribuído, o quórum é um conjunto de nós suficientes para chegar a um acordo. O Acordo Bizantino Federado(Federated Byzantine Agreement) introduz o conceito de uma fatia de quórum(quorum slice), o subconjunto de um quorum que pode convencer um nó particular sobre o acordo. Existem várias diferenças importantes entre Acordo Bizantino Não-Federado tradicional e Acordo Bizantino Federado. O Acordo Bizantino garante o consenso distribuído, apesar da falha bizantina de participantes. No entanto, exige um acordo unânime sobre a adesão do sistema por todos os participantes. Já o Acordo Bizantino Federado traz a adesão aberta e controle descentralizado do acordo bizantino. A principal diferença entre um sistema de acordo bizantino e um sistema de acordo bizantino federado é que no Federado cada nó escolhe suas próprias fatias de quórum, e essas fatias são compostas por aqueles nós em que o nó confia.
Dessa maneira, o algorimo forma uma grande rede confiável de redes confiáveis menores, já que em cada fatia de quórum só há os nós em que um nó confia. E com isso, se o sistema mostrar que cada um desses quóruns menores não estão separados do resto, então podemos confiar no todo, confiando na rede. Como resultado, ao analisar como a rede é organizada, o sistema pode determinar matematicamente onde os pontos fracos estão, e em seguida, trabalhar para fortalecer os pontos fracos. Basicamente, ele pode ajudar as maquinas a determinarem em que outras máquinas devem confiar.
Assim, por esses e outros motivos, o Stellar Consensus Protocol tem um conjunto de características de segurança demonstráveis que otimizam a segurança ao invés da vivacidade- em caso de nós de partição ou nós se comportando mal, ele interrompe o progresso da rede até que o consenso possa ser alcançado. E com isso, o Stellar Consensus Protocol é o primeiro mecanismo de consenso demonstravelmente seguro que usufrui simultaneamente de quatro propriedades-chave: controle descentralizado, baixa latência, confiança flexível e segurança assintótica.