Sawtooth Lake (projeto)

Sawtooth Lake é um projeto open source da Intel que provê um framework para implementação de um livro razão distribuído.[1] Um dos focos da plataforma é a modularização e a flexibilidade. Esse foco faz com que o Sawtooth se diferencie da Blockchain do Bitcoin, permitindo o uso em aplicações variadas como: Internet das Coisas, gerenciamento de linhas de produção e processamento de apólices de seguro.[2] A ideia por trás da modularização é dividir os componentes do livro razão em uma "família de transações", onde cada membro da familia é responsável por uma funcionalidade de domínio específico.[2]

Uma das primeiras famílias de transação suportadas pelo Sawtooth é o MarketPlace[3] que estabelece o conceito de participantes, contas, valores (assets), holdings e contratos. Essa família também oferece um livro razão distribuído que facilita a distribuição dessas posses digitais. Como mencionado anteriormente, um dos focos do Sawtooth é a modularidade e, partindo desse princípio, é possível adicionar novas famílias para cobrir requisitos específicos.

Histórico editar

No dia 7 de abril de 2016, a Intel revelou o seu novo livro razão distribuído e experimental.[4][5][6][7] Além do código fonte,[8] foram postadas no Github informações sobre o projeto,[9] um tutorial para implementação do código[10] e vários guias.[11][12][13][14] No mesmo dia, uma apresentação também foi feita ao comitê do Hyperledger para introduzir o projeto.[15] Uma semana depois, em 14 de abril, foi feita uma proposta[16] de incubação junto ao Hyperledger. A proposta foi logo aceita[17] dando início à fase de incubação do Sawtooth Lake no Hyperledger.[18]

Motivação e tarefas da incubação editar

Motivação

A principal motivação do projeto é desacoplar o livro razão das transações.[16] Isso significa uma maior flexibilidade para suportar casos de usos diferentes. Outras motivações incluem[16]:

  • Famílias de transações podem fornecer suporte para diferentes modelos de dados e semânticas de transações, tornando o projeto extensível para diferentes domínios de negócio.
  • Flexibilidade para uso de de diferentes protocolos de consenso, tanto para redes permissionadas quanto não-permissionadas.

Os pontos destacados também estão alinhados às motivações do Hyperledger[19] que incuba este projeto.

Tarefas

Algumas tarefas listadas como centrais para o projeto incluem[16]:

  • Desenvolver diagramas adicionais de imagem e de texto.
  • Desenvolver um tutorial explicando o desenvolvimento e teste de novas famílias de transação.
  • Implementar novas famílias de transação, tanto para casos financeiros quanto para casos gerais.
  • Desenvolver um explorador de Blockchain.
  • Desenvolver um explorador de rede para coletar dados de topologia e estatísticas.
  • Demonstrar uma interface cliente para validadores em várias linguagens de programação.
  • Testes de stress, tanto para o tamanho da rede quanto para a quantidade de transações.

Algoritmo de consenso editar

Partindo do princípio da modularidade, o Sawtooth abstrai o conceito de consenso das transações. Isso permite que diferentes protocolos possam ser utilizados. O Sawtooth possui dois protocolos de consenso implementados.[20] Cada um desses protocolos são baseados nas duas principais maneiras de se estabelecer consenso em um sistema distribuído: através de uma espécie de loteria ou através de um sistema de votos. O protocolo da loteria é baseado na "Prova de Tempo Decorrido" (Proof of Elapsed Time),[21] enquanto o protocolo de votos é uma adaptação do consenso utilizado no Ripple[22] no Stellar[23] (Quorum Voting).[24]

Prova de Tempo Decorrido

Esse técnica provê um consenso de Nakamoto utilizando um ambiente de execução de código seguro (Trusted Execution Environment ou TEE). A segurança e aleatoriedade da eleição do líder é fornecida através desse ambiente de execução.[25] Ao utilizar o tempo de espera ao invés de uma técnica de prova de trabalho, a Prova de Tempo Decorrido diminui a necessidade por hardware especializados e alto poder computacional. Isso ocorre porque o ambiente de execução seguro valida o tempo esperado pelo validador.[26]

O processo de eleição do validador líder começa com todos os validadores "pedindo" um tempo de espera para uma função segura (presente no TEE). Depois de associado o tempo a cada validador, o que esperou menos tempo é eleito líder. A validade do tempo esperado e do tempo alocado a cada validador é garantida pelo TEE.

A Prova de Tempo Decorrido funciona como um bom algoritmo de loteria.[26] A escolha aleatória dos líderes segue uma distribuição similar a outros algoritmos de loteria, e a probabilidade dessa escolha é proporcional à quantidade de recursos dedicados. Como os recursos são processadores gerais que suportam TEE, o custo de participação é baixo e incentiva uma população grande de validadores. Essa técnica também diminui bastante o custo energético, já que a "prova" de trabalho é somente o tempo esperado. Vale destacar que a versão atual do Sawtooth roda sobre uma camada que emula um TEE, por isso ainda não está pronto para um ambiente de produção[27]:

This project includes a consensus algorithm, PoET (Proof of Elapsed Time), which is intended to run in a Trusted Execution Environment (TEE), such as Intel® Software Guard Extensions (SGX). This release includes software which runs outside of SGX and simulates the behavior of the PoET algorithm. It does not provide security in this mode. This project is intended for experimental usage and we recommend against using it for security sensitive applications.

Arquitetura Geral editar

A arquitetura do livro razão distribuído do Sawtooth consiste de três componentes centrais: o componente do livro razão (ledger), o diário (journal) e o componente de comunicação (communication).[28] Esses três componentes são organizados em camadas: a comunicação na base, o journal no centro e o ledger no topo. Dessa maneira, pode-se destacar que as camadas representam a hierarquia desses componentes. Por exemplo, a comunicação é a camada de mais baixo nível e serve como base para outras. Fazendo uma analogia com a Web, o HTTP serve como a camada de comunicação para vários sites.[29] Além das camadas centrais, vale citar os componentes básicos do projeto como as Transações (Transactions) e os Blocos (Blocks).

Transações (Transactions)

Transações são séries de mudanças a serem aplicadas atomicamente ao livro razão.[30] A transação também define o modelo e a representação dos dados.

Blocks (Blocos)

Blocos são um conjunto de transações que são aplicadas a um livro razão.[31] Como o bloco é somente um agregador de transações, não são esperadas várias implementações diferentes para esse componente, já que é dado suporte a vários tipos de transação em um único bloco. Uma possível exceção é o requisito de ter um tratamento especial para certos blocos.

Livro Razão (Ledger)

O componente do ledger define o modelo conceitual e semântico dos tipos de transação.[32] O ledger é dito como conceitual, porque nessa camada só são feitas as descrições do componentes, a implementação de fato é feita nas camadas inferiores do journal e de communication. Um ponto importante desta camada é que novos ledgers definem novas famílias de transações.

Diário (Journal)

Como a camada do meio, esta gerencia o consenso junto às transações.[33] Para prover essa funcionalidade, a camada Journal inclui o modelo de transação (transaction), o modelo de um bloco de transações (block transaction), os algoritmos de consenso e um módulo de armazenamento. Diferentemente da camada do ledger, esses não são modelos conceituais, ou seja, a implementação está presente nessa camada e não em camadas inferiores.

Comunicação (Communication)

A camada de comunicação gerencia a transmissão de mensagens entre os nós da rede.[34] Nessa camada, é implementado o protocolo de comunicação chamado gossip, suas mensagens e outros objetos relacionados à comunicação. Dentre os tipos de mensagens, pode-se destacar:

  • Mensagens de transação.
  • Mensagens de blocos de transação.
  • Mensagens de transferência de diário.
  • Mensagens de debug.
  • Mensagens de conexão.
  • Mensagens de desligamento.
  • Mensagens de topologia.

Referências

  1. «Sawtooth Architecture Overview». Consultado em 27 de Julho de 2016 
  2. a b «Sawtooth Introduction». Consultado em 26 de Julho de 2016 
  3. «What is the Sawtooth Lake Distributed Ledger?». Consultado em 26 de Julho de 2016 
  4. «Intel Reveals Its Plan For Blockchain Technology With 'Sawtooth Lake' Distributed Ledger». Consultado em 26 de Julho de 2016 
  5. «Intel Unveils 'Sawtooth Lake' Proposal at Hyperledger Meeting». Consultado em 26 de Julho de 2016 
  6. «Intel Develops 'Sawtooth Lake' Distributed Ledger Technology for the Hyperledger Project». Consultado em 26 de Julho de 2016 
  7. «Intel Jumps into Blockchain Technology Storm With 'Sawtooth Lake' Distributed Ledger». Consultado em 26 de Julho de 2016 
  8. «Experimental Distributed Ledger». Consultado em 26 de Julho de 2016 
  9. «Distributed Ledger». Consultado em 26 de Julho de 2016 
  10. «Sawtooth Tutorial». Consultado em 26 de Julho de 2016 
  11. «Transaction Family Tutorial». Consultado em 26 de Julho de 2016 
  12. «Sawtooth Lake Developer's Guide». Consultado em 26 de Julho de 2016 
  13. «MarketPlace Developer's Guide». Consultado em 26 de Julho de 2016 
  14. «System Administrator's Guide». Consultado em 26 de Julho de 2016 
  15. «Hyperledger Project TSC Agenda for April 7, 2016 TSC Meeting». Consultado em 26 de Julho de 2016 
  16. a b c d «Sawtooth Lake HIP 1.0». Consultado em 26 de Julho de 2016 
  17. «TSC Meeting 04.14.16». Consultado em 26 de Julho de 2016 
  18. «Hyperledger Proposals». Consultado em 26 de Julho de 2016 
  19. «Hyperledger Whitepaper». Consultado em 26 de Julho de 2016 
  20. «Sawtooth Consensus». Consultado em 26 de Julho de 2016 
  21. «Sawtooth Proof of Elapsed Time». Consultado em 26 de Julho de 2016 
  22. «The Ripple Protocol Consensus Algorithm» (PDF). Consultado em 27 de Julho de 2016 
  23. «The Stellar Consensus Protocol: A Federated Model for Internet-level Consensus» (PDF). Consultado em 27 de Julho de 2016 
  24. «Sawtooth Quorum Voting». Consultado em 26 de Julho de 2016 
  25. «The Trusted Execution Environment: Delivering Enhanced Security at a Lower Cost to the Mobile Market» (PDF). Consultado em 26 de Julho de 2016 
  26. a b «Sawtooth Proof of Elapsed Time». Consultado em 26 de Julho de 2016 
  27. «Sawtooth Warning». Consultado em 27 de Julho de 2016 
  28. «Sawtooth Core Architecture». Consultado em 26 de Julho de 2016 
  29. «HyperText Transfer Protocol». Consultado em 26 de Julho de 2016 
  30. «Sawtooth Transactions». Consultado em 26 de Julho de 2016 
  31. «Sawtooth Blocks». Consultado em 26 de Julho de 2016 
  32. «Sawtooth Ledgers». Consultado em 26 de Julho de 2016 
  33. «Sawtooth Journal». Consultado em 26 de Julho de 2016 
  34. «Sawtooth Communication». Consultado em 26 de Julho de 2016